hash_to_csv 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|