activerecord-import 0.17.2 → 0.18.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
  SHA1:
3
- metadata.gz: 5482a79b112f9689eee0261baa906028abd8575f
4
- data.tar.gz: 2f3e76132e6110a5ed17db800f173b5291ddfe8d
3
+ metadata.gz: e1c586e3530cab4dd5f201737dd31c9634079ba1
4
+ data.tar.gz: 1eb5d9c977a304bbff53ce32ffd61a0620426cc0
5
5
  SHA512:
6
- metadata.gz: 509fe999b0343506f4b1263909d24079394d82d8d3aa16fa5210f35a88b92f40954141949ee7a5f979a81f6105838f0471c5c8cdcfa75a30a5abd38fc96cd1f8
7
- data.tar.gz: 517d7de4678ddf9361647f18d08d95c2256e244ae3e6241413abde6b83992e62f4640279c42abdea8bbc710855800840fd2bf941bdca1b447693f2d82cbaa987
6
+ metadata.gz: cd502299bf521c3f9c6f98a2e4eb55ba8b88f0715401a7b959eedbfd26c0a455524642e3e76dbb429931fa006b519376a9be307daa12dd5b73e14f1c48ada29c
7
+ data.tar.gz: 6a980c019a2db629a2ba1772b6630119ac8a04da23dc06c091cdb378a75ceeaf37ad17e5104d7c51f2982cf0253ec6485a538327655aea2e0d29a480364549ce
data/.travis.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  language: ruby
2
2
  cache: bundler
3
3
  rvm:
4
- - 2.2.4
4
+ - 2.3.3
5
5
 
6
6
  env:
7
7
  global:
@@ -13,6 +13,7 @@ env:
13
13
  - AR_VERSION=4.1
14
14
  - AR_VERSION=4.2
15
15
  - AR_VERSION=5.0
16
+ - AR_VERSION=5.1
16
17
 
17
18
  matrix:
18
19
  include:
@@ -26,6 +27,9 @@ matrix:
26
27
  - bundle exec rake test:jdbcmysql
27
28
  - bundle exec rake test:jdbcpostgresql
28
29
 
30
+ allow_failures:
31
+ - env: AR_VERSION=5.1
32
+
29
33
  fast_finish: true
30
34
 
31
35
  before_script:
@@ -37,7 +41,7 @@ before_script:
37
41
  - cp test/travis/database.yml test/database.yml
38
42
 
39
43
  addons:
40
- postgresql: "9.4"
44
+ postgresql: "9.5"
41
45
  apt:
42
46
  sources:
43
47
  - travis-ci/sqlite3
@@ -56,4 +60,4 @@ script:
56
60
  - bundle exec rake test:sqlite3
57
61
  - bundle exec rubocop
58
62
 
59
- sudo: false
63
+ sudo: required
data/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ ## Changes in 0.18.0
2
+
3
+ ### New Features
4
+
5
+ * Uniqueness validation is bypassed when validating models since
6
+ it cannot be guaranteed if there are duplicates in a batch.
7
+ Thanks to @jkowens via \#301.
8
+ * Allow for custom timestamp columns. Thanks to @mojidabckuu, @jkowens
9
+ via \#401.
10
+
11
+ ### Fixes
12
+
13
+ * Fix ActiveRecord 5 issue coercing boolean values when serializing
14
+ for the database. Thanks to @rjrobinson, @jkowens via \#403.
15
+
1
16
  ## Changes in 0.17.2
2
17
 
3
18
  ### Fixes
data/Gemfile CHANGED
@@ -40,6 +40,7 @@ end
40
40
 
41
41
  platforms :ruby do
42
42
  gem "pry-byebug"
43
+ gem "rb-readline"
43
44
  end
44
45
 
45
46
  version = ENV['AR_VERSION'] || "4.2"
data/README.markdown CHANGED
@@ -21,26 +21,6 @@ and then the reviews:
21
21
  That would be about 4M SQL insert statements vs 3, which results in vastly improved performance. In our case, it converted
22
22
  an 18 hour batch process to <2 hrs.
23
23
 
24
- ### Rails 5.0
25
-
26
- Use activerecord-import 0.11.0 or higher.
27
-
28
- ### Rails 4.0
29
-
30
- Use activerecord-import 0.4.0 or higher.
31
-
32
- ### Rails 3.2.x up to, but not including 4.0
33
-
34
- Use activerecord-import 0.3.0 or higher.
35
-
36
- ### Rails 3.1.x up to, but not including 3.2
37
-
38
- Use the latest in the activerecord-import 0.3.x series.
39
-
40
- ### Rails 3.0.x up to, but not including 3.1
41
-
42
- Use activerecord-import 0.2.11. As of activerecord-import 0.3.0 we are relying on functionality that was introduced in Rails 3.1. Since Rails 3.0.x is no longer a supported version of Rails we have decided to drop support as well.
43
-
44
24
  ### More Information : Usage and Examples in Wiki
45
25
 
46
26
  For more information on activerecord-import please see its wiki: https://github.com/zdennis/activerecord-import/wiki
@@ -54,7 +34,7 @@ When `ActiveRecord::Import.require_adapter("fake_name")` is called the require w
54
34
  require 'activerecord-import/active_record/adapters/fake_name_adapter'
55
35
  ```
56
36
 
57
- This allows an external gem to dyanmically add an adapter without the need to add any file/code to the core activerecord-import gem.
37
+ This allows an external gem to dynamically add an adapter without the need to add any file/code to the core activerecord-import gem.
58
38
 
59
39
  ### Load Path Setup
60
40
  To understand how rubygems loads code you can reference the following:
@@ -0,0 +1 @@
1
+ gem 'activerecord', '~> 5.1.0.rc1'
@@ -22,6 +22,44 @@ module ActiveRecord::Import #:nodoc:
22
22
  super "Missing column for value <#{name}> at index #{index}"
23
23
  end
24
24
  end
25
+
26
+ class Validator
27
+ def initialize(validators, options = {})
28
+ @validators = validators
29
+ @options = options
30
+ end
31
+
32
+ def valid_model?(model)
33
+ validation_context = @options[:validate_with_context]
34
+ validation_context ||= (model.new_record? ? :create : :update)
35
+
36
+ current_context = model.send(:validation_context)
37
+ model.send(:validation_context=, validation_context)
38
+ model.errors.clear
39
+
40
+ @validators.each do |v|
41
+ if validation_context == v.options.fetch(:on, validation_context)
42
+ v.validate(model) if validate?(v, model)
43
+ end
44
+ end
45
+
46
+ model.send(:validation_context=, current_context)
47
+ model.errors.empty?
48
+ end
49
+
50
+ def validate?(validator, model)
51
+ evaluate = lambda do |condition|
52
+ case condition
53
+ when String then model.instance_eval(condition)
54
+ when Symbol then model.send(condition)
55
+ when Proc then model.instance_eval(&condition)
56
+ end
57
+ end
58
+
59
+ Array(validator.options[:if]).map(&evaluate).compact.all? &&
60
+ !Array(validator.options[:unless]).map(&evaluate).compact.any?
61
+ end
62
+ end
25
63
  end
26
64
 
27
65
  class ActiveRecord::Associations::CollectionProxy
@@ -97,19 +135,6 @@ end
97
135
 
98
136
  class ActiveRecord::Base
99
137
  class << self
100
- # use tz as set in ActiveRecord::Base
101
- tproc = lambda do
102
- ActiveRecord::Base.default_timezone == :utc ? Time.now.utc : Time.now
103
- end
104
-
105
- AREXT_RAILS_COLUMNS = {
106
- create: { "created_on" => tproc,
107
- "created_at" => tproc },
108
- update: { "updated_on" => tproc,
109
- "updated_at" => tproc }
110
- }.freeze
111
- AREXT_RAILS_COLUMN_NAMES = AREXT_RAILS_COLUMNS[:create].keys + AREXT_RAILS_COLUMNS[:update].keys
112
-
113
138
  # Returns true if the current database connection adapter
114
139
  # supports import functionality, otherwise returns false.
115
140
  def supports_import?(*args)
@@ -453,10 +478,10 @@ class ActiveRecord::Base
453
478
 
454
479
  return_obj = if is_validating
455
480
  if models
456
- import_with_validations( column_names, array_of_attributes, options ) do |failed|
481
+ import_with_validations( column_names, array_of_attributes, options ) do |validator, failed|
457
482
  models.each_with_index do |model, i|
458
483
  model = model.dup if options[:recursive]
459
- next if model.valid?(options[:validate_with_context])
484
+ next if validator.valid_model? model
460
485
  raise(ActiveRecord::RecordInvalid, model) if options[:raise_error]
461
486
  array_of_attributes[i] = nil
462
487
  failed << model
@@ -487,10 +512,6 @@ class ActiveRecord::Base
487
512
  return_obj
488
513
  end
489
514
 
490
- # TODO import_from_table needs to be implemented.
491
- def import_from_table( options ) # :nodoc:
492
- end
493
-
494
515
  # Imports the passed in +column_names+ and +array_of_attributes+
495
516
  # given the passed in +options+ Hash with validations. Returns an
496
517
  # object with the methods +failed_instances+ and +num_inserts+.
@@ -501,8 +522,11 @@ class ActiveRecord::Base
501
522
  def import_with_validations( column_names, array_of_attributes, options = {} )
502
523
  failed_instances = []
503
524
 
525
+ validators = self.validators.reject { |v| v.is_a? ActiveRecord::Validations::UniquenessValidator }
526
+ validator = ActiveRecord::Import::Validator.new(validators, options)
527
+
504
528
  if block_given?
505
- yield failed_instances
529
+ yield validator, failed_instances
506
530
  else
507
531
  # create instances for each of our column/value sets
508
532
  arr = validations_array_for_column_names_and_attributes( column_names, array_of_attributes )
@@ -512,7 +536,7 @@ class ActiveRecord::Base
512
536
  model = new
513
537
  arr.each_with_index do |hsh, i|
514
538
  hsh.each_pair { |k, v| model[k] = v }
515
- next if model.valid?(options[:validate_with_context])
539
+ next if validator.valid_model? model
516
540
  raise(ActiveRecord::RecordInvalid, model) if options[:raise_error]
517
541
  array_of_attributes[i] = nil
518
542
  failure = model.dup
@@ -671,7 +695,6 @@ class ActiveRecord::Base
671
695
  # connection and type_caster get called a *lot* in this high intensity loop.
672
696
  # Reuse the same ones w/in the loop, otherwise they would keep being re-retreived (= lots of time for large imports)
673
697
  connection_memo = connection
674
- type_caster_memo = type_caster if respond_to?(:type_caster)
675
698
 
676
699
  array_of_attributes.map do |arr|
677
700
  my_values = arr.each_with_index.map do |val, j|
@@ -681,11 +704,13 @@ class ActiveRecord::Base
681
704
  if val.nil? && column.name == primary_key && !sequence_name.blank?
682
705
  connection_memo.next_value_for_sequence(sequence_name)
683
706
  elsif column
684
- if defined?(type_caster_memo) && type_caster_memo.respond_to?(:type_cast_for_database) # Rails 5.0 and higher
685
- connection_memo.quote(type_caster_memo.type_cast_for_database(column.name, val))
686
- elsif column.respond_to?(:type_cast_from_user) # Rails 4.2 and higher
707
+ if respond_to?(:type_caster) # Rails 5.0 and higher
708
+ type = type_for_attribute(column.name)
709
+ val = type.type == :boolean ? type.cast(val) : type.serialize(val)
710
+ connection_memo.quote(val)
711
+ elsif column.respond_to?(:type_cast_from_user) # Rails 4.2
687
712
  connection_memo.quote(column.type_cast_from_user(val), column)
688
- else # Rails 3.2, 4.0 and 4.1
713
+ else # Rails 3.2, 4.0 and 4.1
689
714
  if serialized_attributes.include?(column.name)
690
715
  val = serialized_attributes[column.name].dump(val)
691
716
  end
@@ -698,39 +723,38 @@ class ActiveRecord::Base
698
723
  end
699
724
 
700
725
  def add_special_rails_stamps( column_names, array_of_attributes, options )
701
- timestamps = {}
726
+ timestamp_columns = {}
727
+ timestamps = {}
702
728
 
703
- AREXT_RAILS_COLUMNS[:create].each_pair do |key, blk|
704
- next unless self.column_names.include?(key)
705
- value = blk.call
706
- timestamps[key] = value
707
-
708
- index = column_names.index(key) || column_names.index(key.to_sym)
709
- if index
710
- # replace every instance of the array of attributes with our value
711
- array_of_attributes.each { |arr| arr[index] = value if arr[index].nil? }
712
- else
713
- column_names << key
714
- array_of_attributes.each { |arr| arr << value }
715
- end
729
+ if respond_to?(:all_timestamp_attributes_in_model, true) # Rails 5.1 and higher
730
+ timestamp_columns[:create] = timestamp_attributes_for_create_in_model
731
+ timestamp_columns[:update] = timestamp_attributes_for_update_in_model
732
+ else
733
+ instance = new
734
+ timestamp_columns[:create] = instance.send(:timestamp_attributes_for_create_in_model)
735
+ timestamp_columns[:update] = instance.send(:timestamp_attributes_for_update_in_model)
716
736
  end
717
737
 
718
- AREXT_RAILS_COLUMNS[:update].each_pair do |key, blk|
719
- next unless self.column_names.include?(key)
720
- value = blk.call
721
- timestamps[key] = value
722
-
723
- index = column_names.index(key) || column_names.index(key.to_sym)
724
- if index
725
- # replace every instance of the array of attributes with our value
726
- array_of_attributes.each { |arr| arr[index] = value }
727
- else
728
- column_names << key
729
- array_of_attributes.each { |arr| arr << value }
730
- end
738
+ # use tz as set in ActiveRecord::Base
739
+ timestamp = ActiveRecord::Base.default_timezone == :utc ? Time.now.utc : Time.now
740
+
741
+ [:create, :update].each do |action|
742
+ timestamp_columns[action].each do |column|
743
+ column = column.to_s
744
+ timestamps[column] = timestamp
745
+
746
+ index = column_names.index(column) || column_names.index(column.to_sym)
747
+ if index
748
+ # replace every instance of the array of attributes with our value
749
+ array_of_attributes.each { |arr| arr[index] = timestamp if arr[index].nil? || action == :update }
750
+ else
751
+ column_names << column
752
+ array_of_attributes.each { |arr| arr << timestamp }
753
+ end
731
754
 
732
- if supports_on_duplicate_key_update?
733
- connection.add_column_for_on_duplicate_key_update(key, options)
755
+ if supports_on_duplicate_key_update? && action == :update
756
+ connection.add_column_for_on_duplicate_key_update(column, options)
757
+ end
734
758
  end
735
759
  end
736
760
 
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  module Import
3
- VERSION = "0.17.2".freeze
3
+ VERSION = "0.18.0".freeze
4
4
  end
5
5
  end
data/test/import_test.rb CHANGED
@@ -88,21 +88,23 @@ describe "#import" do
88
88
  end
89
89
  end
90
90
 
91
- describe "with composite primary keys" do
92
- it "should import models successfully" do
93
- tags = [Tag.new(tag_id: 1, publisher_id: 1, tag: 'Mystery')]
91
+ unless ENV["SKIP_COMPOSITE_PK"]
92
+ describe "with composite primary keys" do
93
+ it "should import models successfully" do
94
+ tags = [Tag.new(tag_id: 1, publisher_id: 1, tag: 'Mystery')]
94
95
 
95
- assert_difference "Tag.count", +1 do
96
- Tag.import tags
96
+ assert_difference "Tag.count", +1 do
97
+ Tag.import tags
98
+ end
97
99
  end
98
- end
99
100
 
100
- it "should import array of values successfully" do
101
- columns = [:tag_id, :publisher_id, :tag]
102
- values = [[1, 1, 'Mystery'], [2, 1, 'Science']]
101
+ it "should import array of values successfully" do
102
+ columns = [:tag_id, :publisher_id, :tag]
103
+ values = [[1, 1, 'Mystery'], [2, 1, 'Science']]
103
104
 
104
- assert_difference "Tag.count", +2 do
105
- Tag.import columns, values, validate: false
105
+ assert_difference "Tag.count", +2 do
106
+ Tag.import columns, values, validate: false
107
+ end
106
108
  end
107
109
  end
108
110
  end
@@ -159,6 +161,13 @@ describe "#import" do
159
161
  end
160
162
  end
161
163
 
164
+ it "should ignore uniqueness validators" do
165
+ Topic.import columns, valid_values, validate: true
166
+ assert_difference "Topic.count", +2 do
167
+ Topic.import columns, valid_values, validate: true
168
+ end
169
+ end
170
+
162
171
  it "should not import invalid data" do
163
172
  assert_no_difference "Topic.count" do
164
173
  Topic.import columns, invalid_values, validate: true
@@ -589,6 +598,30 @@ describe "#import" do
589
598
  end
590
599
  end
591
600
 
601
+ context 'importing arrays of values with boolean fields' do
602
+ let(:columns) { [:author_name, :title, :for_sale] }
603
+
604
+ it 'should be able to coerce integers as boolean fields' do
605
+ Book.delete_all if Book.count > 0
606
+ values = [['Author #1', 'Book #1', 0], ['Author #2', 'Book #2', 1]]
607
+ assert_difference "Book.count", +2 do
608
+ Book.import columns, values
609
+ end
610
+ assert_equal false, Book.first.for_sale
611
+ assert_equal true, Book.last.for_sale
612
+ end
613
+
614
+ it 'should be able to coerce strings as boolean fields' do
615
+ Book.delete_all if Book.count > 0
616
+ values = [['Author #1', 'Book #1', 'false'], ['Author #2', 'Book #2', 'true']]
617
+ assert_difference "Book.count", +2 do
618
+ Book.import columns, values
619
+ end
620
+ assert_equal false, Book.first.for_sale
621
+ assert_equal true, Book.last.for_sale
622
+ end
623
+ end
624
+
592
625
  describe "importing when model has default_scope" do
593
626
  it "doesn't import the default scope values" do
594
627
  assert_difference "Widget.unscoped.count", +2 do
data/test/models/tag.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  class Tag < ActiveRecord::Base
2
- self.primary_keys = :tag_id, :publisher_id
2
+ self.primary_keys = :tag_id, :publisher_id unless ENV["SKIP_COMPOSITE_PK"]
3
3
  has_many :books, inverse_of: :tag
4
4
  end
data/test/models/topic.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  class Topic < ActiveRecord::Base
2
2
  validates_presence_of :author_name
3
3
  validates :title, numericality: { only_integer: true }, on: :context_test
4
+ validates :title, uniqueness: true
4
5
 
5
6
  has_many :books, inverse_of: :topic
6
7
  belongs_to :parent, class_name: "Topic"
@@ -161,12 +161,14 @@ ActiveRecord::Schema.define do
161
161
 
162
162
  add_index :cars, :Name, unique: true
163
163
 
164
- execute %(
165
- CREATE TABLE IF NOT EXISTS tags (
166
- tag_id INT NOT NULL,
167
- publisher_id INT NOT NULL,
168
- tag VARCHAR(50),
169
- PRIMARY KEY (tag_id, publisher_id)
170
- );
171
- ).split.join(' ').strip
164
+ unless ENV["SKIP_COMPOSITE_PK"]
165
+ execute %(
166
+ CREATE TABLE IF NOT EXISTS tags (
167
+ tag_id INT NOT NULL,
168
+ publisher_id INT NOT NULL,
169
+ tag VARCHAR(50),
170
+ PRIMARY KEY (tag_id, publisher_id)
171
+ );
172
+ ).split.join(' ').strip
173
+ end
172
174
  end
@@ -1,5 +1,6 @@
1
1
  ActiveRecord::Schema.define do
2
2
  execute('CREATE extension IF NOT EXISTS "hstore";')
3
+ execute('CREATE extension IF NOT EXISTS "pgcrypto";')
3
4
  execute('CREATE extension IF NOT EXISTS "uuid-ossp";')
4
5
 
5
6
  create_table :vendors, id: :uuid, force: :cascade do |t|
@@ -176,7 +176,7 @@ def should_support_postgresql_upsert_functionality
176
176
  # would be associated with the wrong parent.
177
177
  it ":on_duplicate_key_ignore is ignored" do
178
178
  assert_raise ActiveRecord::RecordNotUnique do
179
- Topic.import mixed_topics, recursive: true, on_duplicate_key_ignore: true
179
+ Topic.import mixed_topics, recursive: true, on_duplicate_key_ignore: true, validate: false
180
180
  end
181
181
  end
182
182
  end
@@ -12,15 +12,17 @@ def should_support_on_duplicate_key_ignore
12
12
  end
13
13
  end
14
14
 
15
- context "with composite primary keys" do
16
- it "should import array of values successfully" do
17
- columns = [:tag_id, :publisher_id, :tag]
18
- values = [[1, 1, 'Mystery'], [1, 1, 'Science']]
15
+ unless ENV["SKIP_COMPOSITE_PK"]
16
+ context "with composite primary keys" do
17
+ it "should import array of values successfully" do
18
+ columns = [:tag_id, :publisher_id, :tag]
19
+ values = [[1, 1, 'Mystery'], [1, 1, 'Science']]
19
20
 
20
- assert_difference "Tag.count", +1 do
21
- Tag.import columns, values, on_duplicate_key_ignore: true, validate: false
21
+ assert_difference "Tag.count", +1 do
22
+ Tag.import columns, values, on_duplicate_key_ignore: true, validate: false
23
+ end
24
+ assert_equal 'Mystery', Tag.first.tag
22
25
  end
23
- assert_equal 'Mystery', Tag.first.tag
24
26
  end
25
27
  end
26
28
  end
@@ -77,15 +77,17 @@ def should_support_basic_on_duplicate_key_update
77
77
  end
78
78
  end
79
79
 
80
- context "with composite primary keys" do
81
- it "should import array of values successfully" do
82
- columns = [:tag_id, :publisher_id, :tag]
83
- Tag.import columns, [[1, 1, 'Mystery']], validate: false
84
-
85
- assert_difference "Tag.count", +0 do
86
- Tag.import columns, [[1, 1, 'Science']], on_duplicate_key_update: [:tag], validate: false
80
+ unless ENV["SKIP_COMPOSITE_PK"]
81
+ context "with composite primary keys" do
82
+ it "should import array of values successfully" do
83
+ columns = [:tag_id, :publisher_id, :tag]
84
+ Tag.import columns, [[1, 1, 'Mystery']], validate: false
85
+
86
+ assert_difference "Tag.count", +0 do
87
+ Tag.import columns, [[1, 1, 'Science']], on_duplicate_key_update: [:tag], validate: false
88
+ end
89
+ assert_equal 'Science', Tag.first.tag
87
90
  end
88
- assert_equal 'Science', Tag.first.tag
89
91
  end
90
92
  end
91
93
  end
@@ -102,18 +102,20 @@ def should_support_recursive_import
102
102
  end
103
103
  end
104
104
 
105
- describe "with composite primary keys" do
106
- it "should import models and set id" do
107
- tags = []
108
- tags << Tag.new(tag_id: 1, publisher_id: 1, tag: 'Mystery')
109
- tags << Tag.new(tag_id: 2, publisher_id: 1, tag: 'Science')
105
+ unless ENV["SKIP_COMPOSITE_PK"]
106
+ describe "with composite primary keys" do
107
+ it "should import models and set id" do
108
+ tags = []
109
+ tags << Tag.new(tag_id: 1, publisher_id: 1, tag: 'Mystery')
110
+ tags << Tag.new(tag_id: 2, publisher_id: 1, tag: 'Science')
110
111
 
111
- assert_difference "Tag.count", +2 do
112
- Tag.import tags
113
- end
112
+ assert_difference "Tag.count", +2 do
113
+ Tag.import tags
114
+ end
114
115
 
115
- assert_equal 1, tags[0].tag_id
116
- assert_equal 2, tags[1].tag_id
116
+ assert_equal 1, tags[0].tag_id
117
+ assert_equal 2, tags[1].tag_id
118
+ end
117
119
  end
118
120
  end
119
121
 
data/test/test_helper.rb CHANGED
@@ -26,7 +26,12 @@ end
26
26
 
27
27
  require 'timecop'
28
28
  require 'chronic'
29
- require 'composite_primary_keys'
29
+
30
+ begin
31
+ require 'composite_primary_keys'
32
+ rescue LoadError
33
+ ENV["SKIP_COMPOSITE_PK"] = "true"
34
+ end
30
35
 
31
36
  require "ruby-debug" if RUBY_VERSION.to_f < 1.9
32
37
 
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.17.2
4
+ version: 0.18.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: 2017-03-14 00:00:00.000000000 Z
11
+ date: 2017-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -73,6 +73,7 @@ files:
73
73
  - gemfiles/4.1.gemfile
74
74
  - gemfiles/4.2.gemfile
75
75
  - gemfiles/5.0.gemfile
76
+ - gemfiles/5.1.gemfile
76
77
  - lib/activerecord-import.rb
77
78
  - lib/activerecord-import/active_record/adapters/abstract_adapter.rb
78
79
  - lib/activerecord-import/active_record/adapters/jdbcmysql_adapter.rb
@@ -175,7 +176,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
175
176
  version: '0'
176
177
  requirements: []
177
178
  rubyforge_project:
178
- rubygems_version: 2.6.2
179
+ rubygems_version: 2.6.11
179
180
  signing_key:
180
181
  specification_version: 4
181
182
  summary: Bulk insert extension for ActiveRecord