Module: NanDoc::SharedAttrReader

Included in:
Helpers::NanDocHelpers::SiteMap
Defined in:
lib/nandoc/support-modules.rb

Instance Method Summary collapse

Instance Method Details

#shared_attr_reader(*list) ⇒ Object

this is a specialized form of delegator pattern: let one object use the responses from another object for a set of accessors



229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
# File 'lib/nandoc/support-modules.rb', line 229

def shared_attr_reader *list
  fail('no inehiritance yet') if method_defined?(:shared=)
  sm = Module.new
  name = self.to_s+'::SharedAttrReaders'
  sing = class << sm; self end
  sing.send(:define_method, :name){name}
  sing.send(:alias_method, :inspect, :name)
  list.each do |attrib|
    sm.send(:define_method, attrib){ shared.send(attrib) }
  end
  fail('no') if method_defined?(:shared)
  define_method(:shared){ self }
  define_method(:shared=) do |source|
    sing = class << self; self end
    sing.send(:define_method, :shared){ source }
    sing.send(:include, sm) # wow cool that this works w/o having
                            # to Module#undef_method
    source
  end
  nil
end