dumped_railers 0.2.0 → 0.3.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/CHANGELOG.md +4 -0
- data/README.md +27 -0
- data/lib/dumped_railers.rb +7 -2
- data/lib/dumped_railers/import.rb +8 -3
- data/lib/dumped_railers/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fed65c606bfe60816965d6ded3909c05b3c70e1deaa177607a4ad34adf70b4aa
|
4
|
+
data.tar.gz: fab8b30addebfd9d26efefe35a922cac885797c5371ed1a7c4cfa5d573381b72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef030d65359058b04c74e91f6219bffede2dc2737ab1d3189ee6a1028a64f1f925c128df2e6d438742d9dca1277dace81082aec3d4763791c550d43467b1c50a
|
7
|
+
data.tar.gz: 4584cfc5ee262e40d1a6c432960b17b616c886f92fcdbd0c6a976e0e0379797e2b79d8fd8840f10c5d742661ced0dd13c373fe734bc1842b6e42a49721ba6a57
|
data/CHANGELOG.md
CHANGED
@@ -39,3 +39,7 @@
|
|
39
39
|
### Changed
|
40
40
|
- Accept both global configuration as well as runtime (one-off) settings for all the available options.
|
41
41
|
Now all the configured settings will be overridden at runtime when the settings are provided with arguments.
|
42
|
+
|
43
|
+
## [0.3.0]
|
44
|
+
### Added
|
45
|
+
- Support `before_save`/`after_save` callbacks with import! method. The callbacks are invoked just before (or after) each table's records are saved.
|
data/README.md
CHANGED
@@ -136,6 +136,33 @@ This would allow us to import fixtures for items and prices, but reject modifica
|
|
136
136
|
|
137
137
|
NOTE: Only DumpedRailers.import! is affected by this option. DumpedRailers.dump! can't be scoped (at least in the current version).
|
138
138
|
|
139
|
+
|
140
|
+
### Setting Callbacks
|
141
|
+
|
142
|
+
* DumpedRailers can accept a `before_save` / `after_save` callbacks with import! method.
|
143
|
+
The callback is invoked just before/after each table's records are saved.
|
144
|
+
|
145
|
+
```ruby
|
146
|
+
before_callback = -> (model, records) {
|
147
|
+
if model == User
|
148
|
+
# set random initial passwords before saving
|
149
|
+
records.each do |user|
|
150
|
+
user.password = user.password_confirmation = SecureRandom.hex(12)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
}
|
154
|
+
|
155
|
+
after_callback = -> (model, records) {
|
156
|
+
if model == User
|
157
|
+
records.each do |user|
|
158
|
+
user.confirm!
|
159
|
+
end
|
160
|
+
end
|
161
|
+
}
|
162
|
+
|
163
|
+
DumpedRailers.import!(fixture_path, before_save: before_callback, after_save: after_callback)
|
164
|
+
```
|
165
|
+
|
139
166
|
### Configuration
|
140
167
|
|
141
168
|
* All the settings can be configured by either configuration (global) or arguments (at runtime).
|
data/lib/dumped_railers.rb
CHANGED
@@ -24,7 +24,7 @@ module DumpedRailers
|
|
24
24
|
fixtures
|
25
25
|
end
|
26
26
|
|
27
|
-
def import!(*paths, authorized_models: nil)
|
27
|
+
def import!(*paths, authorized_models: nil, before_save: nil, after_save: nil)
|
28
28
|
# make sure class-baseed caches starts with clean state
|
29
29
|
DumpedRailers::RecordBuilder::FixtureRow::RecordStore.clear!
|
30
30
|
DumpedRailers::RecordBuilder::DependencyTracker.clear!
|
@@ -32,7 +32,12 @@ module DumpedRailers
|
|
32
32
|
# override global config settings when options are specified
|
33
33
|
runtime_options = { authorized_models: authorized_models.presence }.compact.reverse_merge(import_options)
|
34
34
|
|
35
|
-
fixture_handler = Import.new(
|
35
|
+
fixture_handler = Import.new(
|
36
|
+
*paths,
|
37
|
+
authorized_models: runtime_options[:authorized_models],
|
38
|
+
before_save: before_save,
|
39
|
+
after_save: after_save,
|
40
|
+
)
|
36
41
|
fixture_handler.import_all!
|
37
42
|
end
|
38
43
|
|
@@ -6,7 +6,10 @@ module DumpedRailers
|
|
6
6
|
class Import
|
7
7
|
attr_reader :fixture_set
|
8
8
|
|
9
|
-
def initialize(*paths, authorized_models: [])
|
9
|
+
def initialize(*paths, authorized_models: [], before_save: nil, after_save: nil)
|
10
|
+
@before_save = before_save
|
11
|
+
@after_save = after_save
|
12
|
+
|
10
13
|
if (paths.first.is_a? Hash)
|
11
14
|
@raw_fixtures = paths.first.values
|
12
15
|
else
|
@@ -16,7 +19,7 @@ module DumpedRailers
|
|
16
19
|
@fixture_set = RecordBuilder::FixtureSet.new(@raw_fixtures, authorized_models: authorized_models)
|
17
20
|
end
|
18
21
|
|
19
|
-
def import_all!
|
22
|
+
def import_all!(&block)
|
20
23
|
fixture_set.authorize_models!
|
21
24
|
fixture_set.sort_by_table_dependencies!
|
22
25
|
@record_sets = fixture_set.build_record_sets!
|
@@ -24,10 +27,12 @@ module DumpedRailers
|
|
24
27
|
ActiveRecord::Base.transaction(joinable: false, requires_new: true) do
|
25
28
|
# models have to be persisted one-by-one so that dependent models are able to
|
26
29
|
# resolve "belongs_to" (parent) association
|
27
|
-
@record_sets.each do |
|
30
|
+
@record_sets.each do |model, records|
|
31
|
+
@before_save.call(model, records) if @before_save
|
28
32
|
# FIXME: faster implementation wanted, parhaps with activerocord-import
|
29
33
|
# (objects needs to be reloaded somehow when using buik insert)
|
30
34
|
records.each(&:save!)
|
35
|
+
@after_save.call(model, records) if @after_save
|
31
36
|
end
|
32
37
|
end
|
33
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dumped_railers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Koji Onishi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|