A mixin for adding injectability to a data class. Classes which include this module can be loaded by name via Injectable.load_class, and will be collected in Injectable.derivatives when they load.
(Not documented)
# File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 218
218: def self::derivatives; @derivatives; end
Make the given object (which must be a Class) injectable.
# File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 221
221: def self::extend_object( obj )
222: raise ArgumentError, "can't make a #{obj.class} Configurable" unless
223: obj.is_a?( Class )
224: super
225: @derivatives[ obj.name ] = obj
226: end
Mixin hook: extend including classes
# File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 230
230: def self::included( mod )
231: Arrow::Logger[self].debug "%s included Injectable" % [ mod.name ]
232: mod.extend( self )
233: super
234: end
Return the Class object for the given derivative classname, attempting to load it if it hasn‘t been already.
# File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 239
239: def self::load_class( classname )
240: Arrow::Logger[self].debug "Loading injectable class '#{classname}'"
241:
242: unless Arrow::Injectable.derivatives.include?( classname )
243: modname = classname.downcase.gsub( /::/, '/' )
244: Arrow::Logger[self].debug "Class not loaded yet. Trying to " +
245: "load it from #{modname}"
246: require modname or
247: raise "%s didn't register with Injectable for some reason" %
248: classname
249: Arrow::Logger[self].debug "Loaded injectable class %s (%d classes loaded)" %
250: [ classname, Arrow::Injectable.derivatives.length ]
251: end
252:
253: Arrow::Injectable.derivatives[ classname ]
254: end
Classes which inherit from Injectable classes should be Injectable, too.
# File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 263
263: def inherited( klass )
264: Arrow::Logger[self].debug "making %s Injectable" % [ klass.name ]
265: klass.extend( Arrow::Injectable )
266: super
267: end
--- SEC00079
--- ""
---
- methods:
- visibility: public
aref: M000034
name: derivatives
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 218</span>\n\
218: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">derivatives</span>; <span class=\"ruby-ivar\">@derivatives</span>; <span class=\"ruby-keyword kw\">end</span>"
params: ()
- visibility: public
aref: M000035
name: extend_object
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 221</span>\n\
221: <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\
222: <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\
223: <span class=\"ruby-identifier\">obj</span>.<span class=\"ruby-identifier\">is_a?</span>( <span class=\"ruby-constant\">Class</span> )\n\
224: <span class=\"ruby-keyword kw\">super</span>\n\
225: <span class=\"ruby-ivar\">@derivatives</span>[ <span class=\"ruby-identifier\">obj</span>.<span class=\"ruby-identifier\">name</span> ] = <span class=\"ruby-identifier\">obj</span>\n\
226: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Make the given object (which must be a Class) injectable.
</p>
params: ( obj )
- visibility: public
aref: M000036
name: included
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 230</span>\n\
230: <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\
231: <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\">"%s included Injectable"</span> <span class=\"ruby-operator\">%</span> [ <span class=\"ruby-identifier\">mod</span>.<span class=\"ruby-identifier\">name</span> ]\n\
232: <span class=\"ruby-identifier\">mod</span>.<span class=\"ruby-identifier\">extend</span>( <span class=\"ruby-keyword kw\">self</span> )\n\
233: <span class=\"ruby-keyword kw\">super</span>\n\
234: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Mixin hook: extend including classes
</p>
params: ( mod )
- visibility: public
aref: M000037
name: load_class
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 239</span>\n\
239: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-keyword kw\">self</span><span class=\"ruby-operator\">::</span><span class=\"ruby-identifier\">load_class</span>( <span class=\"ruby-identifier\">classname</span> )\n\
240: <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-node\">"Loading injectable class '#{classname}'"</span>\n\
241: \n\
242: <span class=\"ruby-keyword kw\">unless</span> <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Injectable</span>.<span class=\"ruby-identifier\">derivatives</span>.<span class=\"ruby-identifier\">include?</span>( <span class=\"ruby-identifier\">classname</span> )\n\
243: <span class=\"ruby-identifier\">modname</span> = <span class=\"ruby-identifier\">classname</span>.<span class=\"ruby-identifier\">downcase</span>.<span class=\"ruby-identifier\">gsub</span>( <span class=\"ruby-regexp re\">/::/</span>, <span class=\"ruby-value str\">'/'</span> )\n\
244: <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\">"Class not loaded yet. Trying to "</span> <span class=\"ruby-operator\">+</span>\n\
245: <span class=\"ruby-node\">"load it from #{modname}"</span>\n\
246: <span class=\"ruby-identifier\">require</span> <span class=\"ruby-identifier\">modname</span> <span class=\"ruby-keyword kw\">or</span>\n\
247: <span class=\"ruby-identifier\">raise</span> <span class=\"ruby-value str\">"%s didn't register with Injectable for some reason"</span> <span class=\"ruby-operator\">%</span>\n\
248: <span class=\"ruby-identifier\">classname</span>\n\
249: <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\">"Loaded injectable class %s (%d classes loaded)"</span> <span class=\"ruby-operator\">%</span>\n\
250: [ <span class=\"ruby-identifier\">classname</span>, <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Injectable</span>.<span class=\"ruby-identifier\">derivatives</span>.<span class=\"ruby-identifier\">length</span> ]\n\
251: <span class=\"ruby-keyword kw\">end</span>\n\
252: \n\
253: <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Injectable</span>.<span class=\"ruby-identifier\">derivatives</span>[ <span class=\"ruby-identifier\">classname</span> ]\n\
254: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Return the Class object for the given derivative <tt>classname</tt>,
attempting to load it if it hasn‘t been already.
</p>
params: ( classname )
category: Class
type: Public
- methods:
- visibility: public
aref: M000038
name: inherited
sourcecode: " <span class=\"ruby-comment cmt\"># File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 263</span>\n\
263: <span class=\"ruby-keyword kw\">def</span> <span class=\"ruby-identifier\">inherited</span>( <span class=\"ruby-identifier\">klass</span> )\n\
264: <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\">"making %s Injectable"</span> <span class=\"ruby-operator\">%</span> [ <span class=\"ruby-identifier\">klass</span>.<span class=\"ruby-identifier\">name</span> ]\n\
265: <span class=\"ruby-identifier\">klass</span>.<span class=\"ruby-identifier\">extend</span>( <span class=\"ruby-constant\">Arrow</span><span class=\"ruby-operator\">::</span><span class=\"ruby-constant\">Injectable</span> )\n\
266: <span class=\"ruby-keyword kw\">super</span>\n\
267: <span class=\"ruby-keyword kw\">end</span>"
m_desc: |-
<p>
Classes which inherit from <a href="Injectable.html">Injectable</a> classes
should be <a href="Injectable.html">Injectable</a>, too.
</p>
params: ( klass )
category: Instance
type: Public
---
Generated with the Darkfish Rdoc Generator.