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 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: []