<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> Class: HWSSettings — Documentation by YARD 0.8.7.6 </title> <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" /> <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" /> <script type="text/javascript" charset="utf-8"> hasFrames = window.top.frames.main ? true : false; relpath = ''; framesUrl = "frames.html#!HWSSettings.html"; </script> <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script> <script type="text/javascript" charset="utf-8" src="js/app.js"></script> </head> <body> <div id="header"> <div id="menu"> <a href="_index.html">Index (H)</a> » <span class="title">HWSSettings</span> <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div> </div> <div id="search"> <a class="full_list_link" id="class_list_link" href="class_list.html"> Class List </a> <a class="full_list_link" id="method_list_link" href="method_list.html"> Method List </a> <a class="full_list_link" id="file_list_link" href="file_list.html"> File List </a> </div> <div class="clear"></div> </div> <iframe id="search_frame"></iframe> <div id="content"><h1>Class: HWSSettings </h1> <dl class="box"> <dt class="r1">Inherits:</dt> <dd class="r1"> <span class="inheritName">Object</span> <ul class="fullTree"> <li>Object</li> <li class="next">HWSSettings</li> </ul> <a href="#" class="inheritanceTree">show all</a> </dd> <dt class="r2 last">Defined in:</dt> <dd class="r2 last">lib/hws_settings.rb</dd> </dl> <div class="clear"></div> <h2>Overview</h2><div class="docstring"> <div class="discussion"> <p>A Rack middleware application that creates a single configuration for Helix Web Services.</p> <p>Most web services are modular Sinatra applications, which does come with it's own settings mechanism. We should try to avoid those settings in most cases. Perhaps only if those settings are only relevant to the logic directly within the Sinatra app.</p> <p>Many other settings, like the port setting of the associated Helix Versioning Engine, should be exposed and overridable by the client application. These settings should be defined here.</p> <p>This class provides middleware that will inject an <code>hws_settings</code> object into each request. This <code>hws_settings</code> object is seeded by values declared on this class. When the system starts, our system config file is read in, and default system values are overridden. On any request, these settings can be overridden by the user.</p> <p>Additionally, there are “system” settings that are only overridable from the system config file. Client classes should reference this class directly: HWSSettings.system.</p> <h2 id="label-Naming+Conventions">Naming Conventions</h2> <p>Use uppercase letters, numbers, or underscores only.</p> <h2 id="label-HTTP+Header+Override+Syntax">HTTP Header Override Syntax</h2> <p>We allow per-request overrides of settings via HTTP headers.</p> <p>The key format of the custom setting is:</p> <p><code>X-PERFORCE-HELIX_WEB_SERVICES-{key}</code></p> <p>For example:</p> <pre class="code ruby"><code class="ruby">X-PERFORCE-HELIX_WEB_SERVICES-P4HOST: perforce.mycompany.com X-PERFORCE-HELIX_WEB_SERVICES-P4CHARSET: auto</code></pre> <p>Please note that headers will be converted by Rack to all uppercase, hence our naming conventions.</p> <h2 id="label-System+Config+File">System Config File</h2> <p>The system configuration is stored in the <code>/etc/perforce/helix_web_services.conf</code> file. This is a YAML file, and we override any locally defined variables with values found in this file. ()If you specify a value in this file we do not locally define, we ignore it.)</p> <p>Example values in /etc/perforce/helix_web_services.conf:</p> <pre class="code ruby"><code class="ruby">P4HOST: 'perforce.mycompany.com' P4PORT: '9991'</code></pre> </div> </div> <div class="tags"> </div> <h2>Constant Summary</h2> <dl class="constants"> <dt id="SYSTEM_CONFIG_PATH-constant" class="">SYSTEM_CONFIG_PATH = </dt> <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>/etc/perforce/helix_web_services.conf</span><span class='tstring_end'>'</span></span></pre></dd> </dl> <h2> Class Method Summary <small>(<a href="#" class="summary_toggle">collapse</a>)</small> </h2> <ul class="summary"> <li class="public "> <span class="summary_signature"> <a href="#overrides-class_method" title="overrides (class method)">+ (Object) <strong>overrides</strong> </a> </span> <span class="summary_desc"><div class='inline'> <p>Return the system overrides in our system configuration file.</p> </div></span> </li> <li class="public "> <span class="summary_signature"> <a href="#settings-class_method" title="settings (class method)">+ (Object) <strong>settings</strong> </a> </span> <span class="summary_desc"><div class='inline'> <p>Returns baseline settings with system overrides applied.</p> </div></span> </li> <li class="public "> <span class="summary_signature"> <a href="#settings_handle-class_method" title="settings_handle (class method)">+ (Object) <strong>settings_handle</strong> </a> </span> <span class="summary_desc"><div class='inline'> <p>You can tweak the default settings directly here in code.</p> </div></span> </li> <li class="public "> <span class="summary_signature"> <a href="#system-class_method" title="system (class method)">+ (Object) <strong>system</strong> </a> </span> <span class="summary_desc"><div class='inline'> <p>Returns our system settings overridden by local configuration in overrides.</p> </div></span> </li> <li class="public "> <span class="summary_signature"> <a href="#system_handle-class_method" title="system_handle (class method)">+ (Object) <strong>system_handle</strong> </a> </span> <span class="summary_desc"><div class='inline'> <p>In case your code wants to edit the system classes directly.</p> </div></span> </li> </ul> <h2> Instance Method Summary <small>(<a href="#" class="summary_toggle">collapse</a>)</small> </h2> <ul class="summary"> <li class="public "> <span class="summary_signature"> <a href="#call-instance_method" title="#call (instance method)">- (Object) <strong>call</strong>(env) </a> </span> <span class="summary_desc"><div class='inline'></div></span> </li> <li class="public "> <span class="summary_signature"> <a href="#initialize-instance_method" title="#initialize (instance method)">- (HWSSettings) <strong>initialize</strong>(app) </a> </span> <span class="note title constructor">constructor</span> <span class="summary_desc"><div class='inline'> <p>A new instance of HWSSettings.</p> </div></span> </li> </ul> <div id="constructor_details" class="method_details_list"> <h2>Constructor Details</h2> <div class="method_details first"> <h3 class="signature first" id="initialize-instance_method"> - (<tt><span class='object_link'><a href="" title="HWSSettings (class)">HWSSettings</a></span></tt>) <strong>initialize</strong>(app) </h3><div class="docstring"> <div class="discussion"> <p>Returns a new instance of HWSSettings</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 172 173 174</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/hws_settings.rb', line 172</span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_app'>app</span><span class='rparen'>)</span> <span class='ivar'>@app</span> <span class='op'>=</span> <span class='id identifier rubyid_app'>app</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> </div> <div id="class_method_details" class="method_details_list"> <h2>Class Method Details</h2> <div class="method_details first"> <h3 class="signature first" id="overrides-class_method"> + (<tt>Object</tt>) <strong>overrides</strong> </h3><div class="docstring"> <div class="discussion"> <p>Return the system overrides in our system configuration file.</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 158 159 160</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/hws_settings.rb', line 158</span> <span class='kw'>def</span> <span class='id identifier rubyid_overrides'>overrides</span> <span class='kw'>return</span> <span class='ivar'>@overrides</span> <span class='op'>||=</span> <span class='id identifier rubyid_init_overrides'>init_overrides</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="settings-class_method"> + (<tt>Object</tt>) <strong>settings</strong> </h3><div class="docstring"> <div class="discussion"> <p>Returns baseline settings with system overrides applied.</p> <p>This is a copy of state. If you want to alter the default settings in code instead of via config files, use the <code>settings_handle</code></p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 120 121 122 123 124 125 126 127 128</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/hws_settings.rb', line 120</span> <span class='kw'>def</span> <span class='id identifier rubyid_settings'>settings</span> <span class='id identifier rubyid_s'>s</span> <span class='op'>=</span> <span class='const'>OpenStruct</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='ivar'>@settings</span><span class='rparen'>)</span> <span class='id identifier rubyid_s'>s</span><span class='period'>.</span><span class='id identifier rubyid_each_pair'>each_pair</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid__'>_</span><span class='op'>|</span> <span class='kw'>if</span> <span class='id identifier rubyid_overrides'>overrides</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span> <span class='id identifier rubyid_s'>s</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_overrides'>overrides</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span> <span class='kw'>end</span> <span class='kw'>end</span> <span class='id identifier rubyid_s'>s</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="settings_handle-class_method"> + (<tt>Object</tt>) <strong>settings_handle</strong> </h3><div class="docstring"> <div class="discussion"> <p>You can tweak the default settings directly here in code.</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 131 132 133</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/hws_settings.rb', line 131</span> <span class='kw'>def</span> <span class='id identifier rubyid_settings_handle'>settings_handle</span> <span class='ivar'>@settings</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="system-class_method"> + (<tt>Object</tt>) <strong>system</strong> </h3><div class="docstring"> <div class="discussion"> <p>Returns our system settings overridden by local configuration in overrides.</p> <p>This is a <em>copy</em> of the class system settings, suitable for editing and passing on.</p> <p>See the official guide for declared options.</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 141 142 143 144 145 146 147 148 149</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/hws_settings.rb', line 141</span> <span class='kw'>def</span> <span class='id identifier rubyid_system'>system</span> <span class='id identifier rubyid_s'>s</span> <span class='op'>=</span> <span class='const'>OpenStruct</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='ivar'>@system</span><span class='rparen'>)</span> <span class='id identifier rubyid_s'>s</span><span class='period'>.</span><span class='id identifier rubyid_each_pair'>each_pair</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid__'>_</span><span class='op'>|</span> <span class='kw'>if</span> <span class='id identifier rubyid_overrides'>overrides</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span> <span class='id identifier rubyid_s'>s</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_overrides'>overrides</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span> <span class='kw'>end</span> <span class='kw'>end</span> <span class='id identifier rubyid_s'>s</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="system_handle-class_method"> + (<tt>Object</tt>) <strong>system_handle</strong> </h3><div class="docstring"> <div class="discussion"> <p>In case your code wants to edit the system classes directly. Typically used for test initialization.</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 153 154 155</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/hws_settings.rb', line 153</span> <span class='kw'>def</span> <span class='id identifier rubyid_system_handle'>system_handle</span> <span class='ivar'>@system</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> </div> <div id="instance_method_details" class="method_details_list"> <h2>Instance Method Details</h2> <div class="method_details first"> <h3 class="signature first" id="call-instance_method"> - (<tt>Object</tt>) <strong>call</strong>(env) </h3><table class="source_code"> <tr> <td> <pre class="lines"> 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/hws_settings.rb', line 176</span> <span class='kw'>def</span> <span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_env'>env</span><span class='rparen'>)</span> <span class='id identifier rubyid_hws_settings'>hws_settings</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_settings'>settings</span> <span class='comment'># TODO: need to whitelist P4PORT for cloud, arbitrary perforce servers not supported </span> <span class='id identifier rubyid_env'>env</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='op'>|</span> <span class='id identifier rubyid_match'>match</span> <span class='op'>=</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^HTTP_X_PERFORCE_HELIX_WEB_SERVICES_(.*)$</span><span class='regexp_end'>/</span></span><span class='period'>.</span><span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_match'>match</span> <span class='id identifier rubyid_hws_settings'>hws_settings</span><span class='lbracket'>[</span><span class='id identifier rubyid_match'>match</span><span class='lbracket'>[</span><span class='int'>1</span><span class='rbracket'>]</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_value'>value</span> <span class='kw'>end</span> <span class='kw'>end</span> <span class='id identifier rubyid_env'>env</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>hws_settings</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_hws_settings'>hws_settings</span> <span class='ivar'>@app</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_env'>env</span><span class='rparen'>)</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> </div> </div> <div id="footer"> Generated on Mon Oct 12 22:20:52 2015 by <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a> 0.8.7.6 (ruby-2.2.3). </div> </body> </html>
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#11 | 16275 | Doug Scheirer | Merge from main | ||
#10 | 16196 | Doug Scheirer | Merge from main | ||
#9 | 16148 | Doug Scheirer | Merge from main | ||
#8 | 16114 | Doug Scheirer | Merge from main | ||
#7 | 16079 | Doug Scheirer | Merge from main | ||
#6 | 16014 | Doug Scheirer | Merge down from main | ||
#5 | 15884 | Doug Scheirer | Merge from main | ||
#4 | 15868 | Doug Scheirer | Merge from main | ||
#3 | 15845 | Doug Scheirer | Integ from main | ||
#2 | 15715 | Doug Scheirer | merge changes from main | ||
#1 | 15688 | Doug Scheirer |
Populate -o //guest/perforce_software/helix-web-services/... //guest/doug_scheirer/helix-web-services/.... |
||
//guest/perforce_software/helix-web-services/main/build/doc/helix_web_services/HWSSettings.html | |||||
#32 | 15676 | tjuricek | HWS/NOARCH/2015.1.main/201509092205 | ||
#31 | 15589 | tjuricek | Update path to test output and update docs. | ||
#30 | 15542 | tjuricek |
Add spaces to our basic 'component encode' mechanism, and use it for HVE project IDs. In general, this will make the HVE IDs a bit more readable. |
||
#29 | 15517 | tjuricek | Do not require changelist ID for submitting Helix Sync pending changelists. | ||
#28 | 15499 | tjuricek | Naive implementation of helix sync project submit for "helix versioning engine projects". | ||
#27 | 15487 | tjuricek | Add basic ability to create pending changelists for helix sync projects. | ||
#26 | 15479 | tjuricek | Added a basic "HVE project" implementation for creating clients. | ||
#25 | 15447 | tjuricek |
Add simple Example application to list "projects" in a HVE instance. Qt's a little weird to follow, so I may have to find a different kind of example to write. It does work, however. |
||
#24 | 15240 | tjuricek |
Set api level via request path on all Helix Versioning Engine methods. This will allow migration of applications to different P4D versions. Our internal methods (like project API) should attempt to handle backward compatibility similarly. P4WEBAPI-118 |
||
#23 | 15228 | tjuricek | Revise triggers implementation, tests, and documentation. | ||
#22 | 15227 | tjuricek |
Revise implementation, tests, and documentation for protections management. Remove some specs I will not be revising from the helix_web_services project. |
||
#21 | 15225 | tjuricek |
Revise counter implementation, tests, and documentation Wasn't available in the Ruby client before, so, it's now available. |
||
#20 | 15222 | tjuricek |
Revise server specs testing and documentation. Note: also fixed issues with setting P4PORT via headers. For whatever reason, the host setting doesn't seem to work like I expect it to, though P4PORT works just fine. |
||
#19 | 15211 | tjuricek | Implement tests and documentation for label spec management. | ||
#18 | 15210 | tjuricek | Implement tests and documentation for job spec management. | ||
#17 | 15209 | tjuricek | Implement tests and documentation for group spec management. | ||
#16 | 15208 | tjuricek |
Revise 'command' implementation, tests, and documentaiton. This includes a change from a command blacklist to a whitelist. See P4WEBAPI-21 |
||
#15 | 15205 | tjuricek | Implemented tests and documentation for depot spec editing. | ||
#14 | 15189 | tjuricek | Update files implementation, testing, and documentation. | ||
#13 | 15185 | tjuricek | Update user spec management implementation, tests, and documentation. | ||
#12 | 15144 | tjuricek |
Setup stream spec tests and documentation. Also revised the documentation folder http_p4_web_api -> helix_versioning_engine |
||
#11 | 15132 | tjuricek | Provde a basic submit -e mechanism on classic perforce workspaces. | ||
#10 | 15110 | tjuricek | Revise changes methods for new p4 connection handling, add server specs, remove model references in client, and update asciidoc documentation. | ||
#9 | 15099 | tjuricek | Revise project services to be our simple 'container' for other systems. | ||
#8 | 15098 | tjuricek |
Revised project services to GET-only forms. With Helix Sync revising to integrate purely with Helix Cloud, this is the only thing we can reasonably define. |
||
#7 | 15090 | tjuricek |
Update _proposed_ API for project services. This is *very likely* to change, and will not be implemented until reviewed. |
||
#6 | 15078 | tjuricek |
clients spec method revisions Updated some other documentation. |
||
#5 | 15077 | tjuricek |
Add new 'model' technique, revised branch spec operations, test Auth::Middleware. The Ruby client now does *not* strictly type anything, but extends OpenStruct with helper methods to help deal with inconsistent data formats. See the OpenModel class documentation for more details. The Auth::Middleware class is also *finally* implemented as well. This does not take into account all possible variations of server behavior (yet), but that will happen in follow-up work. |
||
#4 | 15073 | tjuricek | Update Auth::Middleware and add spec | ||
#3 | 15053 | tjuricek |
Revise the client API to use the new login method. The current specs will need to be revised since data normalization is moving out of the server and into the client. |
||
#2 | 15038 | tjuricek | Document 'login' auth method and client programming overview. | ||
#1 | 15032 | tjuricek |
Starting config and doc revisions. System is now broken while revisions underway. Configuration of the p4d connection is now done via a single HWSSettings middleware object injected into the Rack env. The HWSP4Cleanup middleware now cleans up any p4 injected into the Rack env. The Auth::App class now mostly just contains one method to generate a p4 ticket. /auth/v1/login. Added yard documentation for the main project. Yard docs have been reconfigured to dump into build/ directories. This should probably be done with each release. Hm... The top level rake file contains a task, 'all:doc', to update our documentation. This should probably be run for each checkin. Hm... Specs are now using Rack::Test on top of a 'live' p4d. I'd suggest you still use the p4util mechanism, which now dumps to a /tmp folder, so we can safely add P4IGNORE rules back into your local .p4config file. Old 'perforce' application now called 'helix_versioning_engine'. Removing cache data. Helix Sync may be slow. It may also get axed. We'll see. |