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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5faab9a280ca3d2e4e4379074ab56846ba2a1c1b65969a272efdf4fd344d8c20
4
- data.tar.gz: fa3a52e63c010d51f023fc2815d058dfb8e4b05652f6e6d57893784faa679c53
3
+ metadata.gz: fed65c606bfe60816965d6ded3909c05b3c70e1deaa177607a4ad34adf70b4aa
4
+ data.tar.gz: fab8b30addebfd9d26efefe35a922cac885797c5371ed1a7c4cfa5d573381b72
5
5
  SHA512:
6
- metadata.gz: c71bbd0aa57f772b63a423ce89249f83a97cb0094a9ee4f53fa1088e1ab0a0e87d617f28c574a48af9728d48d97e841d8fbd811a78d9501ed926b1ef59e28457
7
- data.tar.gz: 022e908a2869b8a01395adf9eba867bd6d3726a28dbfe885b5bd876bad05fda2c9c736c8d6180b685fafabdc075ff6ad2561f63b92a97e633f2c0e900de0f8c0
6
+ metadata.gz: ef030d65359058b04c74e91f6219bffede2dc2737ab1d3189ee6a1028a64f1f925c128df2e6d438742d9dca1277dace81082aec3d4763791c550d43467b1c50a
7
+ data.tar.gz: 4584cfc5ee262e40d1a6c432960b17b616c886f92fcdbd0c6a976e0e0379797e2b79d8fd8840f10c5d742661ced0dd13c373fe734bc1842b6e42a49721ba6a57
@@ -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).
@@ -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(*paths, authorized_models: runtime_options[:authorized_models])
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 |_model, records|
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
@@ -1,3 +1,3 @@
1
1
  module DumpedRailers
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  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.2.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: 2020-12-29 00:00:00.000000000 Z
11
+ date: 2021-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler