smuggle 0.5.0 → 0.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 889fa2b22dfc67ab693e35df9ed5c6cbe59f24e5f4a0dc53f668852994dd64ce
4
- data.tar.gz: 70473995af55dd6dcf294e70223944ab2c547c102c955dfd36e61eca326293ab
3
+ metadata.gz: c0caa4c9198d42a722b2ea659965ed18e86c15c5f630f5c59634221d9bcd200d
4
+ data.tar.gz: 2c98900dd7b290b1fe1eb386959a4e4db2aea05d428b8fde374f5c28d550d5fa
5
5
  SHA512:
6
- metadata.gz: fcfb395b44dbb7fdbcaba150cd96bbbeda3dd6292404870c3a1b341f826ee1d2b3685781873df0a94d3688616df0199b275c5321aa3cd46b86223577ee2b04e4
7
- data.tar.gz: aa20b7a0657d6280760dc1b5af27daa3818d24d5fb81a3eee7bce6cf9cb10212798170cc2ef70146dd62be8e30ff4aa52218f9c5d0b07bd88ef12979662cdc4f
6
+ metadata.gz: 3ca2eb0538745ef5535396b1e6a7bf1cac459b9d93f51ef22453f72f3910ff9f8a83ffae778abe982b2b19580f1b73e8241b62a7043c0254ab806c14274ea717
7
+ data.tar.gz: f1ec0594eef97070175cc6302e650bc1a6efe729d6f43d93efa9ffbe220578d02461fb3c12f9efc8fe432b65095d98a4d92a1ab94c6e3f25e5c13b12b8691375
@@ -4,7 +4,9 @@ require "csv"
4
4
  require "smuggle/version"
5
5
  require "smuggle/errors"
6
6
  require "smuggle/exporter/base"
7
+ require "smuggle/exporter/resolver"
7
8
  require "smuggle/importer/base"
9
+ require "smuggle/importer/resolver"
8
10
  require "smuggle/services/export"
9
11
  require "smuggle/services/import"
10
12
  require "smuggle/engine" if defined?(Rails)
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Smuggle
4
+ module Exporter
5
+ class Resolver
6
+ def call(scope:)
7
+ Object.const_get("#{scope.name}Exporter")
8
+ rescue NameError
9
+ raise ExporterNotFound
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Smuggle
4
+ module Importer
5
+ class Resolver
6
+ def call(model:)
7
+ Object.const_get("#{model.name}Importer")
8
+ rescue NameError
9
+ raise ImporterNotFound
10
+ end
11
+ end
12
+ end
13
+ end
@@ -3,36 +3,17 @@
3
3
  module Smuggle
4
4
  module Services
5
5
  class Export
6
- class << self
7
- def call(scope:, **options)
8
- new(scope, options).send(:call)
9
- end
10
- end
11
-
12
- private
13
-
14
- attr_reader :scope
15
-
16
- def initialize(scope, options = {})
17
- @exporter = options[:exporter]
18
- @scope = scope
19
- end
20
-
21
- def call
22
- generate_csv
6
+ def self.call(**args)
7
+ new.call(args)
23
8
  end
24
9
 
25
- def resolve
26
- Object.const_get("#{scope.name}Exporter")
27
- rescue NameError
28
- raise ExporterNotFound
10
+ def initialize(resolver: Smuggle::Exporter::Resolver.new)
11
+ @resolver = resolver
29
12
  end
30
13
 
31
- def exporter
32
- @exporter || resolve
33
- end
14
+ def call(scope:, **options)
15
+ exporter = options.fetch(:exporter) { @resolver.call(scope: scope) }
34
16
 
35
- def generate_csv
36
17
  CSV.generate do |csv|
37
18
  csv << exporter.header
38
19
 
@@ -3,37 +3,17 @@
3
3
  module Smuggle
4
4
  module Services
5
5
  class Import
6
- class << self
7
- def call(model:, filepath:, **options)
8
- new(model, filepath, options).send(:call)
9
- end
10
- end
11
-
12
- private
13
-
14
- attr_reader :model, :filepath
15
-
16
- def initialize(model, filepath, options = {})
17
- @filepath = filepath
18
- @importer = options[:importer]
19
- @model = model
20
- end
21
-
22
- def call
23
- import_from_csv
6
+ def self.call(**args)
7
+ new.call(args)
24
8
  end
25
9
 
26
- def resolve
27
- Object.const_get("#{model.name}Importer")
28
- rescue NameError
29
- raise ImporterNotFound
10
+ def initialize(resolver: Smuggle::Importer::Resolver.new)
11
+ @resolver = resolver
30
12
  end
31
13
 
32
- def importer
33
- @importer || resolve
34
- end
14
+ def call(model:, filepath:, **options)
15
+ importer = options.fetch(:importer) { @resolver.call(model: model) }
35
16
 
36
- def import_from_csv
37
17
  CSV.read(filepath, headers: true, **importer.csv_converters).map do |row|
38
18
  importer.new(row, model).persist
39
19
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Smuggle
4
- VERSION = "0.5.0"
4
+ VERSION = "0.6.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smuggle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pablo Crivella
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-04-24 00:00:00.000000000 Z
12
+ date: 2019-07-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -113,16 +113,22 @@ dependencies:
113
113
  name: rubocop
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
- - - "~>"
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0.49'
119
+ - - "<"
117
120
  - !ruby/object:Gem::Version
118
- version: '0.6'
121
+ version: '1'
119
122
  type: :development
120
123
  prerelease: false
121
124
  version_requirements: !ruby/object:Gem::Requirement
122
125
  requirements:
123
- - - "~>"
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: '0.49'
129
+ - - "<"
124
130
  - !ruby/object:Gem::Version
125
- version: '0.6'
131
+ version: '1'
126
132
  - !ruby/object:Gem::Dependency
127
133
  name: rubocop-performance
128
134
  requirement: !ruby/object:Gem::Requirement
@@ -191,7 +197,9 @@ files:
191
197
  - lib/smuggle/engine.rb
192
198
  - lib/smuggle/errors.rb
193
199
  - lib/smuggle/exporter/base.rb
200
+ - lib/smuggle/exporter/resolver.rb
194
201
  - lib/smuggle/importer/base.rb
202
+ - lib/smuggle/importer/resolver.rb
195
203
  - lib/smuggle/services/export.rb
196
204
  - lib/smuggle/services/import.rb
197
205
  - lib/smuggle/version.rb
@@ -217,7 +225,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
217
225
  - !ruby/object:Gem::Version
218
226
  version: '0'
219
227
  requirements: []
220
- rubygems_version: 3.0.3
228
+ rubygems_version: 3.0.4
221
229
  signing_key:
222
230
  specification_version: 4
223
231
  summary: It exports and imports all kinds of stuff from and to CSV