dumped_railers 0.1.4 → 0.4

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: e4a93dbe684079409978553480483dbd5d2727f1f694470a8b62e89e0715fbe8
4
- data.tar.gz: 266714eaca3eb9311effa69a5a6a1d4d784c758f04ea50574d24a44fcbe6a210
3
+ metadata.gz: 5025d07432c51021973eb7064be24d2a1cacbff2a31919c87341bc2f6a71693d
4
+ data.tar.gz: bbd212538475cda7a08278da201e151acbd13bfe8f05dd3558d257f485217ad2
5
5
  SHA512:
6
- metadata.gz: f858057d3a62e389a01580a42fc926491a6c55e1f351a27a1d631fffba06727ccfecf6109848e1d547897218924398f1dc1176d9733205d8164cb7332987dae3
7
- data.tar.gz: 4ee34e3d764eb00f8b244fdacce154f94cae38a6839c71bd7b640907fea235c84d8eaf83b1519fc6872fe305383d031253a55b5f91b79d39b5c96facb821c4f8
6
+ metadata.gz: 02f2ac6903602017cf440ba1c7431922dc600880665d4768da022031b62806673bae06d4a66bd6d134cab7a3e002734b453c76f838a0f256454094de3166eed4
7
+ data.tar.gz: 9d6d3ea246624629e0b1a24bd42ab301623e1fefe6699cb009b1558fed0e878c47fd41288c31ef5ca6e62fbb51e254cc57b71a0d139aad2f631063d6c541fe09
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
@@ -26,3 +26,31 @@
26
26
  ### Changed
27
27
  - Update documents not to eagerload DumpedRailers to prevent accidental data breakage / leakage.
28
28
  To activate, it is preferable to require explicitly where necessary.
29
+
30
+ ## [0.1.5]
31
+ ### Added
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
@@ -67,24 +67,35 @@ DumpedRailers.import!('tmp/fixtures/users.yml', 'tmp/fixtures/items.yml')
67
67
 
68
68
  NOTE: you at least have to provide all the dependent records, so that DumpedRailers can resolve dependencies among the fixtures provided.
69
69
 
70
- ### Ignored Columns
70
+ ### Using In-Memory Fixtures
71
+
72
+ DumpedRailers.dump! also returns an object, which can be imported directly as in-memory fixture.
73
+
74
+ ```ruby
75
+ fixtures = DumpedRailers.dump!(User, Item, Tag)
76
+ DumpedRailers.import!(fixtures)
77
+ ```
78
+
79
+ DumpedRailers does not save the fixtures when `base_dir` keyword argument is not specified.
80
+
81
+ ### Ignoring Certain Columns
71
82
 
72
83
  * By default, DumpedRailers ignore three columns - `id`, `created_at`, `updated_at`. You can always update/change this settings as follows.
73
84
 
74
85
  ```ruby
75
86
  DumpedRailers.configure do |config|
76
- 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.
77
88
  end
78
89
  ```
79
90
 
80
91
  * of course you can totally replace the settings with your own.
81
92
  ```ruby
82
93
  DumpedRailers.configure do |config|
83
- 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
84
95
  end
85
96
  ```
86
97
 
87
- ### Masking, filtering
98
+ ### Masking, Filtering
88
99
 
89
100
  * you can pass `preprocessors` to DumpedRailers before it starts dump. All the attributes are filtered through preprocessors in order of registration.
90
101
 
@@ -92,15 +103,15 @@ end
92
103
  DumpedRailers.dump!(User, Item, base_dir: 'tmp/', preprocessors: [MaskingPreprocessor.new])
93
104
  ```
94
105
 
95
- * "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).
96
107
 
97
108
 
98
109
  ```ruby
99
110
  class MaskingPreprocessor
100
- def call(attrs, model)
101
- attrs.map { |col, value|
102
- col.match?(/password/) ? [col, '<MASKED>'] : [col, value]
103
- }.to_h
111
+ def call(model, attrs)
112
+ attrs.each { |col, _value|
113
+ attrs[col] = '<MASKED>' if col.match?(/password/)
114
+ }
104
115
  end
105
116
  end
106
117
  ```
@@ -108,12 +119,82 @@ end
108
119
  * a lambda object can be accepted as well
109
120
 
110
121
  ```ruby
111
- masking_preprocessor = -> (attrs, model) { attrs.transform_values(&:upcase) }
122
+ masking_preprocessor = -> (model, attrs) { attrs.transform_values!(&:upcase) }
123
+ ```
124
+
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.
128
+
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])
112
135
  ```
113
136
 
114
- NOTE: The proprocessors must return attributes in the same format `{ attributes_name: value }` so that preprocessors and dump handlers can preprocessors in nested manner.
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
+ ```
115
196
 
116
- ### pseudo multi-tenancy (such as ActsAsTenant)
197
+ ### Dump/Import under default_scope (e.g. ActsAsTenant)
117
198
 
118
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)
119
200
 
@@ -170,7 +251,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
170
251
 
171
252
  ## Contributing
172
253
 
173
- Bug reports and pull requests are welcome on GitHub at https://github.com/[fursich]/dumped_railers.
254
+ Bug reports and pull requests are welcome on GitHub at https://github.com/fursich/dumped_railers.
174
255
 
175
256
 
176
257
  ## License
@@ -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,43 +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: './', preprocessors: nil)
12
- preprocessors = [Preprocessor::StripIgnorables.new, *preprocessors].compact.uniq
10
+ extend Configuration
13
11
 
14
- fixture_handler = Dump.new(*models, preprocessors: preprocessors)
15
- fixture_handler.build_fixtures!
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])
21
+ fixtures = fixture_handler.build_fixtures!
16
22
  fixture_handler.persist_all!(base_dir)
23
+
24
+ fixtures
17
25
  end
18
26
 
19
- def import!(*paths)
27
+ def import!(*paths, authorized_models: nil, before_save: nil, after_save: nil)
20
28
  # make sure class-baseed caches starts with clean state
21
29
  DumpedRailers::RecordBuilder::FixtureRow::RecordStore.clear!
22
30
  DumpedRailers::RecordBuilder::DependencyTracker.clear!
23
31
 
24
- 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
+ )
25
44
  fixture_handler.import_all!
26
45
  end
27
46
 
28
- class Configuration < ::OpenStruct; end
47
+ private
29
48
 
30
- def config
31
- @_config ||= Configuration.new
49
+ def default_preprocessor(ignorable_columns)
50
+ Preprocessor::StripIgnorables.new(*ignorable_columns)
32
51
  end
33
52
 
34
- def configure
35
- yield config
53
+ def dump_options
54
+ options.slice(:ignorable_columns, :preprocessors)
36
55
  end
37
56
 
38
- # FIXME: make it minimum
39
- IGNORABLE_COLUMNS = %w[id created_at updated_at]
40
- def configure_defaults!
41
- configure do |config|
42
- config.ignorable_columns = IGNORABLE_COLUMNS
43
- end
57
+ def import_options
58
+ options.slice(:authorized_models)
44
59
  end
45
60
  end
46
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
 
@@ -16,8 +16,10 @@ module DumpedRailers
16
16
  end
17
17
 
18
18
  def persist_all!(base_dir)
19
- FileUtils.mkdir_p(base_dir)
20
- FileHelper.write(*@fixtures, base_dir: base_dir)
19
+ if base_dir
20
+ FileUtils.mkdir_p(base_dir)
21
+ FileHelper.write(*@fixtures, base_dir: base_dir)
22
+ end
21
23
  end
22
24
  end
23
25
  end
@@ -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,22 +6,39 @@ module DumpedRailers
6
6
  class Import
7
7
  attr_reader :fixture_set
8
8
 
9
- def initialize(*paths)
10
- @raw_fixtures = FileHelper.read_fixtures(*paths)
11
- @fixture_set = RecordBuilder::FixtureSet.new(@raw_fixtures)
9
+ def initialize(*paths, authorized_models: [], before_save: [], after_save: [])
10
+ @before_save = before_save
11
+ @after_save = after_save
12
+
13
+ if (paths.first.is_a? Hash)
14
+ @raw_fixtures = paths.first.values
15
+ else
16
+ @raw_fixtures = FileHelper.read_fixtures(*paths)
17
+ end
18
+
19
+ @fixture_set = RecordBuilder::FixtureSet.new(@raw_fixtures, authorized_models: authorized_models)
12
20
  end
13
21
 
14
- def import_all!
22
+ def import_all!(&block)
23
+ fixture_set.authorize_models!
15
24
  fixture_set.sort_by_table_dependencies!
16
25
  @record_sets = fixture_set.build_record_sets!
17
26
 
18
27
  ActiveRecord::Base.transaction(joinable: false, requires_new: true) do
19
28
  # models have to be persisted one-by-one so that dependent models are able to
20
29
  # resolve "belongs_to" (parent) association
21
- @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
+
22
35
  # FIXME: faster implementation wanted, parhaps with activerocord-import
23
36
  # (objects needs to be reloaded somehow when using buik insert)
24
37
  records.each(&:save!)
38
+
39
+ @after_save.each do |callback|
40
+ callback.call(model, records)
41
+ end
25
42
  end
26
43
  end
27
44
  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.4"
2
+ VERSION = '0.4'
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.4
4
+ version: '0.4'
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-11 00:00:00.000000000 Z
11
+ date: 2021-01-12 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