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.
- checksums.yaml +4 -4
- data/lib/keen-csv.rb +37 -23
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5cd940708c2ed932bd5f6adcea517643c32cea97
|
4
|
+
data.tar.gz: ae0092aadee0d1121ab59e504ad24f3958d30dc8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 918c2e00ce3d672459fb96edf8271125e4fce7b4b22c12d0add1afdfa9efa2cacbbcbc07b5037400b68502112049916c3325b591e927dd4d94bda5fc3f258bab
|
7
|
+
data.tar.gz: c33f2cedc4c535f88bd23b0db82ba56c164cadad62cb558453f2dc44fac3071eda7e0216138fe05e1bb663c35a1ac428eb308fc6729dca6ee0065d1c8194fdf0
|
data/lib/keen-csv.rb
CHANGED
@@ -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
|
-
|
126
|
+
handleValue = lambda do |value, newPrefix|
|
125
127
|
if value.is_a?(Hash) || value.is_a?(Array)
|
126
128
|
# recurse!
|
127
|
-
flatten(value, flattened,
|
129
|
+
flatten(value, flattened, newPrefix + @options[:nestedDelimiter])
|
128
130
|
else
|
129
|
-
flattened[
|
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
|