dumped_railers 0.1.5 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 80d7da9c36ba41d750a56d9ee58ed12bfadb816f0f4dde5e915590811344541d
4
- data.tar.gz: 28376d6a5b35a1e63be22573bb0180dc0d4d765c6064204b6eca49c70bac5748
3
+ metadata.gz: ad9f2b4ac74c2d926442a9292907bf0201cfe2dc01f48e6a1c115514360b730a
4
+ data.tar.gz: 515e61e954e02489ae21218f121e593389d1f1602ad5c532fcc53e02ae112237
5
5
  SHA512:
6
- metadata.gz: c26bb04f7cba72d1f397294133c4bd32ebad630fb62d37ee3649fee40341380040ba271ebdde8410ffd263175eed4e6432a623eb6840016fe7638c21825f1d58
7
- data.tar.gz: 933f85c32bd8390ff4d7f9827cc8d58742dc5c7ebf629b744fd35db010526ef2d389875c85170f8d939784a52a76d98579e8e8cd2721fa3b5a571c7910bbac8e
6
+ metadata.gz: 0fd8c272b5c0f630bc08ec446ada9d1bdb96eeeb353d3c1bd20df515e045a157508070eba600fbcf3e927c804a2fe4e1b18307210d19067f961eeeaa26729a83
7
+ data.tar.gz: adf932812767e149015efafc1007ba069f88001304601538046146137abe4ab9aa3c686948140e122713237221f68b73f085367a06b49bfcbd162585aa0d880f
data/.gitignore CHANGED
@@ -14,3 +14,5 @@ Gemfile.lock
14
14
 
15
15
  # rspec failure tracking
16
16
  .rspec_status
17
+
18
+ .ruby-version
@@ -1,12 +1,17 @@
1
1
  ---
2
2
  language: ruby
3
3
  cache: bundler
4
+ before_install: gem install bundler
4
5
  rvm:
6
+ - 3.0.0
5
7
  - 2.7.2
6
8
  - 2.6.6
7
9
  - 2.5.8
8
10
  gemfile:
9
- - gemfiles/Gemfile.rails_6.1.0
10
- - gemfiles/Gemfile.rails_6.0.3.4
11
- - gemfiles/Gemfile.rails_5.2.4
12
- before_install: gem install bundler -v 2.1.4
11
+ - gemfiles/Gemfile.rails_6.1
12
+ - gemfiles/Gemfile.rails_6.0
13
+ - gemfiles/Gemfile.rails_5.2
14
+ jobs:
15
+ exclude:
16
+ - rvm: 3.0.0
17
+ gemfile: gemfiles/Gemfile.rails_5.2
@@ -30,3 +30,27 @@
30
30
  ## [0.1.5]
31
31
  ### Added
32
32
  - Supported in-memopry fixtures. Now users can dump into and import from in-memory fixture object without saving files.
33
+
34
+ ## [0.2.0]
35
+ ### Added
36
+ - Provide options to limit models to import, so that users can prohibit modification to arbitrary models.
37
+ - Support for Ruby 3.0.0 (requires Rails >= 6.0)
38
+
39
+ ### Changed
40
+ - Accept both global configuration as well as runtime (one-off) settings for all the available options.
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.
46
+
47
+ ## [0.3.1]
48
+ ### Added
49
+ - Accept multiple (array) callbacks for `before_save` / `after_save` arguments with DumpedRailers.import!.
50
+
51
+ ## [0.4.0]
52
+ ### Changed
53
+ - **BREAKING** preprocessor interface has changed so as that its API have consistency with that of callbacks.
54
+ - Preprocessors now require arguments (`model`, `attributes`) in this order. Before version < 0.4, it was (`attributes`, `model`)
55
+ - Attributes needs to be updated destructively within preprocessors. Return values are no longer required reflect the changes.
56
+
data/README.md CHANGED
@@ -78,24 +78,24 @@ DumpedRailers.import!(fixtures)
78
78
 
79
79
  DumpedRailers does not save the fixtures when `base_dir` keyword argument is not specified.
80
80
 
81
- ### Ignored Columns
81
+ ### Ignoring Certain Columns
82
82
 
83
83
  * By default, DumpedRailers ignore three columns - `id`, `created_at`, `updated_at`. You can always update/change this settings as follows.
84
84
 
85
85
  ```ruby
86
86
  DumpedRailers.configure do |config|
87
- config.ignorable_columns += [:published_on] # published_on will be ignored on top of default settings.
87
+ config.ignorable_columns += [:published_on] # :published_on will be ignored *on top of* default settings.
88
88
  end
89
89
  ```
90
90
 
91
91
  * of course you can totally replace the settings with your own.
92
92
  ```ruby
93
93
  DumpedRailers.configure do |config|
94
- config.ignorable_columns = %i[uuid created_on updated_on] # uuid and created_on will be ignored instead of id, created_at, updated_at
94
+ config.ignorable_columns = %i[uuid created_on updated_on] # :uuid and :created_on will be ignored *instead of* :id, :created_at, :updated_at
95
95
  end
96
96
  ```
97
97
 
98
- ### Masking, filtering
98
+ ### Masking, Filtering
99
99
 
100
100
  * you can pass `preprocessors` to DumpedRailers before it starts dump. All the attributes are filtered through preprocessors in order of registration.
101
101
 
@@ -103,15 +103,15 @@ end
103
103
  DumpedRailers.dump!(User, Item, base_dir: 'tmp/', preprocessors: [MaskingPreprocessor.new])
104
104
  ```
105
105
 
106
- * "Preprocessors" can be lambda, or module, or any objects that can repond to #call(atrs, model).
106
+ * "Preprocessors" can be lambda, or module, or any objects that can repond to #call(model, attributes).
107
107
 
108
108
 
109
109
  ```ruby
110
110
  class MaskingPreprocessor
111
- def call(attrs, model)
112
- attrs.map { |col, value|
113
- col.match?(/password/) ? [col, '<MASKED>'] : [col, value]
114
- }.to_h
111
+ def call(model, attrs)
112
+ attrs.each { |col, _value|
113
+ attrs[col] = '<MASKED>' if col.match?(/password/)
114
+ }
115
115
  end
116
116
  end
117
117
  ```
@@ -119,12 +119,82 @@ end
119
119
  * a lambda object can be accepted as well
120
120
 
121
121
  ```ruby
122
- masking_preprocessor = -> (attrs, model) { attrs.transform_values(&:upcase) }
122
+ masking_preprocessor = -> (model, attrs) { attrs.transform_values!(&:upcase) }
123
123
  ```
124
124
 
125
- NOTE: The proprocessors must return attributes in the same format `{ attributes_name: value }` so that preprocessors and dump handlers can preprocessors in nested manner.
125
+ NOTE:
126
+ * In order to reflect changes to the output, **preprocessors must change the attributes destructively**.
127
+ * If you set multiple preprocessors, each preprocessor will be invoked sequentially from left to right, which means your second preprocessor receives attributes only after your first preprocessor update them.
126
128
 
127
- ### pseudo multi-tenancy (such as ActsAsTenant)
129
+ ### Limiting Import with Authorized Models Only
130
+
131
+ * In case you don't want to accept arbitrary fixtures to import, you can limit model access as follows:
132
+
133
+ ```ruby
134
+ DumpedRailers.import!(fixtures, authorized_models: [Item, Price])
135
+ ```
136
+
137
+ This would allow us to import fixtures for items and prices, but reject modification on User, Purchase, Admin data.
138
+
139
+ NOTE: Only DumpedRailers.import! is affected by this option. DumpedRailers.dump! can't be scoped (at least in the current version).
140
+
141
+
142
+ ### Setting Callbacks
143
+
144
+ * You can set `before_save` / `after_save` callbacks for import! method.
145
+ The callbacks are invoked just before/after each table's records are saved.
146
+
147
+ ```ruby
148
+ before_callback = -> (model, records) {
149
+ if model == User
150
+ # set random initial passwords before saving
151
+ records.each do |user|
152
+ user.password = user.password_confirmation = SecureRandom.hex(12)
153
+ end
154
+ end
155
+ }
156
+
157
+ after_callback1 = -> (model, records) {
158
+ if model == User
159
+ records.each do |user|
160
+ user.confirm!
161
+ end
162
+ end
163
+ }
164
+
165
+ after_callback2 = -> (model, records) {
166
+ if model == Admin
167
+ records.each |admin|
168
+ notify_to_slack(admin.email, admin.name)
169
+ end
170
+ end
171
+ }
172
+
173
+ DumpedRailers.import!(fixture_path, before_save: before_callback, after_save: [after_callback1, after_callback2])
174
+ ```
175
+
176
+ `before_save` / `after_save` can accept both single and multiple (array) arguments.
177
+
178
+ ### Configuration
179
+
180
+ * All the settings can be configured by either configuration (global) or arguments (at runtime).
181
+ * When you have duplicated setting, arguments are respected: you can always override configured settings by arguments.
182
+
183
+ ```ruby
184
+ DumpedRailers.configure do |config|
185
+ config.ignorable_columns = [:archived_at]
186
+ config.preprocessors = [FooPreprocessor, BarPreprocessor]
187
+ end
188
+
189
+ DumpedRailers.dump!(Item, ignorable_columns: [:id], preprocessors: [BazPreprocessor], base_dir: 'tmp/')
190
+ # this would ignore `id` column, and apply BazPreprocessor only
191
+
192
+ DumpedRailers.dump!(Price, base_dir: 'tmp/')
193
+ # this would ignore `archived_at`, applies FooPreprocessor and BazPreprocessor
194
+ # (settings provided with arguments are considered as one-off, and don't survive globally)
195
+ ```
196
+
197
+ ### Dump/Import under default_scope (e.g. ActsAsTenant)
128
198
 
129
199
  * Such library builds multi-tenancy environment on one single database, using default_scope to switch over database access rights between tenants. You can incorporate data from Tenant A to Tenant B as follows. let's say we use [ActsAsTenant](https://github.com/ErwinM/acts_as_tenant)
130
200
 
@@ -27,9 +27,9 @@ Gem::Specification.new do |spec|
27
27
 
28
28
  spec.add_development_dependency 'bundler', '~> 2.0'
29
29
  spec.add_development_dependency 'rake', '~> 12.3.3'
30
- spec.add_development_dependency 'rspec', '~> 3.0'
30
+ spec.add_development_dependency 'rspec', '~> 3.10'
31
31
  spec.add_development_dependency 'sqlite3'
32
- spec.add_development_dependency 'activerecord', '~> 5.2'
32
+ spec.add_development_dependency 'activerecord', '>= 5.2'
33
33
  spec.add_development_dependency 'database_cleaner-active_record', '~> 1.8'
34
34
  spec.add_development_dependency 'pry'
35
35
  spec.add_development_dependency 'pry-byebug'
@@ -1,6 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in dumped_railers.gemspec
4
- gem 'activerecord', '6.1.0'
4
+ gem 'activerecord', '5.2.4.4'
5
5
 
6
6
  gemspec path: '../'
@@ -1,6 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in dumped_railers.gemspec
4
- gem 'activerecord', '5.2.4'
4
+ gem 'activerecord', '6.1.1'
5
5
 
6
6
  gemspec path: '../'
@@ -4,45 +4,58 @@ require 'dumped_railers/version'
4
4
  require 'dumped_railers/file_helper.rb'
5
5
  require 'dumped_railers/dump'
6
6
  require 'dumped_railers/import'
7
+ require 'dumped_railers/configuration'
7
8
 
8
9
  module DumpedRailers
9
- class << self
10
-
11
- def dump!(*models, base_dir: nil, preprocessors: nil)
12
- preprocessors = [Preprocessor::StripIgnorables.new, *preprocessors].compact.uniq
10
+ extend Configuration
13
11
 
14
- fixture_handler = Dump.new(*models, preprocessors: preprocessors)
12
+ class << self
13
+ def dump!(*models, base_dir: nil, preprocessors: nil, ignorable_columns: nil)
14
+ # override global config settings when options are specified
15
+ runtime_options = { preprocessors: preprocessors.presence, ignorable_columns: ignorable_columns.presence }.compact.reverse_merge(dump_options.deep_dup)
16
+ runtime_options[:preprocessors].unshift(
17
+ default_preprocessor(runtime_options[:ignorable_columns])
18
+ )
19
+
20
+ fixture_handler = Dump.new(*models, preprocessors: runtime_options[:preprocessors])
15
21
  fixtures = fixture_handler.build_fixtures!
16
22
  fixture_handler.persist_all!(base_dir)
17
23
 
18
24
  fixtures
19
25
  end
20
26
 
21
- def import!(*paths)
27
+ def import!(*paths, authorized_models: nil, before_save: nil, after_save: nil)
22
28
  # make sure class-baseed caches starts with clean state
23
29
  DumpedRailers::RecordBuilder::FixtureRow::RecordStore.clear!
24
30
  DumpedRailers::RecordBuilder::DependencyTracker.clear!
25
31
 
26
- fixture_handler = Import.new(*paths)
32
+ # override global config settings when options are specified
33
+ runtime_options = { authorized_models: authorized_models.presence }.compact.reverse_merge(import_options)
34
+
35
+ before_save = Array(before_save).compact
36
+ after_save = Array(after_save).compact
37
+
38
+ fixture_handler = Import.new(
39
+ *paths,
40
+ authorized_models: runtime_options[:authorized_models],
41
+ before_save: before_save,
42
+ after_save: after_save,
43
+ )
27
44
  fixture_handler.import_all!
28
45
  end
29
46
 
30
- class Configuration < ::OpenStruct; end
47
+ private
31
48
 
32
- def config
33
- @_config ||= Configuration.new
49
+ def default_preprocessor(ignorable_columns)
50
+ Preprocessor::StripIgnorables.new(*ignorable_columns)
34
51
  end
35
52
 
36
- def configure
37
- yield config
53
+ def dump_options
54
+ options.slice(:ignorable_columns, :preprocessors)
38
55
  end
39
56
 
40
- # FIXME: make it minimum
41
- IGNORABLE_COLUMNS = %w[id created_at updated_at]
42
- def configure_defaults!
43
- configure do |config|
44
- config.ignorable_columns = IGNORABLE_COLUMNS
45
- end
57
+ def import_options
58
+ options.slice(:authorized_models)
46
59
  end
47
60
  end
48
61
 
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DumpedRailers
4
+ module Configuration
5
+ extend Forwardable
6
+ def_delegators :@_config, :preprocessors, :ignorable_columns, :authorized_models
7
+
8
+ def configure
9
+ yield config
10
+ end
11
+
12
+ def options
13
+ config.to_h
14
+ end
15
+
16
+ IGNORABLE_COLUMNS = %w[id created_at updated_at]
17
+ def configure_defaults!
18
+ clear_configuration!(
19
+ ignorable_columns: IGNORABLE_COLUMNS,
20
+ preprocessors: [],
21
+ authorized_models: :any,
22
+ )
23
+ end
24
+
25
+ def config
26
+ @_config ||= OpenStruct.new
27
+ end
28
+ private :config
29
+
30
+ def clear_configuration!(**attrs)
31
+ @_config = OpenStruct.new(attrs)
32
+ end
33
+ private :clear_configuration!
34
+ end
35
+ end
@@ -7,7 +7,7 @@ module DumpedRailers
7
7
  class Dump
8
8
  def initialize(*models, preprocessors: [])
9
9
  @fixture_tables = models.map { |model|
10
- FixtureBuilder::Model.new(model, preprocessors: preprocessors)
10
+ FixtureBuilder::Model.new(model, preprocessors: preprocessors)
11
11
  }
12
12
  end
13
13
 
@@ -11,11 +11,11 @@ module DumpedRailers
11
11
 
12
12
  def build!
13
13
  id = @record.id
14
- attributes =
15
- @preprocessors.inject(@record.attributes) { |attrs, preprocessor|
16
- preprocessor.call(attrs, @model)
17
- }
18
-
14
+ attributes = @record.attributes.deep_dup
15
+ @preprocessors.each do |preprocessor|
16
+ preprocessor.call(@model, attributes)
17
+ end
18
+
19
19
  # convert "belong_to association" foreign keys into record-unique labels
20
20
  @model.reflect_on_all_associations.select(&:belongs_to?).each do |rel|
21
21
  # skip ignorables
@@ -39,15 +39,15 @@ module DumpedRailers
39
39
 
40
40
  [record_label_for(@model.name, id), attributes]
41
41
  end
42
-
42
+
43
43
  private
44
-
44
+
45
45
  def record_label_for(class_name, id, type=nil)
46
46
  return nil unless id
47
47
 
48
48
  identifier = "#{class_name.to_s.underscore}_#{id}"
49
49
  type_specifier = "(#{type})" if type
50
-
50
+
51
51
  "__#{identifier}#{type_specifier}"
52
52
  end
53
53
  end
@@ -6,28 +6,44 @@ module DumpedRailers
6
6
  class Import
7
7
  attr_reader :fixture_set
8
8
 
9
- def initialize(*paths)
9
+ def initialize(*paths, authorized_models: [], before_save: [], after_save: [])
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
13
16
  @raw_fixtures = FileHelper.read_fixtures(*paths)
14
17
  end
15
18
 
16
- @fixture_set = RecordBuilder::FixtureSet.new(@raw_fixtures)
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)
23
+ fixture_set.authorize_models!
20
24
  fixture_set.sort_by_table_dependencies!
21
25
  @record_sets = fixture_set.build_record_sets!
22
26
 
23
27
  ActiveRecord::Base.transaction(joinable: false, requires_new: true) do
24
28
  # models have to be persisted one-by-one so that dependent models are able to
25
29
  # resolve "belongs_to" (parent) association
26
- @record_sets.each do |_model, records|
30
+ @record_sets.each do |model, records|
31
+ @before_save.each do |callback|
32
+ callback.call(model, records)
33
+ end
34
+ end
35
+
36
+ @record_sets.each do |model, records|
27
37
  # FIXME: faster implementation wanted, parhaps with activerocord-import
28
38
  # (objects needs to be reloaded somehow when using buik insert)
29
39
  records.each(&:save!)
30
40
  end
41
+
42
+ @record_sets.each do |model, records|
43
+ @after_save.each do |callback|
44
+ callback.call(model, records)
45
+ end
46
+ end
31
47
  end
32
48
  end
33
49
  end
@@ -3,9 +3,13 @@
3
3
  module DumpedRailers
4
4
  module Preprocessor
5
5
  class StripIgnorables
6
- def call(attributes, _model)
7
- attributes.reject { |column_name, _v|
8
- DumpedRailers.config.ignorable_columns.map(&:to_s).include?(column_name)
6
+ def initialize(*ignorable_columns)
7
+ @ignorable_columns = ignorable_columns.compact.map(&:to_s)
8
+ end
9
+
10
+ def call(_model, attributes)
11
+ attributes.delete_if { |column_name, _v|
12
+ @ignorable_columns.include?(column_name)
9
13
  }
10
14
  end
11
15
  end
@@ -8,35 +8,57 @@ module DumpedRailers
8
8
  class FixtureSet
9
9
  include TSort
10
10
  attr_reader :fixture_tables, :record_sets
11
-
12
- def initialize(raw_fixtures)
11
+
12
+ def initialize(raw_fixtures, authorized_models: [])
13
13
  @fixture_tables = raw_fixtures.map { |raw_records| build_fixture_table(raw_records) }
14
+ @authorized_models = Array(authorized_models)
14
15
  end
15
-
16
+
16
17
  def sort_by_table_dependencies!
17
18
  @fixture_tables.each(&:analyze_metadata_dependencies!)
18
19
  # dependency are sorted in topological order using Active Record reflection
19
20
  @fixture_tables = tsort
20
-
21
+
21
22
  self
22
23
  end
23
-
24
+
25
+ def authorize_models!
26
+ return if @authorized_models.include?(:any)
27
+
28
+ unauthorized_models = fixture_models.reject { |model|
29
+ @authorized_models.include? model
30
+ }
31
+ return if unauthorized_models.empty?
32
+
33
+ raise RuntimeError, <<~"ERROR_MESSAGE"
34
+ You are trying to import data into unauthorized models.
35
+ Make sure that the fixture contains records for authorized models only.
36
+
37
+ Models that are forbidden to access: #{unauthorized_models.map(&:name).join(', ')}
38
+
39
+ ERROR_MESSAGE
40
+ end
41
+
24
42
  def build_record_sets!
25
43
  @record_sets = @fixture_tables.map { |table|
26
44
  [table.model, table.build_records!]
27
45
  }.to_h
28
46
  end
29
-
47
+
30
48
  private
31
-
49
+
32
50
  def build_fixture_table(raw_records)
33
51
  FixtureTable.new(raw_records)
34
52
  end
35
-
53
+
54
+ def fixture_models
55
+ @fixture_tables.map(&:model)
56
+ end
57
+
36
58
  def tsort_each_node(&block)
37
59
  @fixture_tables.each { |table| block.call(table) }
38
60
  end
39
-
61
+
40
62
  def tsort_each_child(node, &block)
41
63
  dependent_nodes = @fixture_tables.select { |table| node.dependencies.include? table.model_name }
42
64
  dependent_nodes.each &block
@@ -1,3 +1,3 @@
1
1
  module DumpedRailers
2
- VERSION = "0.1.5"
2
+ VERSION = '0.4.1'
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.1.5
4
+ version: 0.4.1
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-18 00:00:00.000000000 Z
11
+ date: 2021-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
47
+ version: '3.10'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.0'
54
+ version: '3.10'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: sqlite3
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -70,14 +70,14 @@ dependencies:
70
70
  name: activerecord
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '5.2'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '5.2'
83
83
  - !ruby/object:Gem::Dependency
@@ -156,10 +156,11 @@ files:
156
156
  - bin/console
157
157
  - bin/setup
158
158
  - dumped_railers.gemspec
159
- - gemfiles/Gemfile.rails_5.2.4
160
- - gemfiles/Gemfile.rails_6.0.3.4
161
- - gemfiles/Gemfile.rails_6.1.0
159
+ - gemfiles/Gemfile.rails_5.2
160
+ - gemfiles/Gemfile.rails_6.0
161
+ - gemfiles/Gemfile.rails_6.1
162
162
  - lib/dumped_railers.rb
163
+ - lib/dumped_railers/configuration.rb
163
164
  - lib/dumped_railers/dump.rb
164
165
  - lib/dumped_railers/file_helper.rb
165
166
  - lib/dumped_railers/fixture_builder/model.rb
@@ -193,7 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
193
194
  - !ruby/object:Gem::Version
194
195
  version: '0'
195
196
  requirements: []
196
- rubygems_version: 3.2.0
197
+ rubygems_version: 3.1.4
197
198
  signing_key:
198
199
  specification_version: 4
199
200
  summary: A flexible fixture importer/exporter, that can transport ActiveRecord data