csv2hash 0.6.2 → 0.6.3

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.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -5
  3. data/.yardoc/checksums +25 -0
  4. data/.yardoc/object_types +0 -0
  5. data/.yardoc/objects/root.dat +0 -0
  6. data/.yardoc/proxy_types +0 -0
  7. data/CHANGELOG.md +8 -0
  8. data/Gemfile +6 -0
  9. data/Gemfile.lock +15 -1
  10. data/README.md +32 -4
  11. data/UPGRADE.md +2 -0
  12. data/bin/generate_doc +3 -0
  13. data/config/example.csv +10 -0
  14. data/config/rules.yml +7 -0
  15. data/doc/Cell.html +282 -0
  16. data/doc/Csv2hash/Adapter/Abstract.html +215 -0
  17. data/doc/Csv2hash/Adapter/Base/UnsupportedAdapter.html +123 -0
  18. data/doc/Csv2hash/Adapter/Base.html +201 -0
  19. data/doc/Csv2hash/Adapter/CsvAdapter.html +348 -0
  20. data/doc/Csv2hash/Adapter/MemoryAdapter.html +348 -0
  21. data/doc/Csv2hash/Adapter.html +117 -0
  22. data/doc/Csv2hash/DataWrapper.html +500 -0
  23. data/doc/Csv2hash/Definition.html +1008 -0
  24. data/doc/Csv2hash/Discover.html +192 -0
  25. data/doc/Csv2hash/Expectation.html +202 -0
  26. data/doc/Csv2hash/ExtraValidator.html +207 -0
  27. data/doc/Csv2hash/Main.html +1298 -0
  28. data/doc/Csv2hash/Notifier.html +189 -0
  29. data/doc/Csv2hash/Parser/Collection.html +283 -0
  30. data/doc/Csv2hash/Parser/Mapping.html +266 -0
  31. data/doc/Csv2hash/Parser.html +121 -0
  32. data/doc/Csv2hash/StructureValidator/Deprecation.html +215 -0
  33. data/doc/Csv2hash/StructureValidator/MaxColumns.html +327 -0
  34. data/doc/Csv2hash/StructureValidator/MinColumns.html +327 -0
  35. data/doc/Csv2hash/StructureValidator/ValidationError.html +123 -0
  36. data/doc/Csv2hash/StructureValidator/Validator.html +184 -0
  37. data/doc/Csv2hash/StructureValidator.html +311 -0
  38. data/doc/Csv2hash/Validator/Collection.html +217 -0
  39. data/doc/Csv2hash/Validator/Mapping.html +200 -0
  40. data/doc/Csv2hash/Validator.html +295 -0
  41. data/doc/Csv2hash.html +131 -0
  42. data/doc/CsvArray.html +200 -0
  43. data/doc/Registry.html +312 -0
  44. data/doc/_index.html +391 -0
  45. data/doc/class_list.html +54 -0
  46. data/doc/css/common.css +1 -0
  47. data/doc/css/full_list.css +57 -0
  48. data/doc/css/style.css +339 -0
  49. data/doc/file.README.html +499 -0
  50. data/doc/file_list.html +56 -0
  51. data/doc/frames.html +26 -0
  52. data/doc/index.html +499 -0
  53. data/doc/js/app.js +219 -0
  54. data/doc/js/full_list.js +178 -0
  55. data/doc/js/jquery.js +4 -0
  56. data/doc/method_list.html +473 -0
  57. data/doc/top-level-namespace.html +114 -0
  58. data/lib/csv2hash/definition.rb +3 -3
  59. data/lib/csv2hash/version.rb +1 -1
  60. data/lib/csv2hash/yaml_loader.rb +33 -0
  61. data/lib/csv2hash.rb +28 -8
  62. data/spec/csv2hash/yaml_loader_spec.rb +20 -0
  63. data/spec/csv2hash_spec.rb +13 -10
  64. metadata +56 -1
data/lib/csv2hash.rb CHANGED
@@ -16,6 +16,7 @@ require_relative 'csv2hash/data_wrapper'
16
16
  require_relative 'csv2hash/notifier'
17
17
  require_relative 'csv2hash/extra_validator'
18
18
  require_relative 'csv2hash/adapters/base'
19
+ require_relative 'csv2hash/yaml_loader'
19
20
 
20
21
  require 'active_support/core_ext/array/extract_options'
21
22
 
@@ -36,11 +37,11 @@ module Csv2hash
36
37
  end
37
38
 
38
39
  def [] definition_name
39
- @@registry[definition_name]
40
+ @@registry[definition_name.to_sym]
40
41
  end
41
42
 
42
43
  def []= definition_name, role
43
- @@registry[definition_name] = role
44
+ @@registry[definition_name.to_sym] = role
44
45
  end
45
46
  end
46
47
 
@@ -48,11 +49,13 @@ module Csv2hash
48
49
 
49
50
  attr_accessor :definition, :file_path_or_data, :data, :notifier, :break_on_failure, :errors, :options
50
51
 
51
- def initialize definition, file_path_or_data, *args
52
- self.options = args.extract_options!
53
- self.definition, self.file_path_or_data = definition, file_path_or_data
54
- self.break_on_failure, self.errors = false, []
55
- self.notifier = Notifier.new
52
+ def initialize definition_file_or_symbol, file_path_or_data, *args
53
+ self.options = args.extract_options!
54
+ self.definition = load_definition(definition_file_or_symbol)
55
+ self.file_path_or_data = file_path_or_data
56
+ self.break_on_failure = false
57
+ self.errors = []
58
+ self.notifier = Notifier.new
56
59
 
57
60
  dynamic_lib_loading 'Parser'
58
61
  dynamic_lib_loading 'Validator'
@@ -112,7 +115,7 @@ module Csv2hash
112
115
 
113
116
  def data_source
114
117
  @data_source ||= begin
115
- adapter_name = self.file_path_or_data.is_a?(String) ? :csv : :memory
118
+ adapter_name = self.file_path_or_data.respond_to?(:to_path) ? :csv : :memory
116
119
  adapter = Adapter::Base.create(adapter_name, self.file_path_or_data)
117
120
  adapter.source
118
121
  end
@@ -129,5 +132,22 @@ module Csv2hash
129
132
  self.extend Module.module_eval("Csv2hash::#{type}::Collection")
130
133
  end
131
134
  end
135
+
136
+ def load_definition definition_file_or_symbol
137
+ case definition_file_or_symbol
138
+ when String
139
+ config_file = definition_file_or_symbol
140
+ config_file = Pathname(definition_file_or_symbol) unless config_file.respond_to?(:to_path)
141
+ loader = YamlLoader.new(config_file).tap &:load!
142
+ loader.definition
143
+ when Symbol
144
+ Main[definition_file_or_symbol]
145
+ when Definition
146
+ definition_file_or_symbol
147
+ else
148
+ raise 'unsupported definition'
149
+ end
150
+ end
151
+
132
152
  end
133
153
  end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ module Csv2hash
4
+ describe YamlLoader do
5
+ let(:config_file) { 'config/rules.yml' }
6
+
7
+ subject do
8
+ YamlLoader.new config_file
9
+ end
10
+
11
+ before do
12
+ subject.load!
13
+ end
14
+
15
+ specify do
16
+ expect(subject.definition.name).to eql('example')
17
+ end
18
+
19
+ end
20
+ end
@@ -1,17 +1,20 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Csv2hash do
4
- let(:definition) { double('definition', type: nil) }
5
- let(:data_source) { nil }
3
+ module Csv2hash
4
+ describe Main do
5
+ let(:config_file) { 'config/rules.yml' }
6
+ let(:loader) { YamlLoader.new(config_file).tap &:load! }
7
+ let(:data_source) { 'config/example.csv' }
6
8
 
7
- subject do
8
- Csv2hash::Main.new(definition, data_source, ignore_blank_line: false)
9
- end
9
+ subject do
10
+ Main.new(loader.definition, data_source, ignore_blank_line: false)
11
+ end
10
12
 
11
- context '...' do
12
- specify do
13
- expect(subject.options.fetch(:ignore_blank_line)).to eql(false)
13
+ context '...' do
14
+ specify do
15
+ expect(subject.options.fetch(:ignore_blank_line)).to eql(false)
16
+ end
14
17
  end
15
- end
16
18
 
19
+ end
17
20
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csv2hash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel AZEMAR
@@ -83,6 +83,7 @@ dependencies:
83
83
  description: DSL to map a CSV to a Ruby Hash
84
84
  email: joel.azemar@gmail.com
85
85
  executables:
86
+ - generate_doc
86
87
  - launch_irb
87
88
  - load_rvm
88
89
  extensions: []
@@ -92,6 +93,10 @@ files:
92
93
  - ".gitignore"
93
94
  - ".rspec"
94
95
  - ".travis.yml"
96
+ - ".yardoc/checksums"
97
+ - ".yardoc/object_types"
98
+ - ".yardoc/objects/root.dat"
99
+ - ".yardoc/proxy_types"
95
100
  - CHANGELOG.md
96
101
  - Gemfile
97
102
  - Gemfile.lock
@@ -99,10 +104,56 @@ files:
99
104
  - README.md
100
105
  - Rakefile
101
106
  - UPGRADE.md
107
+ - bin/generate_doc
102
108
  - bin/launch_irb
103
109
  - bin/load_rvm
110
+ - config/example.csv
111
+ - config/rules.yml
104
112
  - coverage/.resultset.json.lock
105
113
  - csv2hash.gemspec
114
+ - doc/Cell.html
115
+ - doc/Csv2hash.html
116
+ - doc/Csv2hash/Adapter.html
117
+ - doc/Csv2hash/Adapter/Abstract.html
118
+ - doc/Csv2hash/Adapter/Base.html
119
+ - doc/Csv2hash/Adapter/Base/UnsupportedAdapter.html
120
+ - doc/Csv2hash/Adapter/CsvAdapter.html
121
+ - doc/Csv2hash/Adapter/MemoryAdapter.html
122
+ - doc/Csv2hash/DataWrapper.html
123
+ - doc/Csv2hash/Definition.html
124
+ - doc/Csv2hash/Discover.html
125
+ - doc/Csv2hash/Expectation.html
126
+ - doc/Csv2hash/ExtraValidator.html
127
+ - doc/Csv2hash/Main.html
128
+ - doc/Csv2hash/Notifier.html
129
+ - doc/Csv2hash/Parser.html
130
+ - doc/Csv2hash/Parser/Collection.html
131
+ - doc/Csv2hash/Parser/Mapping.html
132
+ - doc/Csv2hash/StructureValidator.html
133
+ - doc/Csv2hash/StructureValidator/Deprecation.html
134
+ - doc/Csv2hash/StructureValidator/MaxColumns.html
135
+ - doc/Csv2hash/StructureValidator/MinColumns.html
136
+ - doc/Csv2hash/StructureValidator/ValidationError.html
137
+ - doc/Csv2hash/StructureValidator/Validator.html
138
+ - doc/Csv2hash/Validator.html
139
+ - doc/Csv2hash/Validator/Collection.html
140
+ - doc/Csv2hash/Validator/Mapping.html
141
+ - doc/CsvArray.html
142
+ - doc/Registry.html
143
+ - doc/_index.html
144
+ - doc/class_list.html
145
+ - doc/css/common.css
146
+ - doc/css/full_list.css
147
+ - doc/css/style.css
148
+ - doc/file.README.html
149
+ - doc/file_list.html
150
+ - doc/frames.html
151
+ - doc/index.html
152
+ - doc/js/app.js
153
+ - doc/js/full_list.js
154
+ - doc/js/jquery.js
155
+ - doc/method_list.html
156
+ - doc/top-level-namespace.html
106
157
  - lib/csv2hash.rb
107
158
  - lib/csv2hash/adapters/abstract.rb
108
159
  - lib/csv2hash/adapters/base.rb
@@ -128,6 +179,7 @@ files:
128
179
  - lib/csv2hash/validator/collection.rb
129
180
  - lib/csv2hash/validator/mapping.rb
130
181
  - lib/csv2hash/version.rb
182
+ - lib/csv2hash/yaml_loader.rb
131
183
  - spec/csv2hash/definition_spec.rb
132
184
  - spec/csv2hash/parser/collection_spec.rb
133
185
  - spec/csv2hash/parser/mapping_spec.rb
@@ -136,6 +188,7 @@ files:
136
188
  - spec/csv2hash/validator/collection_spec.rb
137
189
  - spec/csv2hash/validator/mapping_spec.rb
138
190
  - spec/csv2hash/validator_spec.rb
191
+ - spec/csv2hash/yaml_loader_spec.rb
139
192
  - spec/csv2hash_spec.rb
140
193
  - spec/spec_helper.rb
141
194
  homepage: https://github.com/joel/csv2hash
@@ -171,5 +224,7 @@ test_files:
171
224
  - spec/csv2hash/validator/collection_spec.rb
172
225
  - spec/csv2hash/validator/mapping_spec.rb
173
226
  - spec/csv2hash/validator_spec.rb
227
+ - spec/csv2hash/yaml_loader_spec.rb
174
228
  - spec/csv2hash_spec.rb
175
229
  - spec/spec_helper.rb
230
+ has_rdoc: