mass_insert 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Zjc0YmM2NTg0MTRmYjg2NWQyNTcxMWQzZjdhY2VmMzVjOGE1ODFlNg==
5
+ data.tar.gz: !binary |-
6
+ ZTE4MGExN2IwY2NmOTBkYTUwNmVmYzNjZDZkM2IxZTNhMmY1MmYyNw==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ NzM2ZjNiODg1ODFkYjk0ZmJlM2Y1NGQ2MmI3Zjg1N2ZkYzU2OTBjMDM5MTUx
10
+ OTQxZDI4MTEyZGI2MTFjZWI5NzJiMWE2YzQxMTJiZTliZWYyMzIyOTEzNTkx
11
+ ZWE0MTZkYjIxODE2ZDMyYTJkMDE0Mzg4NTRhZDQ2MmVlNDNiZDM=
12
+ data.tar.gz: !binary |-
13
+ M2Q1MjFlYmVhNzc2ZDRlNDY4MTM0MTk3NjA0ODg4NDNkYmMwZDU4YjJkNWZm
14
+ N2IxZTZhMTI3MGFiNjI3Y2RjZGM1ZWUyYzNlODlkOTEzMDliMzM3ZjA2NzAz
15
+ MTA0ZmVjMmExNjNmNWYwNDE3MTRiNmJkYzMxYTEzMjI1OGMzYmU=
data/.rvmrc CHANGED
@@ -6,11 +6,11 @@
6
6
  # First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
7
7
  # Only full ruby name is supported here, for short names use:
8
8
  # echo "rvm use 1.9.3" > .rvmrc
9
- environment_id="ruby-1.9.3-p392@mass_insert"
9
+ environment_id="ruby-1.9.3-p484@mass_insert"
10
10
 
11
11
  # Uncomment the following lines if you want to verify rvm version per project
12
- # rvmrc_rvm_version="1.19.1 (stable)" # 1.10.1 seams as a safe start
13
- # eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
12
+ # rvmrc_rvm_version="1.25.14 (stable)" # 1.10.1 seems like a safe start
13
+ # eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | __rvm_awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
14
14
  # echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
15
15
  # return 1
16
16
  # }
@@ -30,6 +30,15 @@ then
30
30
  fi
31
31
  done
32
32
  unset __hook
33
+ if (( ${rvm_use_flag:=1} >= 2 )) # display only when forced
34
+ then
35
+ if [[ $- == *i* ]] # check for interactive shells
36
+ then printf "%b" "Using: $(tput setaf 2 2>/dev/null)$GEM_HOME$(tput sgr0 2>/dev/null)
37
+ " # show the user the ruby and gemset they are using in green
38
+ else printf "%b" "Using: $GEM_HOME
39
+ " # don't use colors in non-interactive shells
40
+ fi
41
+ fi
33
42
  else
34
43
  # If the environment file has not yet been created, use the RVM CLI to select.
35
44
  rvm --create "$environment_id" || {
@@ -41,7 +50,7 @@ fi
41
50
  # If you use bundler, this might be useful to you:
42
51
  # if [[ -s Gemfile ]] && {
43
52
  # ! builtin command -v bundle >/dev/null ||
44
- # builtin command -v bundle | GREP_OPTIONS= \grep $rvm_path/bin/bundle >/dev/null
53
+ # builtin command -v bundle | GREP_OPTIONS="" \grep $rvm_path/bin/bundle >/dev/null
45
54
  # }
46
55
  # then
47
56
  # printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
@@ -49,5 +58,5 @@ fi
49
58
  # fi
50
59
  # if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
51
60
  # then
52
- # bundle install | GREP_OPTIONS= \grep -vE '^Using|Your bundle is complete'
61
+ # bundle install | GREP_OPTIONS="" \grep -vE '^Using|Your bundle is complete'
53
62
  # fi
data/Gemfile CHANGED
@@ -9,3 +9,4 @@ gem "pg"
9
9
  gem "rspec"
10
10
  gem "simplecov"
11
11
  gem "rake"
12
+ gem "coveralls", require: false
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
- # MassInsert [![Build Status](https://travis-ci.org/alejandrogutierrez/mass_insert.png?branch=master)](https://travis-ci.org/alejandrogutierrez/mass_insert)
1
+ # MassInsert [![Build Status](https://travis-ci.org/alejandrogutierrez/mass_insert.png?branch=master)](https://travis-ci.org/alejandrogutierrez/mass_insert) [![Coverage Status](https://coveralls.io/repos/alejandrogutierrez/mass_insert/badge.png)](https://coveralls.io/r/alejandrogutierrez/mass_insert)
2
2
 
3
3
  This gem aims to provide an easy and faster way to do single database insertions in Rails.
4
- Support Mysql, PostgreSQL and SQLite3 adapters.
4
+ Support Mysql, PostgreSQL and SQLite3 adapters. It depends on ActiveRecord.
5
5
 
6
6
  ## Installation
7
7
 
@@ -25,7 +25,7 @@ Faster. It's depending of the computer but these are some results...
25
25
 
26
26
  ## Attention
27
27
 
28
- Since this is a single database insertion your model validation will be ignored, then if you use this gem you need to be sure that information is OK to be persisted.
28
+ Since this is a single database insertion your model validations will be ignored, then if you use this gem you need to be sure that information is OK to be persisted.
29
29
 
30
30
  ## Basic Usage
31
31
 
@@ -53,7 +53,7 @@ And call mass_insert method from your model:
53
53
 
54
54
  ## Results
55
55
 
56
- Sometimes after MassInsert process you need to see some necessary information about the process. MassInsert gem provides a simple way to do it. Just call the next methods from your model after MassInsert execution.
56
+ Sometimes after MassInsert process you need to see information about the process. MassInsert provides a simple way to do it. Just call the next methods from your model after MassInsert execution.
57
57
 
58
58
  User.mass_insert_results.records # => 120000
59
59
 
@@ -67,7 +67,7 @@ Some result options are...
67
67
 
68
68
  ## Options
69
69
 
70
- MassInsert accepts options hash by second param when you call `mass_insert` from your model. This options allow you to configure the way that the records will be created. Example...
70
+ MassInsert accepts options hash by second param when you call `mass_insert` from your model. These options allow you to configure the way that records will be persisted. Example...
71
71
 
72
72
  options = {
73
73
  :some_option => some_value,
@@ -84,13 +84,13 @@ Some options you can include are...
84
84
 
85
85
  **Primary key**
86
86
 
87
- By default primary key is ignored. If you wish primary key doesn't be ignored you need to pass the `primary_key` option on true. Example...
87
+ By default primary key is generated automatically. If you wish to set primary key manually you need to pass the `primary_key` option on true. Example...
88
88
 
89
89
  User.mass_insert(values, :primary_key => true)
90
90
 
91
91
  **Each slice**
92
92
 
93
- Due you can get a database timeout error you can specify that the insertion will be in batches. You need to pass the `each_slice` option with the records per batch. Example...
93
+ Due you can get a database timeout error you can specify that the insertion will be in batches. Just pass the `each_slice` option with the records per batch. Example...
94
94
 
95
95
  User.mass_insert(values, :each_slice => 10000)
96
96
 
@@ -26,7 +26,7 @@ module MassInsert
26
26
  # By default primary key is ignored. If you wish primary key doesn't
27
27
  # be ignored you need to pass the primary_key option on true.
28
28
  #
29
- # options = {:primary_key => true}
29
+ # User.mass_insert(values, :primary_key => true)
30
30
  #
31
31
  # === Each slice
32
32
  #
@@ -50,6 +50,36 @@ module MassInsert
50
50
 
51
51
  module ClassMethods
52
52
 
53
+ # == Results
54
+ #
55
+ # Sometimes after MassInsert process you need to see information about
56
+ # the process. MassInsert provides a simple way to do it. Just call the
57
+ # next methods from your model after MassInsert execution:
58
+ #
59
+ # === Records
60
+ #
61
+ # Returns the amount of records that were persisted.
62
+ #
63
+ # User.mass_insert_results.records # => 120000
64
+ #
65
+ # === Time
66
+ #
67
+ # Returns the time that took to do all the MassInsert process.
68
+ #
69
+ # User.mass_insert_results.time # => 0.67
70
+ #
71
+ # === Building time
72
+ #
73
+ # Returns the time that took to create the query string that was persisted.
74
+ #
75
+ # User.mass_insert_results.building_time # => 0.58
76
+ #
77
+ # === Execution time
78
+ #
79
+ # Returns the time that took to execute the query string that was persisted.
80
+ #
81
+ # User.mass_insert_results.execution_time # => 0.09
82
+ #
53
83
  def mass_insert_results
54
84
  Result.new(@mass_insert_process)
55
85
  end
@@ -34,23 +34,10 @@ module MassInsert
34
34
  columns.include?(:created_at) && columns.include?(:updated_at)
35
35
  end
36
36
 
37
- # Returns timestamp format according to the database adapter. This
38
- # function can be overwrite in database adapters classes.
39
- def timestamp_format
40
- "%Y-%m-%d %H:%M:%S.%6N"
41
- end
42
-
43
- # Returns the timestamp value according to the correct timestamp
44
- # format to that database engine.
45
- def timestamp
46
- Time.now.strftime(timestamp_format)
47
- end
48
-
49
37
  # Returns the timestamp hash to be merge into row values that will
50
38
  # be saved in the database.
51
39
  def timestamp_hash
52
- timestamp_value = timestamp
53
- {:created_at => timestamp_value, :updated_at => timestamp_value}
40
+ {:created_at => Time.now, :updated_at => Time.now}
54
41
  end
55
42
 
56
43
  # Returns the amount of records to each query. Tries to take the
@@ -40,7 +40,7 @@ module MassInsert
40
40
  # insertion value. It'll generate an array with queries.
41
41
  def execute
42
42
  @values.each_slice(values_per_insertion).map do |slice|
43
- @values = slice;
43
+ @values = slice
44
44
  "#{begin_string}#{string_columns}#{string_values}"
45
45
  end
46
46
  end
@@ -48,11 +48,19 @@ module MassInsert
48
48
  end
49
49
  alias :column_value_text :column_value_string
50
50
  alias :column_value_date :column_value_string
51
- alias :column_value_time :column_value_string
52
- alias :column_value_datetime :column_value_string
53
- alias :column_value_timestamp :column_value_string
54
51
  alias :column_value_binary :column_value_string
55
52
 
53
+ def column_value_time
54
+ case Utilities.adapter
55
+ when 'mysql2' then format = "%Y-%m-%d %H:%M:%S"
56
+ when 'sqlserver' then format = "%Y-%m-%d %H:%M:%S.%3N"
57
+ else format = "%Y-%m-%d %H:%M:%S.%6N"
58
+ end
59
+ "'#{column_value.strftime(format)}'"
60
+ end
61
+ alias :column_value_timestamp :column_value_time
62
+ alias :column_value_datetime :column_value_time
63
+
56
64
  # Returns the correct value to integer column.
57
65
  def column_value_integer
58
66
  column_value.to_i.to_s
@@ -67,21 +75,13 @@ module MassInsert
67
75
  # Returns the correct value to boolean column. This column calls
68
76
  # the correct method according to the database adapter.
69
77
  def column_value_boolean
70
- self.send(:"#{Utilities.adapter}_column_value_boolean")
71
- end
72
-
73
- # Returns the column value to boolean column to mysql, postgresql
74
- # and sqlserver databases.
75
- def mysql2_column_value_boolean
76
- column_value ? "true" : "false"
77
- end
78
- alias :postgresql_column_value_boolean :mysql2_column_value_boolean
79
-
80
- # Returns the column value to boolean column to sqlite database.
81
- def sqlite3_column_value_boolean
82
- column_value ? "1" : "0"
78
+ case Utilities.adapter
79
+ when 'mysql2', 'postgresql'
80
+ column_value ? "true" : "false"
81
+ when 'sqlite3', 'sqlserver'
82
+ column_value ? "1" : "0"
83
+ end
83
84
  end
84
- alias :sqlserver_column_value_boolean :sqlite3_column_value_boolean
85
85
 
86
86
  end
87
87
  end
@@ -1,15 +1,7 @@
1
1
  module MassInsert
2
2
  module Builder
3
3
  module Adapters
4
- class Mysql2Adapter < Adapter
5
-
6
- # The method is overwrited because the timestamp format to mysql
7
- # adapter does not need accuracy with nanoseconds.
8
- def timestamp_format
9
- "%Y-%m-%d %H:%M:%S"
10
- end
11
-
12
- end
4
+ class Mysql2Adapter < Adapter; end
13
5
  end
14
6
  end
15
7
  end
@@ -14,12 +14,6 @@ module MassInsert
14
14
  each_slice || 1000
15
15
  end
16
16
 
17
- # The method is overwrited because the timestamp format to SQLServer
18
- # adapter needs accuracy with three nanoseconds.
19
- def timestamp_format
20
- "%Y-%m-%d %H:%M:%S.%3N"
21
- end
22
-
23
17
  end
24
18
  end
25
19
  end
@@ -2,6 +2,15 @@ module MassInsert
2
2
  module Builder
3
3
  class Base
4
4
 
5
+ # Supported adapters hash. Key is the adapter name and value
6
+ # is its adapter class.
7
+ ADAPTERS = {
8
+ 'mysql2' => Adapters::Mysql2Adapter,
9
+ 'postgresql' => Adapters::PostgreSQLAdapter,
10
+ 'sqlite3' => Adapters::SQLite3Adapter,
11
+ 'sqlserver' => Adapters::SQLServerAdapter
12
+ }
13
+
5
14
  # This function gets the correct adapter class and returns the
6
15
  # sql string ready to be executed.
7
16
  def build values, options
@@ -11,16 +20,7 @@ module MassInsert
11
20
  # Returns the class of the correct database adapter according to the
12
21
  # database engine that is used in Rails project.
13
22
  def adapter_class
14
- case Utilities.adapter
15
- when "mysql2"
16
- Adapters::Mysql2Adapter
17
- when "postgresql"
18
- Adapters::PostgreSQLAdapter
19
- when "sqlite3"
20
- Adapters::SQLite3Adapter
21
- when "sqlserver"
22
- Adapters::SQLServerAdapter
23
- end
23
+ ADAPTERS[Utilities.adapter]
24
24
  end
25
25
 
26
26
  end
@@ -8,17 +8,26 @@ module MassInsert
8
8
  @options = options
9
9
  end
10
10
 
11
- # Calls the necessary methods to complete the mass insertion process
12
- # and the time that each method takes being executed.
13
11
  def start
12
+ # MassInsert process is completed by two actions. The first one
13
+ # gets queries that will be persisted.
14
14
  @building_time = Benchmark.measure do
15
- @queries = Builder::Base.new.build(@values, @options)
15
+ @queries = builder.build(@values, @options)
16
16
  end
17
17
 
18
+ # The second one executes queries into the database using an
19
+ # ActiveRecord connection.
18
20
  @execution_time = Benchmark.measure do
19
- Executer.new.execute(@queries)
21
+ executer.execute(@queries)
20
22
  end
21
23
  end
22
24
 
25
+ def builder
26
+ @builder ||= Builder::Base.new
27
+ end
28
+
29
+ def executer
30
+ @executer ||= Executer.new
31
+ end
23
32
  end
24
33
  end
@@ -1,3 +1,3 @@
1
1
  module MassInsert
2
- VERSION = "0.1.2"
2
+ VERSION = '0.1.3'
3
3
  end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Date" do
4
+ let!(:values){ [{}] }
5
+ let!(:options){ Hash.new }
6
+
7
+ context "when contains date value" do
8
+ it "saves the date value correctly" do
9
+ values.first.merge!(birthday: Date.today)
10
+ User.mass_insert(values, options)
11
+ expect(User.last.birthday).to eq(Date.today)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Datetime" do
4
+ let!(:values){ [{}] }
5
+ let!(:options){ Hash.new }
6
+
7
+ context "when contains datetime value" do
8
+ it "saves the datetime value correctly" do
9
+ values.first.merge!(created_at: DateTime.now)
10
+ User.mass_insert(values, options)
11
+ expect(User.last.created_at.strftime("%Y-%m-%d %H:%M")).to eq(DateTime.now.strftime("%Y-%m-%d %H:%M"))
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Time" do
4
+ let!(:values){ [{}] }
5
+ let!(:options){ Hash.new }
6
+
7
+ context "when contains time value" do
8
+ it "saves the time value correctly" do
9
+ values.first.merge!(birthtime: Time.now)
10
+ User.mass_insert(values, options)
11
+ expect(User.last.birthtime.strftime("%H:%M")).to eq(Time.now.strftime("%H:%M"))
12
+ end
13
+ end
14
+ end
@@ -1,3 +1,3 @@
1
1
  class User < ActiveRecord::Base
2
- attr_accessible :age, :email, :name, :money, :active, :checked
2
+ attr_accessible :age, :email, :name, :money, :active, :checked, :birthday, :birthtime
3
3
  end
@@ -7,6 +7,8 @@ class CreateUsers < ActiveRecord::Migration
7
7
  t.decimal :money, :precision => 10, :scale => 4
8
8
  t.boolean :active
9
9
  t.binary :checked
10
+ t.date :birthday
11
+ t.time :birthtime
10
12
 
11
13
  t.timestamps
12
14
  end
@@ -20,6 +20,8 @@ ActiveRecord::Schema.define(:version => 20130412154541) do
20
20
  t.decimal "money", :precision => 10, :scale => 4
21
21
  t.boolean "active"
22
22
  t.binary "checked"
23
+ t.date "birthday"
24
+ t.time "birthtime"
23
25
  t.datetime "created_at", :null => false
24
26
  t.datetime "updated_at", :null => false
25
27
  end
@@ -89,24 +89,11 @@ describe MassInsert::Builder::Adapters::Adapter do
89
89
  end
90
90
  end
91
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
92
  describe "#timestamp_hash" do
106
93
  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})
94
+ time = Time.now
95
+ Time.stub(:now).and_return(time)
96
+ expect(subject.timestamp_hash).to eq({:created_at => Time.now, :updated_at => Time.now})
110
97
  end
111
98
  end
112
99
 
@@ -82,9 +82,6 @@ describe MassInsert::Builder::Adapters::Helpers::ColumnValue do
82
82
  :string,
83
83
  :text,
84
84
  :date,
85
- :time,
86
- :datetime,
87
- :timestamp,
88
85
  :binary
89
86
  ].each do |column_type|
90
87
  method = :"column_value_#{column_type}"
@@ -97,6 +94,50 @@ describe MassInsert::Builder::Adapters::Helpers::ColumnValue do
97
94
  end
98
95
  end
99
96
 
97
+ [
98
+ :time,
99
+ :datetime,
100
+ :timestamp,
101
+ ].each do |column_type|
102
+ method = :"column_value_#{column_type}"
103
+
104
+ describe "##{method.to_s}" do
105
+ before :each do
106
+ time = Time.now
107
+ Time.stub(:now).and_return(time)
108
+ subject.stub(:column_value).and_return(Time.now)
109
+ end
110
+
111
+ context "when adapter is mysql2" do
112
+ it "returns date with the correct format" do
113
+ MassInsert::Builder::Utilities.stub(:adapter).and_return('mysql2')
114
+ expect(subject.send(method)).to eq("'#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}'")
115
+ end
116
+ end
117
+
118
+ context "when adapter is sqlserver" do
119
+ it "returns date with the correct format" do
120
+ MassInsert::Builder::Utilities.stub(:adapter).and_return('sqlserver')
121
+ expect(subject.send(method)).to eq("'#{Time.now.strftime("%Y-%m-%d %H:%M:%S.%3N")}'")
122
+ end
123
+ end
124
+
125
+ context "when adapter is sqlite3" do
126
+ it "returns date with the correct format" do
127
+ MassInsert::Builder::Utilities.stub(:adapter).and_return('sqlite3')
128
+ expect(subject.send(method)).to eq("'#{Time.now.strftime("%Y-%m-%d %H:%M:%S.%6N")}'")
129
+ end
130
+ end
131
+
132
+ context "when adapter is postgresql" do
133
+ it "returns date with the correct format" do
134
+ MassInsert::Builder::Utilities.stub(:adapter).and_return('postgresql')
135
+ expect(subject.send(method)).to eq("'#{Time.now.strftime("%Y-%m-%d %H:%M:%S.%6N")}'")
136
+ end
137
+ end
138
+ end
139
+ end
140
+
100
141
  describe "#column_value_integer" do
101
142
  context "when is a integer value" do
102
143
  it "returns the same integer value" do
@@ -134,54 +175,46 @@ describe MassInsert::Builder::Adapters::Helpers::ColumnValue do
134
175
  end
135
176
 
136
177
  describe "#column_value_boolean" do
137
- it "calls a method according to database adapter" do
138
- MassInsert::Builder::Utilities.stub(:adapter).and_return("mysql2")
139
- subject.stub(:mysql2_column_value_boolean).and_return("boolean_value")
140
- expect(subject.column_value_boolean).to eq("boolean_value")
141
- end
142
- end
143
-
144
- [
145
- :mysql2,
146
- :postgresql,
147
- ].each do |adapter|
148
- method = :"#{adapter}_column_value_boolean"
178
+ [:mysql2, :postgresql].each do |adapter|
179
+ context "when the adapter is #{adapter}" do
180
+ before :each do
181
+ MassInsert::Builder::Utilities.stub(:adapter).and_return(adapter.to_s)
182
+ end
149
183
 
150
- describe "##{method.to_s}" do
151
- context "when column_value method return true" do
152
- it "returns true string" do
153
- subject.stub(:column_value).and_return(true)
154
- expect(subject.send(method)).to eq("true")
184
+ context "when the column value evals to true" do
185
+ it "returns true" do
186
+ subject.stub(:column_value).and_return(true)
187
+ expect(subject.column_value_boolean).to eq("true")
188
+ end
155
189
  end
156
- end
157
190
 
158
- context "when column_value method return false" do
159
- it "returns false string" do
160
- subject.stub(:column_value).and_return(false)
161
- expect(subject.send(method)).to eq("false")
191
+ context "when the column value evals to false" do
192
+ it "returns false" do
193
+ subject.stub(:column_value).and_return(false)
194
+ expect(subject.column_value_boolean).to eq("false")
195
+ end
162
196
  end
163
197
  end
164
198
  end
165
- end
166
199
 
167
- [
168
- :sqlite3,
169
- :sqlserver,
170
- ].each do |adapter|
171
- method = :"#{adapter}_column_value_boolean"
200
+ [:sqlite3, :sqlserver].each do |adapter|
201
+ context "when the adapter is #{adapter}" do
202
+ before :each do
203
+ MassInsert::Builder::Utilities.stub(:adapter).and_return(adapter.to_s)
204
+ end
172
205
 
173
- describe "##{method.to_s}" do
174
- context "when column_value method return true" do
175
- it "returns true string" do
176
- subject.stub(:column_value).and_return(true)
177
- expect(subject.send(method)).to eq("1")
206
+ context "when the column value evals to true" do
207
+ it "returns true" do
208
+ subject.stub(:column_value).and_return(true)
209
+ expect(subject.column_value_boolean).to eq("1")
210
+ end
178
211
  end
179
- end
180
212
 
181
- context "when column_value method return false" do
182
- it "returns false string" do
183
- subject.stub(:column_value).and_return(false)
184
- expect(subject.send(method)).to eq("0")
213
+ context "when the column value evals to false" do
214
+ it "returns false" do
215
+ subject.stub(:column_value).and_return(false)
216
+ expect(subject.column_value_boolean).to eq("0")
217
+ end
185
218
  end
186
219
  end
187
220
  end
@@ -6,10 +6,4 @@ describe MassInsert::Builder::Adapters::Mysql2Adapter do
6
6
  it "inherits from Adapter class" do
7
7
  expect(described_class < MassInsert::Builder::Adapters::Adapter).to be_true
8
8
  end
9
-
10
- describe "#timestamp_format" do
11
- it "returns format string" do
12
- expect(subject.timestamp_format).to eq("%Y-%m-%d %H:%M:%S")
13
- end
14
- end
15
9
  end
@@ -29,10 +29,4 @@ describe MassInsert::Builder::Adapters::SQLServerAdapter do
29
29
  end
30
30
  end
31
31
  end
32
-
33
- describe "#timestamp_format" do
34
- it "returns timestamp format string" do
35
- expect(subject.timestamp_format).to eq("%Y-%m-%d %H:%M:%S.%3N")
36
- end
37
- end
38
32
  end
@@ -1,44 +1,58 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe MassInsert::Process do
4
- let!(:subject){ MassInsert::Process.new("values", "options") }
5
-
6
- describe "#initialize" do
7
- it "sets instance values variable" do
8
- expect(subject.instance_variable_get(:@values)).to eq("values")
9
- end
10
-
11
- it "sets instance options variable" do
12
- expect(subject.instance_variable_get(:@options)).to eq("options")
13
- end
14
- end
15
-
16
- describe "#start" do
17
- before :each do
18
- MassInsert::Builder::Base.any_instance.stub(:build).and_return("queries")
19
- MassInsert::Executer.any_instance.stub(:execute)
20
- end
21
-
22
- it "calls method to build the queries" do
23
- MassInsert::Builder::Base.any_instance.should_receive(:build).with("values", "options")
24
- subject.start
3
+ module MassInsert
4
+ describe Process do
5
+ let!(:subject){ described_class.new("values", "options") }
6
+
7
+ describe "#initialize" do
8
+ it "sets instance values variable" do
9
+ expect(subject.instance_variable_get(:@values)).to eq("values")
10
+ end
11
+
12
+ it "sets instance options variable" do
13
+ expect(subject.instance_variable_get(:@options)).to eq("options")
14
+ end
25
15
  end
26
16
 
27
- it "calls method to execute the queries" do
28
- MassInsert::Executer.any_instance.should_receive(:execute).with("queries")
29
- subject.start
17
+ describe "#start" do
18
+ before :each do
19
+ Builder::Base.any_instance.stub(:build).and_return("queries")
20
+ Executer.any_instance.stub(:execute)
21
+ end
22
+
23
+ it "calls method to build the queries" do
24
+ Builder::Base.any_instance.should_receive(:build).with("values", "options")
25
+ subject.start
26
+ end
27
+
28
+ it "calls method to execute the queries" do
29
+ Executer.any_instance.should_receive(:execute).with("queries")
30
+ subject.start
31
+ end
32
+
33
+ it "sets instance building_time variable" do
34
+ subject.start
35
+ building_time = subject.instance_variable_get(:@building_time)
36
+ expect(building_time).to be_an_instance_of(Benchmark::Tms)
37
+ end
38
+
39
+ it "sets instance execution_time variable" do
40
+ subject.start
41
+ execution_time = subject.instance_variable_get(:@execution_time)
42
+ expect(execution_time).to be_an_instance_of(Benchmark::Tms)
43
+ end
30
44
  end
31
45
 
32
- it "sets instance building_time variable" do
33
- subject.start
34
- building_time = subject.instance_variable_get(:@building_time)
35
- expect(building_time).to be_an_instance_of(Benchmark::Tms)
46
+ describe '#builder' do
47
+ it 'returns new Builder::Base instace' do
48
+ expect(subject.builder).to be_an_instance_of(Builder::Base)
49
+ end
36
50
  end
37
51
 
38
- it "sets instance execution_time variable" do
39
- subject.start
40
- execution_time = subject.instance_variable_get(:@execution_time)
41
- expect(execution_time).to be_an_instance_of(Benchmark::Tms)
52
+ describe '#executer' do
53
+ it 'returns new Executer instace' do
54
+ expect(subject.executer).to be_an_instance_of(Executer)
55
+ end
42
56
  end
43
57
  end
44
58
  end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,7 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+ Coveralls::Output.silent = true
4
+
1
5
  require 'dummy/config/environment'
2
6
  require 'simplecov'
3
7
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mass_insert
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
5
- prerelease:
4
+ version: 0.1.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Alejandro Gutiérrez
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-09-02 00:00:00.000000000 Z
11
+ date: 2014-04-30 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ! '>='
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ! '>='
44
39
  - !ruby/object:Gem::Version
@@ -78,9 +73,12 @@ files:
78
73
  - mass_insert.gemspec
79
74
  - spec/adapters/column_types/binary_spec.rb
80
75
  - spec/adapters/column_types/boolean_spec.rb
76
+ - spec/adapters/column_types/date_spec.rb
77
+ - spec/adapters/column_types/datetime_spec.rb
81
78
  - spec/adapters/column_types/decimal_spec.rb
82
79
  - spec/adapters/column_types/integer_spec.rb
83
80
  - spec/adapters/column_types/string_spec.rb
81
+ - spec/adapters/column_types/time_spec.rb
84
82
  - spec/adapters/model_spec.rb
85
83
  - spec/dummy/.gitignore
86
84
  - spec/dummy/Gemfile
@@ -150,40 +148,36 @@ files:
150
148
  homepage: https://github.com/alejandrogutierrez/mass_insert
151
149
  licenses:
152
150
  - MIT
151
+ metadata: {}
153
152
  post_install_message:
154
153
  rdoc_options: []
155
154
  require_paths:
156
155
  - lib
157
156
  required_ruby_version: !ruby/object:Gem::Requirement
158
- none: false
159
157
  requirements:
160
158
  - - ! '>='
161
159
  - !ruby/object:Gem::Version
162
160
  version: '0'
163
- segments:
164
- - 0
165
- hash: -2559163002047617734
166
161
  required_rubygems_version: !ruby/object:Gem::Requirement
167
- none: false
168
162
  requirements:
169
163
  - - ! '>='
170
164
  - !ruby/object:Gem::Version
171
165
  version: '0'
172
- segments:
173
- - 0
174
- hash: -2559163002047617734
175
166
  requirements: []
176
167
  rubyforge_project:
177
- rubygems_version: 1.8.25
168
+ rubygems_version: 2.2.2
178
169
  signing_key:
179
- specification_version: 3
170
+ specification_version: 4
180
171
  summary: Mass database insertion in Rails
181
172
  test_files:
182
173
  - spec/adapters/column_types/binary_spec.rb
183
174
  - spec/adapters/column_types/boolean_spec.rb
175
+ - spec/adapters/column_types/date_spec.rb
176
+ - spec/adapters/column_types/datetime_spec.rb
184
177
  - spec/adapters/column_types/decimal_spec.rb
185
178
  - spec/adapters/column_types/integer_spec.rb
186
179
  - spec/adapters/column_types/string_spec.rb
180
+ - spec/adapters/column_types/time_spec.rb
187
181
  - spec/adapters/model_spec.rb
188
182
  - spec/dummy/.gitignore
189
183
  - spec/dummy/Gemfile