djc 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/djc.rb +23 -8
  2. metadata +1 -1
data/lib/djc.rb CHANGED
@@ -11,12 +11,27 @@ module DJC
11
11
  end
12
12
 
13
13
  class ::Array
14
+
15
+ def valfor(obj)
16
+
17
+ end
18
+
14
19
  def walk(obj)
15
20
  path = self.dup
16
21
  key = path.shift.to_s
22
+
17
23
  val = if obj.is_a? Array
18
- match = /^[\d,-]+$/.match(key)
19
- if match
24
+ if key == '*'
25
+ if path.empty?
26
+ obj
27
+ else
28
+ sub = obj.map do |inner|
29
+ path.dup.walk(inner)
30
+ end
31
+ path.clear
32
+ sub
33
+ end
34
+ elsif /^[\d,-]+$/.match(key)
20
35
  selected = key.split(',').map do |dex|
21
36
  range = /(\d+)(?:-|\.\.\.?)(\d+)/.match(dex)
22
37
  if range
@@ -42,6 +57,7 @@ module DJC
42
57
  elsif obj.respond_to? key
43
58
  obj.send(key)
44
59
  end
60
+
45
61
  path.empty? ? val : path.walk(val)
46
62
  end
47
63
 
@@ -86,17 +102,17 @@ module DJC
86
102
  end
87
103
 
88
104
  def sum
89
- @type, @block = 'sum', proc { |array| array.map(&:to_i).inject(0, :+) }
105
+ @type, @block = 'sum', proc { |array| array.map(&:to_i).inject(0, :+) if array }
90
106
  self
91
107
  end
92
108
 
93
109
  def avg
94
- @type, @block = 'avg', proc { |array| array.map(&:to_i).inject(0.0, :+) / array.size }
110
+ @type, @block = 'avg', proc { |array| ( array.map(&:to_i).inject(0.0, :+) / array.size) if array }
95
111
  self
96
112
  end
97
113
 
98
114
  def each(&each_block)
99
- @type, @block = 'each', proc { |array| array.map { |val| each_block.call(val) } }
115
+ @type, @block = 'each', proc { |array| array.map { |val| each_block.call(val) } if array }
100
116
  self
101
117
  end
102
118
 
@@ -202,13 +218,12 @@ module DJC
202
218
  rows = []
203
219
  if json.is_a? Array
204
220
  json.each do |row|
205
- #xxx ensmartern for arrayed vals, x-by-x
206
221
  rows << @columns.map do |column|
207
222
  column.rule.apply(row)
208
223
  end
209
224
  end
210
225
  else
211
- rows << @columns.map do |column|
226
+ rows = @columns.map do |column|
212
227
  column.rule.apply(json)
213
228
  end
214
229
  end
@@ -226,7 +241,7 @@ module DJC
226
241
 
227
242
  out = CSV.generate do |csv|
228
243
  csv << builder.header
229
- builder.build(json).each do |row|
244
+ builder.build(json).cross.each do |row|
230
245
  csv << row
231
246
  end
232
247
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: djc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: