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 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(hash, options={})
6
- HashToCsv.new(hash, options).to_csv
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(hashes, options={})
8
- @hashes = [hashes].flatten.map { |h| HashFlattener.flatten h }
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
- columns.map { |column| row[column] }
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.1
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-17 00:00:00.000000000 Z
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: &70290319751300 !ruby/object:Gem::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.1.0
21
+ version: 0.2.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70290319751300
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: []