active_record_data_loader 1.0.0 → 1.0.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: 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