Class: Array

Inherits:
Object show all
Defined in:
lib/rfm/utilities/core_ext.rb

Direct Known Subclasses

Rfm::CompoundQuery, Rfm::Resultset

Instance Method Summary collapse

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 rfm_extract_options!
  last.is_a?(::Hash) ? pop : {}
end