Class: Module

Inherits:
Object show all
Defined in:
lib/glimr/util.rb

Instance Method Summary collapse

Instance Method Details

#attr_accessor_delegate(*method_names, &delegate) ⇒ Object



40
41
42
43
44
45
46
# File 'lib/glimr/util.rb', line 40

def attr_accessor_delegate(*method_names, &delegate)
  method_names.each{|mn|
    define_method(mn){|*args| instance_eval(&delegate).__send__(mn,*args) }
    setter = "#{mn}=".to_sym
    define_method(setter){|*args| instance_eval(&delegate).__send__(setter,*args) }
  }
end

#block_delegate(*method_names, &delegate) ⇒ Object



82
83
84
85
86
87
88
# File 'lib/glimr/util.rb', line 82

def block_delegate(*method_names, &delegate)
  method_names.each{|mn|
    define_method(mn){|*args|
      instance_eval(&delegate).__send__(mn,*args)
    }
  }
end

#delegate(target, *mnames) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
# File 'lib/glimr/util.rb', line 66

def delegate(target, *mnames)
  mnames.each{|mn|
    args = "*a, &b"
    args = "a" if mn.to_s[-1,1] == "="
    class_eval <<-EOF
      def #{mn}(#{args})
        #{target}.#{mn}(#{args})
      end
    EOF
  }
end

#delegate_accessor(target, *mnames) ⇒ Object



78
79
80
# File 'lib/glimr/util.rb', line 78

def delegate_accessor(target, *mnames)
  delegate(target, *mnames.map{|mn| [mn, "#{mn}="]  }.flatten)
end

#ivar_accessor_delegate(ivar_name, *method_names) ⇒ Object



56
57
58
59
60
61
62
63
64
# File 'lib/glimr/util.rb', line 56

def ivar_accessor_delegate(ivar_name, *method_names)
  method_names.each{|mn|
    define_method(mn){|*args| instance_variable_get(ivar_name).__send__(mn,*args) }
    setter = "#{mn}=".to_sym
    define_method(setter){|*args|
      instance_variable_get(ivar_name).__send__(setter,*args)
    }
  }
end

#ivar_delegate(ivar_name, *method_names) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/glimr/util.rb', line 48

def ivar_delegate(ivar_name, *method_names)
  method_names.each{|mn|
    define_method(mn){|*args|
      instance_variable_get(ivar_name).__send__(mn, *args)
    }
  }
end

#touching(touch_method_name, *mnames) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/glimr/util.rb', line 90

def touching(touch_method_name, *mnames)
  mnames.each{|mn|
    non_touching_mn = "__non_touching_#{mn}"
    alias_method non_touching_mn, mn
    private(non_touching_mn)
    define_method(mn){|*args|
      rv = __send__(non_touching_mn,*args)
      __send__(touch_method_name)
      rv
    }
  }
end

#touching_accessor(*names) ⇒ Object



103
104
105
106
# File 'lib/glimr/util.rb', line 103

def touching_accessor *names
  attr_accessor *names
  touching :touch!, *names.map{|n| n.to_s+"=" }
end