hash_to_csv 0.0.1 → 0.1.0
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.
- data/lib/hash_to_csv.rb +5 -2
- data/lib/hash_to_csv/hash_to_csv.rb +13 -10
- metadata +16 -5
data/lib/hash_to_csv.rb
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
require 'hash_flattener'
|
|
1
2
|
require_relative 'hash_to_csv/hash_to_csv'
|
|
2
3
|
|
|
3
4
|
module HashToCsv
|
|
4
5
|
|
|
5
|
-
def self.to_csv(
|
|
6
|
-
|
|
6
|
+
def self.to_csv(hashes, options={})
|
|
7
|
+
hash_flattener = HashFlattener::HashFlattener.new
|
|
8
|
+
hash_to_csv = HashToCsv.new hash_flattener
|
|
9
|
+
hash_to_csv.to_csv hashes, options
|
|
7
10
|
end
|
|
8
11
|
|
|
9
12
|
end
|
|
@@ -4,14 +4,16 @@ require 'hash_flattener'
|
|
|
4
4
|
module HashToCsv
|
|
5
5
|
class HashToCsv
|
|
6
6
|
|
|
7
|
-
def initialize(
|
|
8
|
-
@
|
|
9
|
-
@include = options[:include] || []
|
|
10
|
-
@exclude = options[:exclude] || []
|
|
11
|
-
@sort = options[:sort] || true
|
|
7
|
+
def initialize(hash_flattener)
|
|
8
|
+
@hash_flattener = hash_flattener
|
|
12
9
|
end
|
|
13
10
|
|
|
14
|
-
def to_csv
|
|
11
|
+
def to_csv(hashes, options={})
|
|
12
|
+
@hashes = [hashes].flatten.map { |h| @hash_flattener.flatten h }
|
|
13
|
+
@include = options[:include]
|
|
14
|
+
@exclude = options[:exclude]
|
|
15
|
+
@sort = options[:sort] == true
|
|
16
|
+
|
|
15
17
|
CSV.generate do |csv|
|
|
16
18
|
csv << column_names
|
|
17
19
|
rows.each { |row| csv << values_for_row(row) }
|
|
@@ -23,8 +25,8 @@ module HashToCsv
|
|
|
23
25
|
def column_names
|
|
24
26
|
return @column_names if @column_names
|
|
25
27
|
keys = all_keys
|
|
26
|
-
keys.select! { |key| @include.index { |pattern| column_matches_pattern? key, pattern } }
|
|
27
|
-
keys.reject! { |key| @exclude.index { |pattern| column_matches_pattern? key, pattern } }
|
|
28
|
+
keys.select! { |key| @include.index { |pattern| column_matches_pattern? key, pattern } } if @include
|
|
29
|
+
keys.reject! { |key| @exclude.index { |pattern| column_matches_pattern? key, pattern } } if @exclude
|
|
28
30
|
keys.sort! if @sort
|
|
29
31
|
@column_names = keys
|
|
30
32
|
end
|
|
@@ -34,16 +36,17 @@ module HashToCsv
|
|
|
34
36
|
end
|
|
35
37
|
|
|
36
38
|
def values_for_row(row)
|
|
37
|
-
|
|
39
|
+
column_names.map { |column_name| row[column_name] }
|
|
38
40
|
end
|
|
39
41
|
|
|
40
42
|
def all_keys
|
|
41
43
|
keys = Set.new
|
|
42
44
|
@hashes.each { |h| keys += h.keys }
|
|
45
|
+
keys.to_a
|
|
43
46
|
end
|
|
44
47
|
|
|
45
48
|
def column_matches_pattern?(column, pattern)
|
|
46
|
-
pattern.kind_of?(Regexp) ? column =~ pattern : column == pattern
|
|
49
|
+
pattern.kind_of?(Regexp) ? column =~ pattern : column == pattern.to_s
|
|
47
50
|
end
|
|
48
51
|
|
|
49
52
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hash_to_csv
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0
|
|
4
|
+
version: 0.1.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,19 +9,30 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2013-03-
|
|
12
|
+
date: 2013-03-18 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: hash_flattener
|
|
16
|
-
requirement: &
|
|
16
|
+
requirement: &70206923982300 !ruby/object:Gem::Requirement
|
|
17
17
|
none: false
|
|
18
18
|
requirements:
|
|
19
19
|
- - =
|
|
20
20
|
- !ruby/object:Gem::Version
|
|
21
|
-
version: 0.
|
|
21
|
+
version: 0.2.0
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
|
-
version_requirements: *
|
|
24
|
+
version_requirements: *70206923982300
|
|
25
|
+
- !ruby/object:Gem::Dependency
|
|
26
|
+
name: rspec
|
|
27
|
+
requirement: &70206923981500 !ruby/object:Gem::Requirement
|
|
28
|
+
none: false
|
|
29
|
+
requirements:
|
|
30
|
+
- - ! '>='
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :development
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: *70206923981500
|
|
25
36
|
description:
|
|
26
37
|
email: matthew-github@matthewriley.name
|
|
27
38
|
executables: []
|