csv_party 0.0.1.pre8 → 0.0.1.pre9

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/csv_party.rb +32 -12
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f4ebba54721bd80642ce2a0d3d07add5d4cdb348
4
- data.tar.gz: cd77e182c9026980d9df49ce32a58bf6789dd570
3
+ metadata.gz: b70149f2976c65072cd5ba2e20b1187f250ed7cf
4
+ data.tar.gz: 64c20377be56bc6b01249b092d01e41f8caf756e
5
5
  SHA512:
6
- metadata.gz: b2d9374b60ca71b54ff36f35751245580dfa2f8904fab72c8010162a34e254d12c8f7b146e0ca532c03a3ad963fd1d19c880fe3e92776260e4d07d064d532bbd
7
- data.tar.gz: cffc09a0eacaf8639cd5dede503f97e8dd0560e9866b39d37c51254d337ab1ebb89c882c184ff037500df6d5f537597670e0ce84eb6971b9defeebb1d6eddffd
6
+ metadata.gz: fa5d31d3102e420b6f5f4d63bea3b13c8a9752a77047d28e32804abdc3ba07e2e21a68e9cf5ec909dd474537345bd4785750cdfaf0fb7112138fbae9d5082ec8
7
+ data.tar.gz: fd46166bafee072f6308212cd5c3d028d560078e7800f61b003d7c0a050afc6919ce14cf680465e4beb70860baa3630c44377c283e723c5440033fc1e8e28f48
data/lib/csv_party.rb CHANGED
@@ -3,7 +3,8 @@ require 'bigdecimal'
3
3
  require 'ostruct'
4
4
 
5
5
  class CSVParty
6
- attr_accessor :columns, :row_importer, :importer, :error_processor
6
+ attr_accessor :columns, :row_importer, :importer, :error_processor,
7
+ :dependencies
7
8
 
8
9
  attr_reader :imported_rows, :skipped_rows, :aborted_rows,
9
10
  :abort_message
@@ -11,13 +12,12 @@ class CSVParty
11
12
  def initialize(csv_path, options = {})
12
13
  initialize_import_settings
13
14
  initialize_counters_and_statuses
15
+ initialize_dependencies(options)
14
16
 
15
- dependencies = options.delete(:dependencies)
16
17
  @headers = CSV.new(File.open(csv_path), options).shift
17
18
  options[:headers] = true
18
19
  @csv = CSV.new(File.open(csv_path), options)
19
20
 
20
- setup_dependencies(dependencies)
21
21
  raise_unless_named_parsers_are_valid
22
22
  raise_unless_csv_has_all_headers
23
23
  end
@@ -87,6 +87,17 @@ class CSVParty
87
87
  @error_processor = block
88
88
  end
89
89
 
90
+ def self.depends_on(*args)
91
+ args.each do |arg|
92
+ dependencies << arg
93
+ attr_accessor arg
94
+ end
95
+ end
96
+
97
+ def self.dependencies
98
+ @dependencies ||= []
99
+ end
100
+
90
101
  def self.columns
91
102
  @columns ||= {}
92
103
  end
@@ -243,20 +254,12 @@ class CSVParty
243
254
  File has these headers: #{@headers.join(', ')}."
244
255
  end
245
256
 
246
- def setup_dependencies(dependencies)
247
- return unless dependencies
248
-
249
- dependencies.each do |dependency, value|
250
- self.class.class_eval { attr_accessor dependency }
251
- send("#{dependency}=", value)
252
- end
253
- end
254
-
255
257
  def initialize_import_settings
256
258
  @columns = self.class.columns
257
259
  @row_importer = self.class.row_importer
258
260
  @importer = self.class.importer
259
261
  @error_processor = self.class.error_processor
262
+ @dependencies = self.class.dependencies
260
263
  end
261
264
 
262
265
  def initialize_counters_and_statuses
@@ -265,6 +268,20 @@ class CSVParty
265
268
  @aborted_rows = []
266
269
  @aborted = false
267
270
  end
271
+
272
+ def initialize_dependencies(options)
273
+ dependencies.each do |dependency|
274
+ if options.has_key? dependency
275
+ send("#{dependency}=", options.delete(dependency))
276
+ else
277
+ raise MissingDependencyError,
278
+ <<-MESSAGE
279
+ This importer depends on #{dependency}, but you didn't include it.
280
+ Here's how you do that: #{self.class.name}.new('path/to/csv', #{dependency}: #{dependency})
281
+ MESSAGE
282
+ end
283
+ end
284
+ end
268
285
  end
269
286
 
270
287
  class UnknownParserError < ArgumentError
@@ -279,6 +296,9 @@ end
279
296
  class MissingColumnError < ArgumentError
280
297
  end
281
298
 
299
+ class MissingDependencyError < ArgumentError
300
+ end
301
+
282
302
  class SkippedRowError < RuntimeError
283
303
  end
284
304
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csv_party
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.pre8
4
+ version: 0.0.1.pre9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rico Jones
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-02 00:00:00.000000000 Z
11
+ date: 2017-05-03 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A gem for making CSV imports a little more fun.
14
14
  email: rico@toasterlovin.com