<!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">
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_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">
145
146
147</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/hws_settings.rb', line 145</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">
107
108
109
110
111
112
113
114
115</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/hws_settings.rb', line 107</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">
118
119
120</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/hws_settings.rb', line 118</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">
128
129
130
131
132
133
134
135
136</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/hws_settings.rb', line 128</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">
140
141
142</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/hws_settings.rb', line 140</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">
162
163
164
165
166
167
168
169
170
171
172
173
174
175</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/hws_settings.rb', line 162</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='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 Tue Sep 15 01:20:29 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 |
|
#1
|
15741 |
ptomiak |
Branch HWS for my use. |
|
|