keen-csv 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/keen-csv.rb +37 -23
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b9fe8e0dce221ce5b5e2f0b915e85bd2e8084b36
4
- data.tar.gz: 1ab02862ac7b47d6fffb82c8b22633e09dc50fe5
3
+ metadata.gz: 5cd940708c2ed932bd5f6adcea517643c32cea97
4
+ data.tar.gz: ae0092aadee0d1121ab59e504ad24f3958d30dc8
5
5
  SHA512:
6
- metadata.gz: e2df446da5ab8e23eb305d2555487a37cd131dbef5650cff34d1ad1234fa91c501ef3505ea4502f220ca5ece89dde98ccdf561f925b21b9a55c7216bac441c45
7
- data.tar.gz: 9b009e1685d3d5f4c99daedef05991d406cbd1e32aaf4ad1c7cb8e22558bde26354c31a645481c6344b032aa963f07c53ca87f67bf944505bd5f4905759bd845
6
+ metadata.gz: 918c2e00ce3d672459fb96edf8271125e4fce7b4b22c12d0add1afdfa9efa2cacbbcbc07b5037400b68502112049916c3325b591e927dd4d94bda5fc3f258bab
7
+ data.tar.gz: c33f2cedc4c535f88bd23b0db82ba56c164cadad62cb558453f2dc44fac3071eda7e0216138fe05e1bb663c35a1ac428eb308fc6729dca6ee0065d1c8194fdf0
@@ -13,6 +13,28 @@ class Keen::CSV
13
13
  @options = options.is_a?(Hash) ? @@defaultOptions.merge(options) : @@defaultOptions
14
14
  end
15
15
 
16
+ # ---------------------------------------------------------------------------
17
+ # csvString
18
+ # Generates and returns a CSV for this Keen response
19
+ # ---------------------------------------------------------------------------
20
+ def csvString
21
+ resultColumns = self.generateResultColumns
22
+ headers = resultColumns[:columns].keys
23
+ # Start off instantiating the csv string with the header values
24
+ csvString = headers.map{|s| self.filterValue(s)}.join(@options[:delimiter])
25
+
26
+ # Now iterate over each row, sticking its value under each header
27
+ (0..resultColumns[:maxRowIndex]).each do |rowIndex|
28
+ csvString << "\r\n"
29
+ csvString << headers.map{ |header|
30
+ self.filterValue(resultColumns[:columns][header][rowIndex])
31
+ }.join(@options[:delimiter])
32
+ end
33
+ return csvString
34
+ end
35
+
36
+ protected
37
+
16
38
  # ---------------------------------------------------------------------------
17
39
  # generateResultColumns
18
40
  # Transforms the Keen result columnar Map, keyed by header
@@ -84,26 +106,6 @@ class Keen::CSV
84
106
  @options[:filteredColumns].include?(header)
85
107
  end
86
108
 
87
- # ---------------------------------------------------------------------------
88
- # csvString
89
- # Generates and returns a CSV for this Keen response
90
- # ---------------------------------------------------------------------------
91
- def csvString
92
- resultColumns = self.generateResultColumns
93
- headers = resultColumns[:columns].keys
94
- # Start off instantiating the csv string with the header values
95
- csvString = headers.map{|s| self.filterValue(s)}.join(@options[:delimiter])
96
-
97
- # Now iterate over each row, sticking its value under each header
98
- (0..resultColumns[:maxRowIndex]).each do |rowIndex|
99
- csvString << "\r\n"
100
- csvString << headers.map{ |header|
101
- self.filterValue(resultColumns[:columns][header][rowIndex])
102
- }.join(@options[:delimiter])
103
- end
104
- return csvString
105
- end
106
-
107
109
  # ---------------------------------------------------------------------------
108
110
  # filterValue
109
111
  # Takes a scalar value, and returns a CSV-compatible one
@@ -121,15 +123,27 @@ class Keen::CSV
121
123
  # Converts any nested dictionaries into a flattened/delimited one.
122
124
  # ---------------------------------------------------------------------------
123
125
  def flatten(object, flattened = {}, prefix = "")
124
- object.each do |key, value|
126
+ handleValue = lambda do |value, newPrefix|
125
127
  if value.is_a?(Hash) || value.is_a?(Array)
126
128
  # recurse!
127
- flatten(value, flattened, prefix + key + @options[:nestedDelimiter])
129
+ flatten(value, flattened, newPrefix + @options[:nestedDelimiter])
128
130
  else
129
- flattened[prefix + key] = value
131
+ flattened[newPrefix] = value
130
132
  end
131
133
  end
132
134
 
135
+ if object.is_a? Hash
136
+ object.each do |key, value|
137
+ handleValue.call(value, prefix + key)
138
+ end
139
+ elsif object.is_a? Array
140
+ object.each_with_index do |value, index|
141
+ handleValue.call(value, prefix + index.to_s)
142
+ end
143
+ else
144
+ return object
145
+ end
146
+
133
147
  return flattened
134
148
  end
135
149
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: keen-csv
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jevon Wild