csv_party 0.0.1.pre8 → 0.0.1.pre9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/csv_party.rb +32 -12
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b70149f2976c65072cd5ba2e20b1187f250ed7cf
|
4
|
+
data.tar.gz: 64c20377be56bc6b01249b092d01e41f8caf756e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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-
|
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
|