smuggle 0.4.0 → 0.5.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 +4 -4
- data/README.md +23 -16
- data/lib/smuggle/importer/base.rb +7 -3
- data/lib/smuggle/services/export.rb +4 -1
- data/lib/smuggle/version.rb +1 -1
- metadata +25 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 889fa2b22dfc67ab693e35df9ed5c6cbe59f24e5f4a0dc53f668852994dd64ce
|
4
|
+
data.tar.gz: 70473995af55dd6dcf294e70223944ab2c547c102c955dfd36e61eca326293ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fcfb395b44dbb7fdbcaba150cd96bbbeda3dd6292404870c3a1b341f826ee1d2b3685781873df0a94d3688616df0199b275c5321aa3cd46b86223577ee2b04e4
|
7
|
+
data.tar.gz: aa20b7a0657d6280760dc1b5af27daa3818d24d5fb81a3eee7bce6cf9cb10212798170cc2ef70146dd62be8e30ff4aa52218f9c5d0b07bd88ef12979662cdc4f
|
data/README.md
CHANGED
@@ -51,7 +51,7 @@ class User
|
|
51
51
|
end
|
52
52
|
```
|
53
53
|
|
54
|
-
An exporter can be defined by inheriting from [Smuggle::Exporter::Base](lib/smuggle/exporter/base.rb) and
|
54
|
+
An exporter can be defined by inheriting from [Smuggle::Exporter::Base](lib/smuggle/exporter/base.rb) and defining the attributes to export:
|
55
55
|
|
56
56
|
```ruby
|
57
57
|
class UserExporter < Smuggle::Exporter::Base
|
@@ -104,31 +104,38 @@ Smuggle::Services::Export.call(scope: users, exporter: UserExporter)
|
|
104
104
|
|
105
105
|
### Importers
|
106
106
|
|
107
|
-
|
107
|
+
Given the following plain old ruby object:
|
108
108
|
|
109
109
|
```ruby
|
110
|
-
class User
|
111
|
-
|
110
|
+
class User
|
111
|
+
attr_accessor :name
|
112
|
+
|
113
|
+
def initialize(name)
|
114
|
+
@name = name
|
115
|
+
end
|
112
116
|
end
|
113
117
|
```
|
114
118
|
|
115
|
-
|
119
|
+
An importer can be defined by inheriting from [Smuggle::Importer::Base](lib/smuggle/importer/base.rb) and defining the attributes to export:
|
116
120
|
|
117
121
|
```ruby
|
118
122
|
class UserImporter < Smuggle::Importer::Base
|
119
|
-
#
|
120
|
-
attributes
|
123
|
+
# If no attributes are defined, the importer will infer them from the model's .attribute_names
|
124
|
+
# If any attributes are explicitly defined, all other entries in the CSV are ignored
|
125
|
+
attributes :name
|
121
126
|
|
122
127
|
# Computed attributes from the row data
|
123
|
-
def
|
128
|
+
def name
|
124
129
|
[row[:first_name], row[:last_name]].join(" ")
|
125
130
|
end
|
126
131
|
|
127
132
|
def persist
|
128
|
-
#
|
129
|
-
|
130
|
-
|
131
|
-
|
133
|
+
# Create your instance here
|
134
|
+
model.new(to_h)
|
135
|
+
# The result is collected by the Import service
|
136
|
+
|
137
|
+
# If you want to persist your data, you can do so here. This is an example using ActiveRecord
|
138
|
+
# model.create(to_h)
|
132
139
|
end
|
133
140
|
end
|
134
141
|
```
|
@@ -138,16 +145,16 @@ For example:
|
|
138
145
|
Given the following `users.csv` file:
|
139
146
|
|
140
147
|
```
|
141
|
-
"first_name","last_name"
|
142
|
-
"Rick","Sanchez"
|
143
|
-
"Morty","Smith"
|
144
|
-
"Jerry","Smith","jsmith"
|
148
|
+
"first_name","last_name"
|
149
|
+
"Rick","Sanchez"
|
150
|
+
"Morty","Smith"
|
145
151
|
```
|
146
152
|
|
147
153
|
Just run:
|
148
154
|
|
149
155
|
```ruby
|
150
156
|
Smuggle::Services::Import.call(model: User, filepath: "users.csv")
|
157
|
+
# => [#<User name: "Rick Sanchez">, #<User name: "Morty Smith">]
|
151
158
|
```
|
152
159
|
|
153
160
|
The importer class will be resolved from the model name, otherwise you could explicitely set the importer like this:
|
@@ -6,8 +6,8 @@ module Smuggle
|
|
6
6
|
class << self
|
7
7
|
attr_writer :attributes
|
8
8
|
|
9
|
-
def inherited(
|
10
|
-
|
9
|
+
def inherited(subclass)
|
10
|
+
subclass.attributes = []
|
11
11
|
end
|
12
12
|
|
13
13
|
def attributes(*names)
|
@@ -40,10 +40,14 @@ module Smuggle
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
private
|
44
|
+
|
43
45
|
def defined_attributes
|
44
46
|
return self.class.attributes if self.class.attributes?
|
45
47
|
|
46
|
-
model.attribute_names if model.respond_to?(:attribute_names)
|
48
|
+
return model.attribute_names if model.respond_to?(:attribute_names)
|
49
|
+
|
50
|
+
[]
|
47
51
|
end
|
48
52
|
end
|
49
53
|
end
|
@@ -36,7 +36,10 @@ module Smuggle
|
|
36
36
|
CSV.generate do |csv|
|
37
37
|
csv << exporter.header
|
38
38
|
|
39
|
-
|
39
|
+
method = :each
|
40
|
+
method = :find_each if scope.respond_to?(:find_each)
|
41
|
+
|
42
|
+
scope.public_send(method) do |record|
|
40
43
|
csv << exporter.new(record).to_csv
|
41
44
|
end
|
42
45
|
end
|
data/lib/smuggle/version.rb
CHANGED
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.
|
4
|
+
version: 0.5.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:
|
12
|
+
date: 2019-04-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -17,14 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
20
|
+
version: '2.0'
|
21
21
|
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
27
|
+
version: '2.0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: faker
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -115,42 +115,56 @@ dependencies:
|
|
115
115
|
requirements:
|
116
116
|
- - "~>"
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
version: '0.
|
118
|
+
version: '0.6'
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
123
|
- - "~>"
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version: '0.
|
125
|
+
version: '0.6'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: rubocop-performance
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '1.1'
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - "~>"
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '1.1'
|
126
140
|
- !ruby/object:Gem::Dependency
|
127
141
|
name: rubocop-rspec
|
128
142
|
requirement: !ruby/object:Gem::Requirement
|
129
143
|
requirements:
|
130
144
|
- - "~>"
|
131
145
|
- !ruby/object:Gem::Version
|
132
|
-
version: '1.
|
146
|
+
version: '1.3'
|
133
147
|
type: :development
|
134
148
|
prerelease: false
|
135
149
|
version_requirements: !ruby/object:Gem::Requirement
|
136
150
|
requirements:
|
137
151
|
- - "~>"
|
138
152
|
- !ruby/object:Gem::Version
|
139
|
-
version: '1.
|
153
|
+
version: '1.3'
|
140
154
|
- !ruby/object:Gem::Dependency
|
141
155
|
name: simplecov
|
142
156
|
requirement: !ruby/object:Gem::Requirement
|
143
157
|
requirements:
|
144
158
|
- - "~>"
|
145
159
|
- !ruby/object:Gem::Version
|
146
|
-
version: '0.
|
160
|
+
version: '0.1'
|
147
161
|
type: :development
|
148
162
|
prerelease: false
|
149
163
|
version_requirements: !ruby/object:Gem::Requirement
|
150
164
|
requirements:
|
151
165
|
- - "~>"
|
152
166
|
- !ruby/object:Gem::Version
|
153
|
-
version: '0.
|
167
|
+
version: '0.1'
|
154
168
|
description:
|
155
169
|
email:
|
156
170
|
- pablocrivella@gmail.com
|
@@ -203,8 +217,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
203
217
|
- !ruby/object:Gem::Version
|
204
218
|
version: '0'
|
205
219
|
requirements: []
|
206
|
-
|
207
|
-
rubygems_version: 2.7.7
|
220
|
+
rubygems_version: 3.0.3
|
208
221
|
signing_key:
|
209
222
|
specification_version: 4
|
210
223
|
summary: It exports and imports all kinds of stuff from and to CSV
|