Sha256: ed9c4cbcb98b4f4a0a12031df630def9a7a57536fd02f264aa0a309bd897f8fb
Contents?: true
Size: 1.82 KB
Versions: 3
Compression:
Stored size: 1.82 KB
Contents
module InheritableClassAttributes def self.included(base) base.extend ClassMethods base.module_eval do class << self alias inherited_without_inheritable_class_attributes inherited alias inherited inherited_with_inheritable_class_attributes end end end module ClassMethods def inheritable_cattr_readers @inheritable_class_readers ||= [] end def inheritable_cattr_writers @inheritable_class_writers ||= [] end def cattr_inheritable_reader(*symbols) symbols.each do |symbol| self.inheritable_cattr_readers << symbol self.module_eval %{ def self.#{symbol} @#{symbol} end } end self.inheritable_cattr_readers.uniq! end def cattr_inheritable_writer(*symbols) symbols.each do |symbol| self.inheritable_cattr_writers << symbol self.module_eval %{ def self.#{symbol}=(value) @#{symbol} = value end } end self.inheritable_cattr_writers.uniq! end def cattr_inheritable_accessor(*symbols) cattr_inheritable_writer(*symbols) cattr_inheritable_reader(*symbols) end def inherited_with_inheritable_class_attributes(klass) inherited_without_inheritable_class_attributes(child) if respond_to?(:inherited_without_inheritable_class_attributes) readers = inheritable_cattr_readers.dup writers = inheritable_cattr_writers.dup inheritables = [:inheritable_cattr_readers, :inheritable_cattr_writers] (readers + writers + inheritables).uniq.each do |attr| var = "@#{attr}" old_value = self.module_eval(var) new_value = (old_value.dup rescue old_value) klass.module_eval("#{var} = new_value") end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
radiant-0.5.0 | lib/inheritable_class_attributes.rb |
radiant-0.5.1 | lib/inheritable_class_attributes.rb |
radiant-0.5.2 | lib/inheritable_class_attributes.rb |