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.