Class: Array

Inherits:
Object show all
Defined in:
lib/qbxml/support.rb,
lib/quickbooks/structure.rb,
lib/quickbooks/ruby_magic.rb

Direct Known Subclasses

OrderedArray

Instance Method Summary collapse

Instance Method Details

#camelize_values(specials = {}) ⇒ Object



51
52
53
# File 'lib/qbxml/support.rb', line 51

def camelize_values(specials={})
  self.dup.camelize_values!(specials)
end

#camelize_values!(specials = {}) ⇒ Object



54
55
56
57
58
59
# File 'lib/qbxml/support.rb', line 54

def camelize_values!(specials={})
  self.each_with_index do |v,i|
    self[i] = specials.has_key?(v) ? specials[v] : (v.is_a?(Symbol) ? v.to_s.camelize.to_sym : v.camelize)
  end
  self
end

#expand_slashes(seed = nil) ⇒ Object



133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/quickbooks/structure.rb', line 133

def expand_slashes(seed=nil)
  return self.dup if !slashed? && seed.nil?
  hsh = seed.nil? ? [] : (seed.is_a?(Array) ? seed : [seed])
  self.each do |e|
    if !e.is_a?(String)
      hsh << e
      next
    end
    # Find as far as possible in the already-created structure,
    # then create new structure by either adding to an existing hash value, array, or by calling string.expand_slashes
    e.expand_slashes(hsh)
  end
  hsh.length < 2 ? hsh[0] : hsh
end

#expand_slashes!(seed = nil) ⇒ Object



129
130
131
132
# File 'lib/quickbooks/structure.rb', line 129

def expand_slashes!(seed=nil)
  h = expand_slashes(seed)
  replace(h.is_a?(Array) ? h : [h])
end

#flatten_slashesObject



110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/quickbooks/structure.rb', line 110

def flatten_slashes
  ary = []
  self.each do |e|
    if e.is_a?(Hash)
      e.flatten_slashes.each do |k,v|
        if v.is_a?(Array)
          v.each do |i|
            ary << k.to_s+'/'+i.to_s
          end
        else
          ary << k.to_s+'/'+v.to_s
        end
      end
    else
      ary << e
    end
  end
  ary
end

#flatten_slashes!Object



107
108
109
# File 'lib/quickbooks/structure.rb', line 107

def flatten_slashes!
  replace(flatten_slashes)
end

#keep_unique!Object



151
152
153
154
155
# File 'lib/quickbooks/structure.rb', line 151

def keep_unique!
  uniq!
  UniqueArray.prepare_for_overwrites!(self) unless self.respond_to?(:push_without_unique)
  extend UniqueArray
end

#only(*values) ⇒ Object



69
70
71
# File 'lib/qbxml/support.rb', line 69

def only(*values)
  self.dup.only!(*values)
end

#only!(*values) ⇒ Object



72
73
74
75
76
77
78
79
# File 'lib/qbxml/support.rb', line 72

def only!(*values)
  values.flatten!
  i = 0
  while i <= length-1 do
    self[i].is_one_of?(values) ? i += 1 : self.slice!(i)
  end
  self
end

#order(*ordered) ⇒ Object



81
82
83
# File 'lib/qbxml/support.rb', line 81

def order(*ordered)
  self.dup.order!(*ordered)
end

#order!(*ordered) ⇒ Object



84
85
86
# File 'lib/qbxml/support.rb', line 84

def order!(*ordered)
  self.replace(ordered.flatten!.only!(self))
end

#ordered!(*keys_in_order) ⇒ Object



156
157
158
# File 'lib/quickbooks/structure.rb', line 156

def ordered!(*keys_in_order)
  OrderedArray.new(*keys_in_order).replace(self)
end

#ordered?Boolean

Returns:

  • (Boolean)


159
160
161
# File 'lib/quickbooks/structure.rb', line 159

def ordered?
  false
end

#ordered_propogated!Object



162
163
164
165
# File 'lib/quickbooks/structure.rb', line 162

def ordered_propogated!
  OrderedHashPropogator.prepare_for_overwrites!(self) unless self.respond_to?(:push_without_unique)
  extend OrderedHashPropogator
end

#slashed!Object



102
103
104
105
106
# File 'lib/quickbooks/structure.rb', line 102

def slashed!
  expand_slashes!
  SlashedArray.prepare_for_overwrites!(self) unless self.respond_to?(:append_unslashed)
  extend SlashedArray
end

#slashed?Boolean

Returns:

  • (Boolean)


99
100
101
# File 'lib/quickbooks/structure.rb', line 99

def slashed?
  any? {|e| e.to_s =~ /\//}
end

#step_into_slash(key) ⇒ Object



147
148
149
# File 'lib/quickbooks/structure.rb', line 147

def step_into_slash(key)
  reject {|e| e !~ Regexp.new("^#{key}")}.collect {|e| e.split('/',2)[1]}
end

#stringify_valuesObject



61
62
63
# File 'lib/qbxml/support.rb', line 61

def stringify_values
  self.dup.stringify_values!
end

#stringify_values!Object



64
65
66
67
# File 'lib/qbxml/support.rb', line 64

def stringify_values!
  self.each_with_index { |v,i| self[i] = v.to_s }
  self
end