activerecord-import 0.14.1 → 0.15.0

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
  SHA1:
3
- metadata.gz: e0eab7d65f5982398dc619a9b74658f8686fca73
4
- data.tar.gz: e2eee39f139a44acf97c11f84a834c70e1833418
3
+ metadata.gz: 7c1b3ac9675567f96311618bfcf008c344559183
4
+ data.tar.gz: 796d923d2db2f0317c832081e2ea336b9f933a7c
5
5
  SHA512:
6
- metadata.gz: 4b12aea6f47a5f45920c58a227a1f62f445f9fb7f33e7226c17c1c3c0bfc0d680bac38d24342bcb3aa847f46c15cddfa1a8f10cc9e946ca0ba52e0ea43afced7
7
- data.tar.gz: 7ebeae0718cc45a693d986db6f544eadad3c10dcff580403634afbbcd87074cca999a67cf960ed5bb0b438d77737cf09154b88ff701b1068c70cd3a4586a46c7
6
+ metadata.gz: 17a0387cd93c752b91f8cee9bf0fa311463e927debf83141a759e277d5e632aa7f468fa0b36a082d54adad0596cae40f31002f699b6189c0b00ce1b072e666c9
7
+ data.tar.gz: 587d1a167feb65558bf10208404a23bc409c6a4f48e8dd64cc32e0e2af76e1f9b81247a17658c47de102d29a0b8b4619a021d1b78bde61aa00fa5403b38c2aaa
@@ -1,8 +1,24 @@
1
+ ## Changes in 0.15.0
2
+
3
+ ### New Features
4
+
5
+ * An ArgumentError is now raised if when no `conflict_target` or `conflict_name` is provided or can be determined when using the `on_duplicate_key_update` option for PostgreSQL. Thanks to @jkowens via \#290
6
+ * Support for Rails 5.0 final release for all except the JDBC driver which is not yet updated to support Rails 5.0
7
+
8
+ ### Fixes
9
+
10
+ * activerecord-import no longer modifies a value array inside of the given values array when called with `import(columns, values)`. Thanks to @jkowens via \#291
11
+
12
+ ### Misc
13
+
14
+ * `raise_error` is used to raise errors for ActiveRecord 5.0. Thanks to @couragecourag via \#294 `raise_record_invalid` has been
15
+
16
+
1
17
  ## Changes in 0.14.1
2
18
 
3
19
  ### Fixes
4
20
 
5
- * JRuby/JDBCDriver with PostgreSQL will no longer raise a JDBCDriver error when using the :no_returning boolean option. Thanks to @jkowens via \#287
21
+ * JRuby/JDBCDriver with PostgreSQL will no longer raise a JDBCDriver error when using the :no_returning boolean option. Thanks to @jkowens via \#287
6
22
 
7
23
  ## Changes in 0.14.0
8
24
 
@@ -26,7 +42,6 @@
26
42
  * Code cleanup, removal of deprecated `alias_method_chain`. Thanks to @codeodor via \#271
27
43
 
28
44
 
29
-
30
45
  ## Changes in 0.13.0
31
46
 
32
47
  ### New Features
@@ -1,3 +1,7 @@
1
1
  platforms :ruby do
2
2
  gem 'activerecord', '~> 4.2.0'
3
3
  end
4
+
5
+ platforms :jruby do
6
+ gem 'activerecord', '~> 4.2.0'
7
+ end
@@ -1,3 +1,3 @@
1
1
  platforms :ruby do
2
- gem 'activerecord', '~> 5.0.0.beta3'
2
+ gem 'activerecord', '~> 5.0.0'
3
3
  end
@@ -113,15 +113,16 @@ module ActiveRecord::Import::PostgreSQLAdapter
113
113
  def sql_for_conflict_target( args = {} )
114
114
  constraint_name = args[:constraint_name]
115
115
  conflict_target = args[:conflict_target]
116
- if constraint_name
116
+ if constraint_name.present?
117
117
  "ON CONSTRAINT #{constraint_name} "
118
- elsif conflict_target
119
- '(' << Array( conflict_target ).join( ', ' ) << ') '
118
+ elsif conflict_target.present?
119
+ '(' << Array( conflict_target ).reject( &:empty? ).join( ', ' ) << ') '
120
120
  end
121
121
  end
122
122
 
123
123
  def sql_for_default_conflict_target( table_name )
124
- "(#{primary_key( table_name )}) "
124
+ conflict_target = primary_key( table_name )
125
+ "(#{conflict_target}) " if conflict_target
125
126
  end
126
127
 
127
128
  # Return true if the statement is a duplicate key record error
@@ -367,13 +367,13 @@ class ActiveRecord::Base
367
367
  # supports 2-element array and array
368
368
  elsif args.size == 2 && args.first.is_a?( Array ) && args.last.is_a?( Array )
369
369
  column_names, array_of_attributes = args
370
+ array_of_attributes = array_of_attributes.map(&:dup)
370
371
  else
371
372
  raise ArgumentError, "Invalid arguments!"
372
373
  end
373
374
 
374
375
  # dup the passed in array so we don't modify it unintentionally
375
376
  column_names = column_names.dup
376
- array_of_attributes = array_of_attributes.dup
377
377
 
378
378
  # Force the primary key col into the insert if it's not
379
379
  # on the list and we are using a sequence and stuff a nil
@@ -394,7 +394,11 @@ class ActiveRecord::Base
394
394
  models.each_with_index do |model, i|
395
395
  model = model.dup if options[:recursive]
396
396
  next if model.valid?(options[:validate_with_context])
397
- model.send(:raise_record_invalid) if options[:raise_error]
397
+ if options[:raise_error] && model.respond_to?(:raise_validation_error, true) # Rails 5.0 and higher
398
+ model.send(:raise_validation_error)
399
+ elsif options[:raise_error] # Rails 3.2, 4.0, 4.1 and 4.2
400
+ model.send(:raise_record_invalid)
401
+ end
398
402
  array_of_attributes[i] = nil
399
403
  failed << model
400
404
  end
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  module Import
3
- VERSION = "0.14.1".freeze
3
+ VERSION = "0.15.0".freeze
4
4
  end
5
5
  end
@@ -29,7 +29,8 @@ describe "#import" do
29
29
 
30
30
  it "should not modify the passed in values array" do
31
31
  assert_nothing_raised do
32
- values = [%w(foo bar)].freeze
32
+ record = %w(foo bar).freeze
33
+ values = [record].freeze
33
34
  Topic.import %w(title author_name), values
34
35
  end
35
36
  end
@@ -170,27 +170,56 @@ def should_support_postgresql_upsert_functionality
170
170
  should_update_fields_mentioned
171
171
  end
172
172
 
173
- context "with no :conflict_target or :constraint_name" do
173
+ context "default to the primary key" do
174
174
  let(:columns) { %w( id title author_name author_email_address parent_id ) }
175
175
  let(:values) { [[100, "Book", "John Doe", "john@doe.com", 17]] }
176
176
  let(:updated_values) { [[100, "Book - 2nd Edition", "Author Should Not Change", "johndoe@example.com", 57]] }
177
-
178
- macro(:perform_import) do |*opts|
179
- Topic.import columns, updated_values, opts.extract_options!.merge(on_duplicate_key_update: { columns: update_columns }, validate: false)
180
- end
177
+ let(:update_columns) { [:title, :author_email_address, :parent_id] }
181
178
 
182
179
  setup do
183
180
  Topic.import columns, values, validate: false
184
181
  @topic = Topic.find 100
185
182
  end
186
183
 
187
- context "default to the primary key" do
188
- let(:update_columns) { [:title, :author_email_address, :parent_id] }
184
+ context "with no :conflict_target or :constraint_name" do
185
+ macro(:perform_import) do |*opts|
186
+ Topic.import columns, updated_values, opts.extract_options!.merge(on_duplicate_key_update: { columns: update_columns }, validate: false)
187
+ end
188
+
189
+ should_support_on_duplicate_key_update
190
+ should_update_fields_mentioned
191
+ end
192
+
193
+ context "with empty value for :conflict_target" do
194
+ macro(:perform_import) do |*opts|
195
+ Topic.import columns, updated_values, opts.extract_options!.merge(on_duplicate_key_update: { conflict_target: [], columns: update_columns }, validate: false)
196
+ end
197
+
198
+ should_support_on_duplicate_key_update
199
+ should_update_fields_mentioned
200
+ end
201
+
202
+ context "with empty value for :constraint_name" do
203
+ macro(:perform_import) do |*opts|
204
+ Topic.import columns, updated_values, opts.extract_options!.merge(on_duplicate_key_update: { constraint_name: '', columns: update_columns }, validate: false)
205
+ end
206
+
189
207
  should_support_on_duplicate_key_update
190
208
  should_update_fields_mentioned
191
209
  end
192
210
  end
193
211
 
212
+ context "with no :conflict_target or :constraint_name" do
213
+ context "with no primary key" do
214
+ it "raises ArgumentError" do
215
+ error = assert_raises ArgumentError do
216
+ Widget.import Build(1, :widgets), on_duplicate_key_update: [:data], validate: false
217
+ end
218
+ assert_match(/Expected :conflict_target or :constraint_name to be specified/, error.message)
219
+ end
220
+ end
221
+ end
222
+
194
223
  context "with no :columns" do
195
224
  let(:columns) { %w( id title author_name author_email_address ) }
196
225
  let(:values) { [[100, "Book", "John Doe", "john@doe.com"]] }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-import
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.1
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zach Dennis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-22 00:00:00.000000000 Z
11
+ date: 2016-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord