Module | ArrayFields |
In: |
lib/arrayfields.rb
|
The ArrayFields module implements methods which allow an Array to be indexed by String or Symbol. It is not required to manually use this module to extend Array’s - they are auto-extended when Array#fields= is called
VERSION | = | '3.4.0' | {{{ |
methods redefined to work with fields as well as numeric indexes
# File lib/arrayfields.rb, line 58 def [](idx, *args) #{{{ if @fieldset and (String === idx or Symbol === idx) pos = @fieldset.pos idx return nil unless pos super(pos, *args) else super end #}}} end
# File lib/arrayfields.rb, line 70 def []=(idx, *args) #{{{ if @fieldset and (String === idx or Symbol === idx) pos = @fieldset.pos idx unless pos @fieldset.fields << idx @fieldset.fieldpos[idx] = pos = size end super(pos, *args) else super end #}}} end
# File lib/arrayfields.rb, line 84 def at idx #{{{ if @fieldset and (String === idx or Symbol === idx) pos = @fieldset.pos idx return nil unless pos super pos else super end #}}} end
# File lib/arrayfields.rb, line 95 def delete_at idx #{{{ if @fieldset and (String === idx or Symbol === idx) pos = @fieldset.pos idx return nil unless pos super pos else super end #}}} end
methods which give a hash-like interface
# File lib/arrayfields.rb, line 146 def each_pair #{{{ each_with_index do |elem, i| yield @fieldset.fields[i], elem end #}}} end
# File lib/arrayfields.rb, line 136 def each_with_field #{{{ each_with_index do |elem, i| yield elem, @fieldset.fields[i] end #}}} end
# File lib/arrayfields.rb, line 163 def fetch key #{{{ self[key] or raise IndexError, 'key not found' #}}} end
# File lib/arrayfields.rb, line 106 def fill(obj, *args) #{{{ idx = args.first if idx and @fieldset and (String === idx or Symbol === idx) idx = args.shift pos = @fieldset.pos idx super(obj, pos, *args) else super end #}}} end
# File lib/arrayfields.rb, line 175 def has_value? value #{{{ if respond_to? 'include?' self.include? value else a = [] each{|val| a << val} a.include? value end #}}} end
# File lib/arrayfields.rb, line 129 def slice!(*args) #{{{ ret = self[*args] self[*args] = nil ret #}}} end
# File lib/arrayfields.rb, line 208 def to_hash #{{{ if respond_to? 'to_ary' h = {} @fieldset.fields.zip(to_ary){|f,e| h[f] = e} h else a = [] each{|val| a << val} h = {} @fieldset.fields.zip(a){|f,e| h[f] = e} h end #}}} end
# File lib/arrayfields.rb, line 197 def values #{{{ if respond_to? 'to_ary' self.to_ary else a = [] each{|val| a << val} a end #}}} end