Class: Array
Direct Known Subclasses
Instance Method Summary collapse
- #rfm_extend_member(member, extension, i = nil) ⇒ Object
-
#rfm_extend_members(klass, caller = nil) ⇒ Object
These methods allow dynamic extension of array members with other modules.
-
#rfm_extract_options! ⇒ Object
Taken from ActiveSupport extract_options!.
Instance Method Details
#rfm_extend_member(member, extension, i = nil) ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/rfm/utilities/core_ext.rb', line 102 def rfm_extend_member(member, extension, i=nil) if member and extension unless member.instance_variable_get(:@root) member.instance_variable_set(:@root, @root) member.instance_variable_set(:@parent, self) member.instance_variable_set(:@index, i) member.instance_eval(){def root; @root; end} member.instance_eval(){def parent; @parent; end} member.instance_eval(){def get_index; @index; end} end member.extend(extension) end end |
#rfm_extend_members(klass, caller = nil) ⇒ Object
These methods allow dynamic extension of array members with other modules. These methods also carry the @root object for reference, when you don’t have the root object explicity referenced anywhere.
These methods might slow down array traversal, as they add interpreted code to methods that were otherwise pure C.
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/rfm/utilities/core_ext.rb', line 73 def rfm_extend_members(klass, caller=nil) @parent = caller @root = caller.instance_variable_get(:@root) @member_extension = klass self.instance_eval do class << self attr_accessor :parent alias_method 'old_reader', '[]' def [](*args) member = old_reader(*args) rfm_extend_member(member, @member_extension, args[0]) if args[0].is_a? Integer member end alias_method 'old_each', 'each' def each i = -1 old_each do |member| i = i + 1 rfm_extend_member(member, @member_extension, i) yield(member) end end end end unless defined? old_reader self end |
#rfm_extract_options! ⇒ Object
Taken from ActiveSupport extract_options!.
63 64 65 |
# File 'lib/rfm/utilities/core_ext.rb', line 63 def last.is_a?(::Hash) ? pop : {} end |