active_record_data_loader 1.0.0 → 1.0.1

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: 5c2971599904ef04249cbada28e924103f7a7f37e0d397e047502063bebd4297
4
- data.tar.gz: 4b9d6471bb8c01937b459ca21cd8fcff18d2f13950102a63bebb13aa20584fb3
3
+ metadata.gz: ddff4ba719de66b138820d4e5c257df064e85259e595156f5f25c54622e9c60a
4
+ data.tar.gz: e82e4ae901cd557a197c4b5c66069bbb01e2cf64973c4b885a35661f1ecb05ca
5
5
  SHA512:
6
- metadata.gz: c324c5783427ca9aacb88496e2b76669ade344fdb3d9eb4d640d2579cf9c472eee2a62367478d5211aead5572c155f4beb3ce12c5202503bb80e6f134a565743
7
- data.tar.gz: f6f558c48d05973eed5cd9659b5204af780075ee19b8e046ddc1428385e1155a266cdacb052220b1b5354a5e7a50ea04e12c4eefac77002f2fa302bd772ec1e7
6
+ metadata.gz: 6a6d299daed5d81cd92f65206307ceab39e4147afa8956822890941426e4765b197d149d97992d19bc7506697a76cd9e6056623549eeb632cc884dc03f02cea5
7
+ data.tar.gz: a68aca773f47b9b06f833ad0a8e6eaf6bb29b76d9d966597c17f40855430c799703d75cc8ef34fa209e66cd0cc50b220e00b51b086b1cb136c92607a9f0c873c
data/CHANGELOG.md ADDED
@@ -0,0 +1,15 @@
1
+ # Change log
2
+
3
+ ## [v1.0.1] - 2019-06-16
4
+
5
+ [Diff](https://github.com/abeiderman/active_record_data_loader/compare/v1.0.0...v1.0.1)
6
+
7
+ ### Enhancements:
8
+ * Generate values for datetime column types. This also fixes the fact that `created_at` and `updated_at` were not being populated by default.
9
+
10
+ ## [v1.0.0] - 2019-06-15
11
+
12
+ Initial stable release
13
+
14
+ [v1.0.0]: https://github.com/abeiderman/active_record_data_loader/releases/tag/v1.0.0
15
+ [v1.0.1]: https://github.com/abeiderman/active_record_data_loader/releases/tag/v1.0.1
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_record_data_loader (1.0.0)
4
+ active_record_data_loader (1.0.1)
5
5
  activerecord (>= 4.0)
6
6
 
7
7
  GEM
@@ -82,6 +82,7 @@ GEM
82
82
  tins (~> 1.0)
83
83
  thor (0.20.3)
84
84
  thread_safe (0.3.6)
85
+ timecop (0.9.1)
85
86
  tins (1.20.3)
86
87
  tzinfo (1.2.5)
87
88
  thread_safe (~> 0.1)
@@ -102,6 +103,7 @@ DEPENDENCIES
102
103
  rspec-collection_matchers
103
104
  rubocop
104
105
  sqlite3
106
+ timecop
105
107
 
106
108
  BUNDLED WITH
107
109
  2.0.1
@@ -44,4 +44,5 @@ Gem::Specification.new do |spec|
44
44
  spec.add_development_dependency "rspec-collection_matchers"
45
45
  spec.add_development_dependency "rubocop"
46
46
  spec.add_development_dependency "sqlite3"
47
+ spec.add_development_dependency "timecop"
47
48
  end
@@ -4,9 +4,11 @@ require "active_record_data_loader/version"
4
4
  require "active_record"
5
5
  require "active_record_data_loader/configuration"
6
6
  require "active_record_data_loader/data_faker"
7
+ require "active_record_data_loader/active_record/per_row_value_cache"
7
8
  require "active_record_data_loader/active_record/integer_value_generator"
8
9
  require "active_record_data_loader/active_record/text_value_generator"
9
10
  require "active_record_data_loader/active_record/enum_value_generator"
11
+ require "active_record_data_loader/active_record/datetime_value_generator"
10
12
  require "active_record_data_loader/active_record/column_configuration"
11
13
  require "active_record_data_loader/active_record/belongs_to_configuration"
12
14
  require "active_record_data_loader/active_record/polymorphic_belongs_to_configuration"
@@ -42,6 +44,8 @@ module ActiveRecordDataLoader
42
44
  end
43
45
 
44
46
  def load_data
47
+ ActiveRecordDataLoader::ActiveRecord::PerRowValueCache.clear
48
+
45
49
  definition.models.map do |m|
46
50
  generator = ActiveRecordDataLoader::ActiveRecord::ModelDataGenerator.new(
47
51
  model: m.klass,
@@ -9,6 +9,7 @@ module ActiveRecordDataLoader
9
9
  integer: IntegerValueGenerator,
10
10
  string: TextValueGenerator,
11
11
  text: TextValueGenerator,
12
+ datetime: DatetimeValueGenerator,
12
13
  }.freeze
13
14
 
14
15
  def config_for(model_class:, ar_column:)
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveRecordDataLoader
4
+ module ActiveRecord
5
+ class DatetimeValueGenerator
6
+ class << self
7
+ def generator_for(model_class:, ar_column:)
8
+ ->(row) { timestamp(model_class, row) }
9
+ end
10
+
11
+ private
12
+
13
+ def timestamp(model, row_number)
14
+ PerRowValueCache[:datetime].get_or_set(model: model, row: row_number) do
15
+ Time.now.utc
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveRecordDataLoader
4
+ module ActiveRecord
5
+ class PerRowValueCache
6
+ class << self
7
+ def [](key)
8
+ caches[key] ||= new
9
+ end
10
+
11
+ def clear
12
+ @caches = {}
13
+ end
14
+
15
+ private
16
+
17
+ def caches
18
+ @caches ||= clear
19
+ end
20
+ end
21
+
22
+ def initialize
23
+ @row_caches = Hash.new { |hash, key| hash[key] = {} }
24
+ end
25
+
26
+ def get_or_set(model:, row:)
27
+ @row_caches[model.name].shift if @row_caches[model.name].size > 1
28
+
29
+ @row_caches[model.name][row] ||= yield
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveRecordDataLoader
4
- VERSION = "1.0.0"
4
+ VERSION = "1.0.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record_data_loader
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alejandro Beiderman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-15 00:00:00.000000000 Z
11
+ date: 2019-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -164,6 +164,20 @@ dependencies:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: timecop
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
167
181
  description: A utility to bulk load test data for performance testing.
168
182
  email:
169
183
  - abeiderman@gmail.com
@@ -178,6 +192,7 @@ files:
178
192
  - ".rubocop.yml"
179
193
  - ".travis.yml"
180
194
  - Appraisals
195
+ - CHANGELOG.md
181
196
  - CODE_OF_CONDUCT.md
182
197
  - Gemfile
183
198
  - Gemfile.lock
@@ -198,9 +213,11 @@ files:
198
213
  - lib/active_record_data_loader.rb
199
214
  - lib/active_record_data_loader/active_record/belongs_to_configuration.rb
200
215
  - lib/active_record_data_loader/active_record/column_configuration.rb
216
+ - lib/active_record_data_loader/active_record/datetime_value_generator.rb
201
217
  - lib/active_record_data_loader/active_record/enum_value_generator.rb
202
218
  - lib/active_record_data_loader/active_record/integer_value_generator.rb
203
219
  - lib/active_record_data_loader/active_record/model_data_generator.rb
220
+ - lib/active_record_data_loader/active_record/per_row_value_cache.rb
204
221
  - lib/active_record_data_loader/active_record/polymorphic_belongs_to_configuration.rb
205
222
  - lib/active_record_data_loader/active_record/text_value_generator.rb
206
223
  - lib/active_record_data_loader/bulk_insert_strategy.rb