csv_step_importer 0.11.2 → 0.12.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: 364fc1eeae6383c6eb807dd0465db9a1e234fa52ee3b7d24df31593f52d5db64
4
- data.tar.gz: 382c087af1d90bdaa69027e4877db716aa5e7ee4ecc7d9c5c3c4eea88efd7004
3
+ metadata.gz: c7e47c79367ebc96d77f98f8a222efed6058b41e297fd330a5819a3e7449214a
4
+ data.tar.gz: c60c54fbca29a869584a8ef08bd0149a6d90c4f4f6bfafc6addf89847922c740
5
5
  SHA512:
6
- metadata.gz: ecff99122347cbb5850788383793df8406ce6cbda00fbb4883b72757b06bb55d2cf119b03806662c671f7fd289d26a227d7b1a15eab5599fd87bb50f31f8be67
7
- data.tar.gz: '08a4c0ae13854c7b0e265ecb8590213fe27733b5f3698386c19e69371cd7610416ca2ed17ed4f858f8ec1a662292b009ab3bac7a1312cefdc4cf0543c813692b'
6
+ metadata.gz: d03d12132eeccfa84468e1f861f25bc462b1d00957f3ccb0719d40437d6a23a8058a35997ada9eadeaaf087fb7051f5950c4a35780404426fcb4df99381ca19d
7
+ data.tar.gz: aefe551280cb52ca746f57d4d5c5bcd13ade807b3bececd1561fe81bfeea953a93a5ee3b7184b97a4d39d6f1ff91000ee5f12db83d704607f065395e78959e6a
data/CHANGELOG.md CHANGED
@@ -141,3 +141,19 @@ See lib/csv_step_importer/file.rb for more options
141
141
  - Revert "ImportableModel's Importer (uses ActiveRecord::Import) now raises an exception if the import fails"
142
142
  Since import! runs validations on the model, I reverted import! to import (validations should be performed inside csv_step_importers logic)
143
143
 
144
+ ## 2018-09-14 Version 0.12.0
145
+ ### Added
146
+ - Added a `set` method to Base, in order to make settings shorter
147
+ Usage:
148
+ ```ruby
149
+ class X < Node
150
+ set :config_a, true
151
+ set :config_b, -> { row.some_array.first }
152
+ end
153
+ ```
154
+ - Added dao_for to Row
155
+ ### Changed
156
+ - Changed settings to use the new set method
157
+ - dao_for's interface changed
158
+ Before: `dao_for(model: some_model_class_or_instance, pluralize: optional_boolean)`
159
+ After: `dao_for(some_model_class_or_instance, pluralize: optional_boolean)`
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- csv_step_importer (0.11.2)
4
+ csv_step_importer (0.12.0)
5
5
  activemodel
6
6
  activerecord-import
7
7
  activesupport
@@ -12,6 +12,12 @@ module CSVStepImporter
12
12
  class CSVImportError < RuntimeError; end
13
13
  class CSVFileImportError < CSVImportError; end
14
14
 
15
+ # defines a method with the specified proc or a proc returning the value of the second attribute
16
+ def self.set name, value_or_proc
17
+ procedure = value_or_proc.is_a?(Proc) ? value_or_proc : -> { value_or_proc }
18
+ define_method name, procedure
19
+ end
20
+
15
21
  def assign_attributes(attributes)
16
22
  attributes.each do |key, value|
17
23
  send("#{key}=", value)
@@ -6,9 +6,21 @@ module CSVStepImporter
6
6
  attr_accessor :id, :row, :attributes
7
7
 
8
8
  delegate :columns, to: :model
9
+ delegate :dao_for, to: :row
9
10
 
10
11
  validates :row, presence: true
11
12
 
13
+ #########################################################
14
+ # Configuration
15
+ #########################################################
16
+
17
+ set :created_at, -> { current_timestamp }
18
+ set :updated_at, -> { current_timestamp }
19
+
20
+ #########################################################
21
+ # Logic
22
+ #########################################################
23
+
12
24
  def initialize(parent:, row:, **attributes)
13
25
  super parent: parent
14
26
 
@@ -51,19 +63,6 @@ module CSVStepImporter
51
63
  model.cache[:updated_at] ||= (::ActiveRecord::Base.default_timezone == :utc ? ::Time.now.utc : ::Time.now).to_s(:db)
52
64
  end
53
65
 
54
- def created_at
55
- current_timestamp
56
- end
57
-
58
- def updated_at
59
- current_timestamp
60
- end
61
-
62
- # retrieve a dao for a different model using the same CSV row. This is useful e.g. if you use the reflector to get ids of related data
63
- def dao_for(model:, pluralize: false)
64
- row.cache[model.cache_key(pluralize: pluralize)]
65
- end
66
-
67
66
  # link this dao to a row
68
67
  def link!
69
68
  # add to cache with pluralized key
@@ -8,45 +8,31 @@ module CSVStepImporter
8
8
  #########################################################
9
9
 
10
10
  # example: User
11
- def model_class
12
- raise "please extend and implement"
13
- end
11
+ set :model_class, -> { raise "please extend and implement" }
14
12
 
15
13
  # set to nil in order to deactivate
16
- def importer_class
17
- CSVStepImporter::Model::Importer
18
- end
14
+ set :importer_class, CSVStepImporter::Model::Importer
19
15
 
20
16
  # return CSVStepImporter::Model::Reflector in order to enable reflections (e.g. get ids of all rows)
21
17
  # disabled by default
22
- def reflector_class
23
- nil
24
- end
18
+ set :reflector_class, nil
25
19
 
26
20
  # NOTE: required only when reflector class is set
27
21
  # example: env[:company].company_users
28
- def finder_scope
29
- model_class.all
30
- end
22
+ set :finder_scope, -> { model_class.all }
31
23
 
32
24
  # NOTE: required only when reflector class is set
33
25
  # example: [:email]
34
- def finder_keys
35
- composite_key_columns || raise("please extend and implement")
36
- end
26
+ set :finder_keys, -> { composite_key_columns || raise("please extend and implement") }
37
27
 
38
28
  # NOTE: required only when importer class is set
39
29
  # see: https://github.com/zdennis/activerecord-import/wiki/On-Duplicate-Key-Update
40
- def on_duplicate_key_ignore
41
- false
42
- end
30
+ set :on_duplicate_key_ignore, false
43
31
 
44
32
  # NOTE: required only when importer class is set
45
33
  # example [:email, :updated_at]
46
34
  # see: https://github.com/zdennis/activerecord-import/wiki/On-Duplicate-Key-Update
47
- def on_duplicate_key_update
48
- raise "please extend and implement"
49
- end
35
+ set :on_duplicate_key_update, -> { raise "please extend and implement" }
50
36
 
51
37
  #########################################################
52
38
  # Logic
@@ -9,6 +9,18 @@ module CSVStepImporter
9
9
  delegate :rows, :cache, to: :parent
10
10
  delegate :cache_key, to: :class
11
11
 
12
+ #########################################################
13
+ # Configuration
14
+ #########################################################
15
+
16
+ set :columns, -> { raise "please extend and implement" } # example: [:email, :updated_at, :created_at]
17
+ set :composite_key_columns, nil # specify to an array of columns in order filter duplicates from daos
18
+ set :dao_class, CSVStepImporter::Model::DAO
19
+
20
+ #########################################################
21
+ # Logic
22
+ #########################################################
23
+
12
24
  def initialize(**attributes)
13
25
  super **attributes
14
26
 
@@ -26,20 +38,6 @@ module CSVStepImporter
26
38
  (pluralize ? key.pluralize : key.singularize).to_sym
27
39
  end
28
40
 
29
- # example: [:email, :updated_at, :created_at]
30
- def columns
31
- raise "please extend and implement"
32
- end
33
-
34
- def dao_class
35
- CSVStepImporter::Model::DAO
36
- end
37
-
38
- # specify to an array of columns in order filter duplicates from daos
39
- def composite_key_columns
40
- nil
41
- end
42
-
43
41
  #########################################################
44
42
  # Logic
45
43
  #########################################################
@@ -50,7 +50,7 @@ module CSVStepImporter
50
50
  def run_validations!
51
51
  super
52
52
  errors.empty?
53
- end
53
+ end
54
54
 
55
55
  def validate_children
56
56
  return unless errors.empty?
@@ -16,5 +16,10 @@ module CSVStepImporter
16
16
  # Rowの保存処理は基本的にstepsで行います
17
17
  true
18
18
  end
19
+
20
+ # retrieve a dao for a different model using the same CSV row. This is useful e.g. if you use the reflector to get ids of related data
21
+ def dao_for(model, pluralize: false)
22
+ cache[model.cache_key(pluralize: pluralize)]
23
+ end
19
24
  end
20
25
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CSVStepImporter
4
- VERSION = "0.11.2"
4
+ VERSION = "0.12.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csv_step_importer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.2
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian-Manuel Butzke
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-13 00:00:00.000000000 Z
11
+ date: 2018-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler