mass_insert 0.1.1 → 0.1.2
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.
- data/.gitignore +2 -0
- data/.travis.yml +10 -0
- data/Gemfile +0 -2
- data/README.md +15 -23
- data/Rakefile +22 -33
- data/lib/mass_insert.rb +11 -7
- data/lib/mass_insert/base.rb +22 -58
- data/lib/mass_insert/builder/adapters.rb +16 -0
- data/lib/mass_insert/builder/adapters/adapter.rb +65 -0
- data/lib/mass_insert/builder/adapters/helpers/abstract_query.rb +52 -0
- data/lib/mass_insert/builder/adapters/helpers/column_value.rb +90 -0
- data/lib/mass_insert/builder/adapters/mysql2_adapter.rb +15 -0
- data/lib/mass_insert/builder/adapters/postgresql_adapter.rb +7 -0
- data/lib/mass_insert/builder/adapters/sqlite3_adapter.rb +27 -0
- data/lib/mass_insert/builder/adapters/sqlserver_adapter.rb +26 -0
- data/lib/mass_insert/builder/base.rb +28 -0
- data/lib/mass_insert/builder/utilities.rb +13 -0
- data/lib/mass_insert/executer.rb +13 -0
- data/lib/mass_insert/process.rb +24 -0
- data/lib/mass_insert/result.rb +33 -0
- data/lib/mass_insert/version.rb +1 -1
- data/mass_insert.gemspec +2 -2
- data/spec/adapters/column_types/binary_spec.rb +64 -0
- data/spec/adapters/column_types/boolean_spec.rb +48 -0
- data/spec/adapters/column_types/decimal_spec.rb +59 -0
- data/spec/adapters/column_types/integer_spec.rb +59 -0
- data/spec/adapters/column_types/string_spec.rb +46 -0
- data/spec/{active_record_models → adapters}/model_spec.rb +1 -21
- data/spec/{active_record_dummy → dummy}/.gitignore +0 -0
- data/spec/{active_record_dummy → dummy}/Gemfile +1 -1
- data/spec/{active_record_dummy → dummy}/README.rdoc +0 -0
- data/spec/{active_record_dummy → dummy}/Rakefile +0 -0
- data/spec/{active_record_dummy → dummy}/app/assets/images/rails.png +0 -0
- data/spec/{active_record_dummy → dummy}/app/assets/javascripts/application.js +0 -0
- data/spec/{active_record_dummy → dummy}/app/assets/stylesheets/application.css +0 -0
- data/spec/{active_record_dummy → dummy}/app/controllers/application_controller.rb +0 -0
- data/spec/{active_record_dummy → dummy}/app/helpers/application_helper.rb +0 -0
- data/spec/{active_record_dummy → dummy}/app/mailers/.gitkeep +0 -0
- data/spec/{active_record_dummy → dummy}/app/models/.gitkeep +0 -0
- data/spec/{active_record_dummy → dummy}/app/models/user.rb +0 -0
- data/spec/{active_record_dummy → dummy}/app/views/layouts/application.html.erb +0 -0
- data/spec/{active_record_dummy → dummy}/config.ru +0 -0
- data/spec/{active_record_dummy → dummy}/config/application.rb +0 -0
- data/spec/{active_record_dummy → dummy}/config/boot.rb +0 -0
- data/spec/{active_record_dummy → dummy}/config/database.yml +3 -8
- data/spec/{active_record_dummy → dummy}/config/environment.rb +0 -0
- data/spec/{active_record_dummy → dummy}/config/environments/development.rb +0 -0
- data/spec/{active_record_dummy → dummy}/config/environments/mysql2.rb +0 -0
- data/spec/{active_record_dummy → dummy}/config/environments/postgresql.rb +0 -0
- data/spec/{active_record_dummy → dummy}/config/environments/production.rb +0 -0
- data/spec/{active_record_dummy → dummy}/config/environments/sqlite3.rb +0 -0
- data/spec/{active_record_dummy → dummy}/config/environments/test.rb +0 -0
- data/spec/{active_record_dummy → dummy}/config/initializers/backtrace_silencers.rb +0 -0
- data/spec/{active_record_dummy → dummy}/config/initializers/inflections.rb +0 -0
- data/spec/{active_record_dummy → dummy}/config/initializers/mime_types.rb +0 -0
- data/spec/{active_record_dummy → dummy}/config/initializers/secret_token.rb +0 -0
- data/spec/{active_record_dummy → dummy}/config/initializers/session_store.rb +0 -0
- data/spec/{active_record_dummy → dummy}/config/initializers/wrap_parameters.rb +0 -0
- data/spec/{active_record_dummy → dummy}/config/locales/en.yml +0 -0
- data/spec/{active_record_dummy → dummy}/config/routes.rb +0 -0
- data/spec/{active_record_dummy → dummy}/db/migrate/20130412154541_create_users.rb +0 -0
- data/spec/{active_record_dummy → dummy}/db/schema.rb +0 -0
- data/spec/{active_record_dummy → dummy}/db/seeds.rb +0 -0
- data/spec/{active_record_dummy → dummy}/lib/assets/.gitkeep +0 -0
- data/spec/{active_record_dummy → dummy}/lib/tasks/.gitkeep +0 -0
- data/spec/{active_record_dummy → dummy}/log/.gitkeep +0 -0
- data/spec/{active_record_dummy → dummy}/public/404.html +0 -0
- data/spec/{active_record_dummy → dummy}/public/422.html +0 -0
- data/spec/{active_record_dummy → dummy}/public/500.html +0 -0
- data/spec/{active_record_dummy → dummy}/public/favicon.ico +0 -0
- data/spec/{active_record_dummy → dummy}/public/index.html +0 -0
- data/spec/{active_record_dummy → dummy}/public/robots.txt +0 -0
- data/spec/{active_record_dummy → dummy}/script/rails +0 -0
- data/spec/{active_record_dummy → dummy}/vendor/assets/javascripts/.gitkeep +0 -0
- data/spec/{active_record_dummy → dummy}/vendor/assets/stylesheets/.gitkeep +0 -0
- data/spec/{active_record_dummy → dummy}/vendor/plugins/.gitkeep +0 -0
- data/spec/lib/mass_insert/base_spec.rb +40 -0
- data/spec/lib/mass_insert/builder/adapters/adapter_spec.rb +129 -0
- data/spec/lib/mass_insert/builder/adapters/helpers/abstract_query_spec.rb +130 -0
- data/spec/{mass_insert/adapters/adapter_helpers → lib/mass_insert/builder/adapters/helpers}/column_value_spec.rb +42 -94
- data/spec/lib/mass_insert/builder/adapters/mysql_adapter_spec.rb +15 -0
- data/spec/lib/mass_insert/builder/adapters/postgresql_adapter_spec.rb +9 -0
- data/spec/lib/mass_insert/builder/adapters/sqlite3_adapter_spec.rb +52 -0
- data/spec/lib/mass_insert/builder/adapters/sqlserver_adapter_spec.rb +38 -0
- data/spec/lib/mass_insert/builder/adapters_spec.rb +31 -0
- data/spec/lib/mass_insert/builder/base_spec.rb +28 -0
- data/spec/lib/mass_insert/builder/utilities_spec.rb +11 -0
- data/spec/lib/mass_insert/executer_spec.rb +33 -0
- data/spec/lib/mass_insert/process_spec.rb +44 -0
- data/spec/lib/mass_insert/result_spec.rb +45 -0
- data/spec/lib/mass_insert_spec.rb +35 -0
- data/spec/spec_helper.rb +7 -2
- data/spec/support/mass_insert_support.rb +12 -0
- metadata +160 -163
- data/lib/mass_insert/adapters.rb +0 -10
- data/lib/mass_insert/adapters/adapter.rb +0 -26
- data/lib/mass_insert/adapters/adapter_helpers.rb +0 -11
- data/lib/mass_insert/adapters/adapter_helpers/abstract_query.rb +0 -56
- data/lib/mass_insert/adapters/adapter_helpers/column_value.rb +0 -110
- data/lib/mass_insert/adapters/adapter_helpers/sanitizer.rb +0 -21
- data/lib/mass_insert/adapters/adapter_helpers/timestamp.rb +0 -33
- data/lib/mass_insert/adapters/mysql2_adapter.rb +0 -13
- data/lib/mass_insert/adapters/postgresql_adapter.rb +0 -5
- data/lib/mass_insert/adapters/sqlite3_adapter.rb +0 -37
- data/lib/mass_insert/adapters/sqlserver_adapter.rb +0 -29
- data/lib/mass_insert/process_control.rb +0 -46
- data/lib/mass_insert/query_builder.rb +0 -39
- data/lib/mass_insert/query_execution.rb +0 -29
- data/spec/active_record_models/column_types/binary_spec.rb +0 -60
- data/spec/active_record_models/column_types/boolean_spec.rb +0 -52
- data/spec/active_record_models/column_types/decimal_spec.rb +0 -49
- data/spec/active_record_models/column_types/integer_spec.rb +0 -49
- data/spec/active_record_models/column_types/string_spec.rb +0 -50
- data/spec/dummy_models/test.rb +0 -5
- data/spec/mass_insert/adapters/adapter_helpers/abstract_query_spec.rb +0 -119
- data/spec/mass_insert/adapters/adapter_helpers/sanitizer_spec.rb +0 -46
- data/spec/mass_insert/adapters/adapter_helpers/timestamp_spec.rb +0 -75
- data/spec/mass_insert/adapters/adapter_helpers_spec.rb +0 -24
- data/spec/mass_insert/adapters/adapter_spec.rb +0 -79
- data/spec/mass_insert/adapters/mysql_adapter_spec.rb +0 -22
- data/spec/mass_insert/adapters/postgresql_adapter_spec.rb +0 -11
- data/spec/mass_insert/adapters/sqlite3_adapter_spec.rb +0 -84
- data/spec/mass_insert/adapters/sqlserver_adapter_spec.rb +0 -61
- data/spec/mass_insert/adapters_spec.rb +0 -32
- data/spec/mass_insert/base_spec.rb +0 -114
- data/spec/mass_insert/process_control_spec.rb +0 -125
- data/spec/mass_insert/query_builder_spec.rb +0 -84
- data/spec/mass_insert/query_execution_spec.rb +0 -50
- data/spec/mass_insert_spec.rb +0 -28
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "Integer" do
|
|
4
|
+
let!(:values){ [{}] }
|
|
5
|
+
let!(:options){ Hash.new }
|
|
6
|
+
|
|
7
|
+
context "when contains an integer" do
|
|
8
|
+
it "saves the value correctly" do
|
|
9
|
+
values.first.merge!(age: 20)
|
|
10
|
+
User.mass_insert(values, options)
|
|
11
|
+
expect(User.last.age).to eq(20)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
context "when contains a string without digits" do
|
|
16
|
+
it "converts string value to integer" do
|
|
17
|
+
values.first.merge!(age: "string")
|
|
18
|
+
User.mass_insert(values, options)
|
|
19
|
+
expect(User.last.age).to eq(0)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
context "when contains a digits string" do
|
|
24
|
+
it "converts string value to integer" do
|
|
25
|
+
values.first.merge!(age: "100")
|
|
26
|
+
User.mass_insert(values, options)
|
|
27
|
+
expect(User.last.age).to eq(100)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "converts string value to integer" do
|
|
31
|
+
values.first.merge!(age: "200.45")
|
|
32
|
+
User.mass_insert(values, options)
|
|
33
|
+
expect(User.last.age).to eq(200)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
context "when contains a decimal" do
|
|
38
|
+
it "converts decimal value to integer" do
|
|
39
|
+
values.first.merge!(age: 25.69)
|
|
40
|
+
User.mass_insert(values, options)
|
|
41
|
+
expect(User.last.age).to eq(25)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
context "when contains a boolean" do
|
|
46
|
+
it "raises an exception" do
|
|
47
|
+
values.first.merge!(age: true)
|
|
48
|
+
expect(lambda{ User.mass_insert(values, options) }).to raise_exception
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
context "when not exist in values hashes" do
|
|
53
|
+
it "saves the default value" do
|
|
54
|
+
values.first.delete(:age)
|
|
55
|
+
User.mass_insert(values, options)
|
|
56
|
+
expect(User.last.age).to eq(nil)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "String" do
|
|
4
|
+
let!(:values){ [{}] }
|
|
5
|
+
let!(:options){ Hash.new }
|
|
6
|
+
|
|
7
|
+
context "when contains a string" do
|
|
8
|
+
it "saves the value correctly" do
|
|
9
|
+
values.first.merge!(name: "name")
|
|
10
|
+
User.mass_insert(values, options)
|
|
11
|
+
expect(User.last.name).to eq("name")
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
context "when contains a integer" do
|
|
16
|
+
it "converts integer value to string" do
|
|
17
|
+
values.first.merge!(name: 10)
|
|
18
|
+
User.mass_insert(values, options)
|
|
19
|
+
expect(User.last.name).to eq("10")
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
context "when contains a decimal" do
|
|
24
|
+
it "converts decimal value to string" do
|
|
25
|
+
values.first.merge!(name: 25.69)
|
|
26
|
+
User.mass_insert(values, options)
|
|
27
|
+
expect(User.last.name).to eq("25.69")
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context "when contains a boolean" do
|
|
32
|
+
it "converts boolean value to string" do
|
|
33
|
+
values.first.merge!(name: true)
|
|
34
|
+
User.mass_insert(values, options)
|
|
35
|
+
expect(User.last.name).to eq("true")
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
context "when not exist in values hashes" do
|
|
40
|
+
it "saves the default value" do
|
|
41
|
+
values.first.delete(:name)
|
|
42
|
+
User.mass_insert(values, options)
|
|
43
|
+
expect(User.last.name).to eq(nil)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
require '
|
|
2
|
-
require "./lib/mass_insert"
|
|
3
|
-
require "./spec/dummy_models/test"
|
|
1
|
+
require 'spec_helper'
|
|
4
2
|
|
|
5
3
|
describe "Model" do
|
|
6
4
|
|
|
@@ -82,22 +80,4 @@ describe "Model" do
|
|
|
82
80
|
expect(User.count).to eq(1200)
|
|
83
81
|
end
|
|
84
82
|
end
|
|
85
|
-
|
|
86
|
-
context "when is used with options" do
|
|
87
|
-
context "when the table name doesn't exit" do
|
|
88
|
-
it "should not save any record" do
|
|
89
|
-
5.times{ @values << @value_hash }
|
|
90
|
-
@options.merge!(:table_name => "countries")
|
|
91
|
-
expect(lambda{ User.mass_insert(@values, @options) }).to raise_exception
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
context "when the class name not inherit from ActiveRecord" do
|
|
96
|
-
it "should not save any record" do
|
|
97
|
-
5.times{ @values << @value_hash }
|
|
98
|
-
@options.merge!(:class_name => Test)
|
|
99
|
-
expect(lambda{ User.mass_insert(@values, @options) }).to raise_exception
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
83
|
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -11,24 +11,19 @@
|
|
|
11
11
|
mysql2:
|
|
12
12
|
adapter: mysql2
|
|
13
13
|
database: mysql2_test
|
|
14
|
-
|
|
15
|
-
password: D3s4rr0ll0$.
|
|
16
|
-
pool: 5
|
|
17
|
-
timeout: 5000
|
|
14
|
+
username: travis
|
|
18
15
|
encoding: utf8
|
|
19
16
|
|
|
20
17
|
postgresql:
|
|
21
18
|
adapter: postgresql
|
|
22
19
|
database: postgresql_test
|
|
23
|
-
|
|
24
|
-
timeout: 5000
|
|
20
|
+
username: postgres
|
|
25
21
|
encoding: utf8
|
|
26
22
|
|
|
27
23
|
sqlite3:
|
|
28
24
|
adapter: sqlite3
|
|
29
25
|
database: db/development.sqlite3
|
|
30
|
-
|
|
31
|
-
timeout: 5000
|
|
26
|
+
encoding: utf8
|
|
32
27
|
|
|
33
28
|
|
|
34
29
|
# Warning: The database defined as "test" will be erased and
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe MassInsert::Base do
|
|
4
|
+
let!(:values) { [{name: "name"}] }
|
|
5
|
+
let!(:options){ {option: "value"} }
|
|
6
|
+
|
|
7
|
+
before :each do
|
|
8
|
+
MassInsert::Process.any_instance.stub(:start)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe ".mass_insert" do
|
|
12
|
+
it "can receive values and options" do
|
|
13
|
+
expect{ User.mass_insert(values, options) }.to_not raise_error
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "can receive only values" do
|
|
17
|
+
expect{ User.mass_insert(values) }.to_not raise_error
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "can't be called without params" do
|
|
21
|
+
expect{ User.mass_insert }.to raise_error
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe ".mass_insert_results" do
|
|
26
|
+
before :each do
|
|
27
|
+
User.mass_insert(values, options)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "returns a MassInsert::Result instance" do
|
|
31
|
+
expect(User.mass_insert_results).to be_an_instance_of(MassInsert::Result)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "calls MassInsert::Result.new with mass_insert process" do
|
|
35
|
+
process = User.instance_variable_get(:@mass_insert_process)
|
|
36
|
+
MassInsert::Result.should_receive(:new).with(process).exactly(1).times
|
|
37
|
+
User.mass_insert_results
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe MassInsert::Builder::Adapters::Adapter do
|
|
4
|
+
let!(:subject){ described_class.new([], {}) }
|
|
5
|
+
|
|
6
|
+
describe "#initialize" do
|
|
7
|
+
it "initializes values" do
|
|
8
|
+
expect(subject.values).to eq([])
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "initializes options" do
|
|
12
|
+
expect(subject.options).to eq({})
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe "#class_name" do
|
|
17
|
+
it "returns class_name option value" do
|
|
18
|
+
subject.options = {:class_name => "FakeModel"}
|
|
19
|
+
expect(subject.class_name).to eq("FakeModel")
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe "#primary_key" do
|
|
24
|
+
it "returns primary_key option value" do
|
|
25
|
+
subject.options = {:primary_key => true}
|
|
26
|
+
expect(subject.primary_key).to be_true
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe "#each_slice" do
|
|
31
|
+
it "returns each_slice option value" do
|
|
32
|
+
subject.options = {:each_slice => 10000}
|
|
33
|
+
expect(subject.each_slice).to be 10000
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe "#columns" do
|
|
38
|
+
context "when instance columns variable isn't defined" do
|
|
39
|
+
it "returns sanitized_columns result" do
|
|
40
|
+
subject.stub(:sanitized_columns).and_return("sanitized_columns")
|
|
41
|
+
expect(subject.columns).to eq("sanitized_columns")
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
context "when instance columns variable has been defined" do
|
|
46
|
+
it "returns instance columns variable" do
|
|
47
|
+
subject.stub(:sanitized_columns).and_return("sanitized_columns")
|
|
48
|
+
subject.columns
|
|
49
|
+
subject.stub(:sanitized_columns).and_return("sanitized_columns_other")
|
|
50
|
+
expect(subject.columns).to eq("sanitized_columns")
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
describe "#sanitized_columns" do
|
|
56
|
+
before :each do
|
|
57
|
+
subject.options.merge!({:class_name => User})
|
|
58
|
+
User.stub(:column_names).and_return(["id", "name", "email"])
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context "when primary_key is false" do
|
|
62
|
+
it "returns the columns array without primary key column" do
|
|
63
|
+
subject.options.merge!({:primary_key => false})
|
|
64
|
+
expect(subject.columns).to eq([:name, :email])
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
context "when primary key is true" do
|
|
69
|
+
it "returns the columns array with primary key column" do
|
|
70
|
+
subject.options.merge!({:primary_key => true})
|
|
71
|
+
expect(subject.columns).to eq([:id, :name, :email])
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
describe "#timestamp?" do
|
|
77
|
+
context "when respond to timestamp columns" do
|
|
78
|
+
it "returns true" do
|
|
79
|
+
subject.stub(:columns).and_return([:updated_at, :created_at])
|
|
80
|
+
expect(subject.timestamp?).to be_true
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
context "when doesn't respond to timestamp columns" do
|
|
85
|
+
it "returns false" do
|
|
86
|
+
subject.stub(:columns).and_return([:created_at])
|
|
87
|
+
expect(subject.timestamp?).to be_false
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
describe "#timestamp_format" do
|
|
93
|
+
it "returns default timestamp format" do
|
|
94
|
+
expect(subject.timestamp_format).to eq("%Y-%m-%d %H:%M:%S.%6N")
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
describe "#timestamp" do
|
|
99
|
+
it "returns default timestamp value with correct format" do
|
|
100
|
+
subject.stub(:timestamp_format).and_return("%Y-%m-%d %H:%M:%S")
|
|
101
|
+
expect(subject.timestamp).to eq(Time.now.strftime("%Y-%m-%d %H:%M:%S"))
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
describe "#timestamp_hash" do
|
|
106
|
+
it "returns a timestamp hash" do
|
|
107
|
+
timestamp = Time.now.strftime("%Y-%m-%d %H:%M:%S")
|
|
108
|
+
subject.stub(:timestamp).and_return(timestamp)
|
|
109
|
+
expect(subject.timestamp_hash).to eq({:created_at => timestamp, :updated_at => timestamp})
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
describe "#values_per_insertion" do
|
|
114
|
+
context "when each_slice option is not false" do
|
|
115
|
+
it "returns each_slice value" do
|
|
116
|
+
subject.options.merge!(each_slice: 10)
|
|
117
|
+
expect(subject.values_per_insertion).to eq(10)
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
context "when each_slice option is false" do
|
|
122
|
+
it "returns length of values" do
|
|
123
|
+
subject.values = [{}, {}]
|
|
124
|
+
subject.options.merge!(each_slice: false)
|
|
125
|
+
expect(subject.values_per_insertion).to eq(2)
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|