activerecord-import 0.17.2 → 0.18.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: 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