keen-csv 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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