Module: ALib::ModuleExtensions

Included in:
StandardExtensions
Defined in:
lib/alib.rb,
lib/alib-0.3.1.rb

Overview

on-demand extensions to standard classes - (incomplete now)

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.append_features(c) ⇒ Object



3851
3852
3853
3854
3855
# File 'lib/alib.rb', line 3851

def self.append_features c
#--{{{
  Module.extend self 
#--}}}  
end

Instance Method Details

#attributes(*names) ⇒ Object Also known as: attribute



3826
3827
3828
3829
3830
# File 'lib/alib.rb', line 3826

def attributes(*names)
#--{{{
  reader_attributes(*names) + writer_attributes(*names)
#--}}}
end

#class_attributes(*names) ⇒ Object Also known as: class_attribute



3844
3845
3846
3847
3848
# File 'lib/alib.rb', line 3844

def class_attributes(*names)
#--{{{
  class << self; self; end.instance_eval{ attributes(*names) }
#--}}}
end

#class_reader_attributes(*names) ⇒ Object Also known as: class_reader_attribute



3832
3833
3834
3835
3836
# File 'lib/alib.rb', line 3832

def class_reader_attributes(*names)
#--{{{
  class << self; self; end.instance_eval{ reader_attributes(*names) }
#--}}}
end

#class_writer_attributes(*names) ⇒ Object Also known as: class_writer_attribute



3838
3839
3840
3841
3842
# File 'lib/alib.rb', line 3838

def class_writer_attributes(*names)
#--{{{
  class << self; self; end.instance_eval{ writer_attributes(*names) }
#--}}}
end

#reader_attributes(*names) ⇒ Object Also known as: reader_attribute

–{{{



3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
# File 'lib/alib.rb', line 3737

def reader_attributes(*names)
#--{{{
  @reader_attributes ||= []
  unless names.empty?
    names.flatten.each do |name|
      @reader_attributes << "#{ name }"
      getter = "#{ name }"
      unless instance_methods.include? getter
        code = <<-code
          def #{ name }(*a)
            unless a.empty?
              self.#{ name }= a.shift 
            else
              @#{ name }
            end
          end
        code
        module_eval code
      end

      setter = "#{ name }="
      unless instance_methods.include? setter
        code = <<-code
          def #{ name }= value
            @#{ name } = value
          end
          private '#{ name }='.intern
        code
        module_eval code
      end

      query = "#{ name }?"
      unless instance_methods.include? query
        code = <<-code
          alias #{ name }? #{ name }
        code
        module_eval code
      end
    end
  end
  @reader_attributes
#--}}}
end

#writer_attributes(*names) ⇒ Object Also known as: writer_attribute



3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
# File 'lib/alib.rb', line 3781

def writer_attributes(*names)
#--{{{
  @writer_attributes ||= []
  unless names.empty?
    names.flatten.each do |name|
      @writer_attributes << "#{ name }="
      getter = "#{ name }"
      unless instance_methods.include? getter
        code = <<-code
          def #{ name }(*a)
            unless a.empty?
              self.#{ name }= a.shift 
            else
              @#{ name }
            end
          end
          private '#{ name }'.intern
        code
        module_eval code
      end

      setter = "#{ name }="
      unless instance_methods.include? setter
        code = <<-code
          def #{ name }= value
            @#{ name } = value
          end
        code
        module_eval code
      end

      query = "#{ name }?"
      unless instance_methods.include? query
        code = <<-code
          alias #{ name }? #{ name }
          private '#{ name }?'.intern
        code
        module_eval code
      end
    end
  end
  @writer_attributes
#--}}}
end