A mixin that adds configurability via an Arrow::Config object.
(Not documented)
Configure Configurable classes with the sections of the specified config that correspond to their config_key, if present. (Undocumented)
# File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 137
137: def self::configure_modules( config, dispatcher )
138:
139: # Have to keep messages from being logged before logging is
140: # configured.
141: logmessages = []
142: # logmessages << [
143: # :debug, "Propagating config to Configurable classes: %p" %
144: # [@modules] ]
145:
146: @modules.each do |mod|
147: key = mod.config_key
148:
149: if config.member?( key )
150: value = config.send( key )
151: logmessages << [
152: :debug,
153: "Configuring %s with the %s section of the config: %p" %
154: [mod.name, key, value] ]
155:
156: if mod.method(:configure).arity == 2
157: mod.configure( value, dispatcher )
158: else
159: mod.configure( value )
160: end
161: else
162: logmessages << [
163: :debug,
164: "Skipping %s: no %s section in the config" %
165: [mod.name, key] ]
166: end
167: end
168:
169: logmessages.each do |lvl, message|
170: Arrow::Logger[ self ].send( lvl, message )
171: end
172:
173: Arrow::Logger[ self ].debug "Propagated config to %d modules: %p" %
174: [ @modules.length, @modules ]
175: return @modules
176: end
Make the given object (which must be a Module) configurable via a section of an Arrow::Config object.
# File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 112
112: def self::extend_object( obj )
113: raise ArgumentError, "can't make a #{obj.class} Configurable" unless
114: obj.is_a?( Module )
115:
116: super
117: @modules << obj
118: end
Mixin hook: extend including classes
# File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 128
128: def self::included( mod )
129: mod.extend( self )
130: super
131: end
Generate a config key from the name of the given klass.
# File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 122
122: def self::make_key_from_classname( klass )
123: klass.name.sub( /^Arrow::/, '' ).gsub( /\W+/, '_' ).downcase.to_sym
124: end
Get (and optionally set) the config_key.
# File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 195
195: def config_key( sym=nil )
196: @config_key = sym unless sym.nil?
197: @config_key ||= Arrow::Configurable.make_key_from_classname( self )
198: @config_key
199: end
--- SEC00078
--- ""
---
- name: config_key
rw: W
a_desc: |+
The symbol which corresponds to the section of the configuration used to <a
href="Configurable.html#M000048">configure</a> the <a
href="Configurable.html">Configurable</a> class.
- name: modules
rw: RW
a_desc: ""
---
- methods:
- visibility: public
aref: M000046
name: configure_modules
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 137</span>\n\
137: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">configure_modules</span>( <span class=\"ruby-identifier\">config</span>, <span class=\"ruby-identifier\">dispatcher</span> )\n\
138: \n\
139: <span class=\"ruby-comment cmt\"># Have to keep messages from being logged before logging is </span>\n\
140: <span class=\"ruby-comment cmt\"># configured.</span>\n\
141: <span class=\"ruby-identifier\">logmessages</span> = []\n\
142: <span class=\"ruby-comment cmt\"># logmessages << [</span>\n\
143: <span class=\"ruby-comment cmt\"># :debug, "Propagating config to Configurable classes: %p" %</span>\n\
144: <span class=\"ruby-comment cmt\"># [@modules] ]</span>\n\
145: \n\
146: <span class=\"ruby-ivar\">@modules</span>.<span class=\"ruby-identifier\">each</span> <span class=\"ruby-keyword kw\">do</span> <span class=\"ruby-operator\">|</span><span class=\"ruby-identifier\">mod</span><span class=\"ruby-operator\">|</span>\n\
147: <span class=\"ruby-identifier\">key</span> = <span class=\"ruby-identifier\">mod</span>.<span class=\"ruby-identifier\">config_key</span>\n\
148: \n\
149: <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-identifier\">config</span>.<span class=\"ruby-identifier\">member?</span>( <span class=\"ruby-identifier\">key</span> )\n\
150: <span class=\"ruby-identifier\">value</span> = <span class=\"ruby-identifier\">config</span>.<span class=\"ruby-identifier\">send</span>( <span class=\"ruby-identifier\">key</span> )\n\
151: <span class=\"ruby-identifier\">logmessages</span> <span class=\"ruby-operator\"><<</span> [\n\
152: <span class=\"ruby-identifier\">:debug</span>, \n\
153: <span class=\"ruby-value str\">"Configuring %s with the %s section of the config: %p"</span> <span class=\"ruby-operator\">%</span>\n\
154: [<span class=\"ruby-identifier\">mod</span>.<span class=\"ruby-identifier\">name</span>, <span class=\"ruby-identifier\">key</span>, <span class=\"ruby-identifier\">value</span>] ]\n\
155: \n\
156: <span class=\"ruby-keyword kw\">if</span> <span class=\"ruby-identifier\">mod</span>.<span class=\"ruby-identifier\">method</span>(<span class=\"ruby-identifier\">:configure</span>).<span class=\"ruby-identifier\">arity</span> <span class=\"ruby-operator\">==</span> <span class=\"ruby-value\">2</span>\n\
157: <span class=\"ruby-identifier\">mod</span>.<span class=\"ruby-identifier\">configure</span>( <span class=\"ruby-identifier\">value</span>, <span class=\"ruby-identifier\">dispatcher</span> )\n\
158: <span class=\"ruby-keyword kw\">else</span>\n\
159: <span class=\"ruby-identifier\">mod</span>.<span class=\"ruby-identifier\">configure</span>( <span class=\"ruby-identifier\">value</span> )\n\
160: <span class=\"ruby-keyword kw\">end</span>\n\
161: <span class=\"ruby-keyword kw\">else</span>\n\
162: <span class=\"ruby-identifier\">logmessages</span> <span class=\"ruby-operator\"><<</span> [\n\
163: <span class=\"ruby-identifier\">:debug</span>,\n\
164: <span class=\"ruby-value str\">"Skipping %s: no %s section in the config"</span> <span class=\"ruby-operator\">%</span>\n\
165: [<span class=\"ruby-identifier\">mod</span>.<span class=\"ruby-identifier\">name</span>, <span class=\"ruby-identifier\">key</span>] ]\n\
166: <span class=\"ruby-keyword kw\">end</span>\n\
167: <span class=\"ruby-keyword kw\">end</span>\n\
168: \n\
169: <span class=\"ruby-identifier\">logmessages</span>.<span class=\"ruby-identifier\">each</span> <span class=\"ruby-keyword kw\">do</span> <span class=\"ruby-operator\">|</span><span class=\"ruby-identifier\">lvl</span>, <span class=\"ruby-identifier\">message</span><span class=\"ruby-operator\">|</span>\n\
170: <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Logger</span>[ <span class=\"ruby-keyword kw\">self</span> ].<span class=\"ruby-identifier\">send</span>( <span class=\"ruby-identifier\">lvl</span>, <span class=\"ruby-identifier\">message</span> )\n\
171: <span class=\"ruby-keyword kw\">end</span>\n\
172: \n\
173: <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Logger</span>[ <span class=\"ruby-keyword kw\">self</span> ].<span class=\"ruby-identifier\">debug</span> <span class=\"ruby-value str\">"Propagated config to %d modules: %p"</span> <span class=\"ruby-operator\">%</span>\n\
174: [ <span class=\"ruby-ivar\">@modules</span>.<span class=\"ruby-identifier\">length</span>, <span class=\"ruby-ivar\">@modules</span> ]\n\
175: <span class=\"ruby-keyword kw\">return</span> <span class=\"ruby-ivar\">@modules</span>\n\
176: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Configure <a href="Configurable.html">Configurable</a> classes with the
sections of the specified <tt>config</tt> that correspond to their <tt><a
href="Configurable.html#M000047">config_key</a></tt>, if present.
(Undocumented)
</p>
params: ( config, dispatcher )
- visibility: public
aref: M000043
name: extend_object
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 112</span>\n\
112: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">extend_object</span>( <span class=\"ruby-identifier\">obj</span> )\n\
113: <span class=\"ruby-identifier\">raise</span> <span class=\"ruby-constant\">ArgumentError</span>, <span class=\"ruby-node\">"can't make a #{obj.class} Configurable"</span> <span class=\"ruby-keyword kw\">unless</span>\n\
114: <span class=\"ruby-identifier\">obj</span>.<span class=\"ruby-identifier\">is_a?</span>( <span class=\"ruby-constant\">Module</span> )\n\
115: \n\
116: <span class=\"ruby-keyword kw\">super</span>\n\
117: <span class=\"ruby-ivar\">@modules</span> <span class=\"ruby-operator\"><<</span> <span class=\"ruby-identifier\">obj</span>\n\
118: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Make the given object (which must be a <a href="../Module.html">Module</a>)
configurable via a section of an <a href="Config.html">Arrow::Config</a>
object.
</p>
params: ( obj )
- visibility: public
aref: M000045
name: included
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 128</span>\n\
128: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">included</span>( <span class=\"ruby-identifier\">mod</span> )\n\
129: <span class=\"ruby-identifier\">mod</span>.<span class=\"ruby-identifier\">extend</span>( <span class=\"ruby-keyword kw\">self</span> )\n\
130: <span class=\"ruby-keyword kw\">super</span>\n\
131: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Mixin hook: extend including classes
</p>
params: ( mod )
- visibility: public
aref: M000044
name: make_key_from_classname
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 122</span>\n\
122: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">make_key_from_classname</span>( <span class=\"ruby-identifier\">klass</span> )\n\
123: <span class=\"ruby-identifier\">klass</span>.<span class=\"ruby-identifier\">name</span>.<span class=\"ruby-identifier\">sub</span>( <span class=\"ruby-regexp re\">/^Arrow::/</span>, <span class=\"ruby-value str\">''</span> ).<span class=\"ruby-identifier\">gsub</span>( <span class=\"ruby-regexp re\">/\\W+/</span>, <span class=\"ruby-value str\">'_'</span> ).<span class=\"ruby-identifier\">downcase</span>.<span class=\"ruby-identifier\">to_sym</span>\n\
124: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Generate a config key from the name of the given <tt>klass</tt>.
</p>
params: ( klass )
category: Class
type: Public
- methods:
- visibility: public
aref: M000047
name: config_key
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 195</span>\n\
195: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">config_key</span>( <span class=\"ruby-identifier\">sym</span>=<span class=\"ruby-keyword kw\">nil</span> )\n\
196: <span class=\"ruby-ivar\">@config_key</span> = <span class=\"ruby-identifier\">sym</span> <span class=\"ruby-keyword kw\">unless</span> <span class=\"ruby-identifier\">sym</span>.<span class=\"ruby-identifier\">nil?</span>\n\
197: <span class=\"ruby-ivar\">@config_key</span> <span class=\"ruby-operator\">||=</span> <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Configurable</span>.<span class=\"ruby-identifier\">make_key_from_classname</span>( <span class=\"ruby-keyword kw\">self</span> )\n\
198: <span class=\"ruby-ivar\">@config_key</span>\n\
199: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Get (and optionally set) the <tt><a
href="Configurable.html#M000047">config_key</a></tt>.
</p>
params: ( sym=nil )
- visibility: public
aref: M000048
name: configure
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 203</span>\n\
203: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">configure</span>( <span class=\"ruby-identifier\">config</span>, <span class=\"ruby-identifier\">dispatcher</span> )\n\
204: <span class=\"ruby-identifier\">raise</span> <span class=\"ruby-constant\">NotImplementedError</span>,\n\
205: <span class=\"ruby-node\">"#{self.name} does not implement required method 'configure'"</span>\n\
206: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Default configuration method.
</p>
params: ( config, dispatcher )
category: Instance
type: Public
---
Generated with the Darkfish Rdoc Generator.