Class Index

Quicksearch

Arrow::Injectable

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.

Public Class Methods

derivatives() click to toggle source

(Not documented)

     # File /Users/ged/source/ruby/Arrow/lib/arrow/mixins.rb, line 218
218:         def self::derivatives; @derivatives; end
extend_object( obj ) click to toggle source

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
included( mod ) click to toggle source

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
load_class( classname ) click to toggle source

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

Public Instance Methods

inherited( klass ) click to toggle source

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

secsequence

--- SEC00079

seccomment

--- ""

method_list

--- 
- 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\">&quot;can't make a #{obj.class} Configurable&quot;</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\">&quot;%s included Injectable&quot;</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\">&quot;Loading injectable class '#{classname}'&quot;</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\">&quot;Class not loaded yet. Trying to &quot;</span> <span class=\"ruby-operator\">+</span>\n\
      245:                     <span class=\"ruby-node\">&quot;load it from #{modname}&quot;</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\">&quot;%s didn't register with Injectable for some reason&quot;</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\">&quot;Loaded injectable class %s (%d classes loaded)&quot;</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&#8216;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\">&quot;making %s Injectable&quot;</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

sectitle

--- 

[Validate]

Generated with the Darkfish Rdoc Generator.