mass_insert 0.0.3 → 0.0.4

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.
@@ -1,7 +1,6 @@
1
1
  module MassInsert
2
2
  module Adapters
3
3
  autoload :Adapter, 'mass_insert/adapters/adapter.rb'
4
- autoload :ColumnValue, 'mass_insert/adapters/column_value.rb'
5
4
  autoload :Helpers, 'mass_insert/adapters/helpers.rb'
6
5
  autoload :Mysql2Adapter, 'mass_insert/adapters/mysql2_adapter.rb'
7
6
  autoload :PostgreSQLAdapter, 'mass_insert/adapters/postgresql_adapter.rb'
@@ -1,8 +1,5 @@
1
1
  module MassInsert
2
2
  module Adapters
3
- # This class provides some helper methods to build the sql string that
4
- # be executed. The methods here provides a functionality that be required
5
- # in all the adapters.
6
3
  class Adapter
7
4
  include Helpers::AbstractQuery
8
5
  include Helpers::Timestamp
@@ -2,6 +2,7 @@ module MassInsert
2
2
  module Adapters
3
3
  module Helpers
4
4
  autoload :AbstractQuery, 'mass_insert/adapters/helpers/abstract_query.rb'
5
+ autoload :ColumnValue, 'mass_insert/adapters/helpers/column_value.rb'
5
6
  autoload :Timestamp, 'mass_insert/adapters/helpers/timestamp.rb'
6
7
  autoload :Sanitizer, 'mass_insert/adapters/helpers/sanitizer.rb'
7
8
  end
@@ -42,6 +42,14 @@ module MassInsert
42
42
  ColumnValue.new(row, column, options).build
43
43
  end
44
44
 
45
+ # This functions calls the necessary functions to create a complete
46
+ # mysql query to multiple insertion. The methods are in the Abstract
47
+ # Sql String module. If some method is too specific to this database
48
+ # adapter you can overwrite it.
49
+ def execute
50
+ "#{begin_string}#{string_columns}#{string_values}"
51
+ end
52
+
45
53
  end
46
54
  end
47
55
  end
@@ -0,0 +1,116 @@
1
+ module MassInsert
2
+ module Adapters
3
+ module Helpers
4
+ class ColumnValue
5
+
6
+ attr_accessor :row, :column, :options
7
+
8
+ def initialize row, column, options
9
+ @row = row
10
+ @column = column
11
+ @options = options
12
+ end
13
+
14
+ # Returns the class that invokes the mass insert process. The class
15
+ # is in the options hash.
16
+ def class_name
17
+ options[:class_name]
18
+ end
19
+
20
+ # Returns a symbol with the column type in the database. The column or
21
+ # attribute should belongs to the class that invokes the mass insert.
22
+ def column_type
23
+ class_name.columns_hash[@column.to_s].type
24
+ end
25
+
26
+ # Returns the value to this column in the row hash. The value is
27
+ # finding by symbol or string key to be most flexible. This method
28
+ # tries to get a value by symbol key with the column name first and
29
+ # if the symbol key doesn't exist it will try to find it by string
30
+ # key. Otherwise it will return nil.
31
+ def column_value
32
+ row.fetch(column.to_sym){row[column.to_s]}
33
+ end
34
+
35
+ # Returns the string with the database adapter name usually in the
36
+ # database.yml file in your Rails project.
37
+ def adapter
38
+ ActiveRecord::Base.connection.instance_values["config"][:adapter]
39
+ end
40
+
41
+ # Returns the default value string to be included in query string.
42
+ # This default value is added to the query if the row hash does not
43
+ # contains the database column value.
44
+ def default_value
45
+ default_db_value ? default_db_value.to_s : "null"
46
+ end
47
+
48
+ # Return the database default value using methods that ActiveRecord
49
+ # provides to see database columns settings.
50
+ def default_db_value
51
+ class_name.columns_hash[@column.to_s].default
52
+ end
53
+
54
+ # Returns a single column string value with the correct format and
55
+ # according to the database configuration, column type and presence.
56
+ # If the row hash does not include the value to this column return the
57
+ # default value according to database configuration.
58
+ def build
59
+ column_value.nil? ? default_value : send(:"column_value_#{column_type}")
60
+ end
61
+
62
+ # Returns the correct value when the column value is string, text,
63
+ # date, time, datetime, timestamp. There are alias methods to the
64
+ # other column types that need a similar query value.
65
+ def column_value_string
66
+ "'#{column_value}'"
67
+ end
68
+ alias :column_value_text :column_value_string
69
+ alias :column_value_date :column_value_string
70
+ alias :column_value_time :column_value_string
71
+ alias :column_value_datetime :column_value_string
72
+ alias :column_value_timestamp :column_value_string
73
+ alias :column_value_binary :column_value_string
74
+
75
+ # Returns the correct value to integer column. The column values is
76
+ # converted to integer to be sure that the value is correct to be
77
+ # persisted into the database and after it, it's converted to string.
78
+ def column_value_integer
79
+ column_value.to_i.to_s
80
+ end
81
+
82
+ # Returns the correct value to decimal column. There is an alias method
83
+ # to float type. The column values is converted to decimal to be sure
84
+ # that the value is correct to be persisted into the database and after
85
+ # it, it's converted to string.
86
+ def column_value_decimal
87
+ column_value.to_f.to_s
88
+ end
89
+ alias :column_value_float :column_value_decimal
90
+
91
+ # Returns the correct value to boolean column. This column calls the
92
+ # correct method according to the database adapter to return the correct
93
+ # value to that database engine.
94
+ def column_value_boolean
95
+ self.send(:"#{adapter}_column_value_boolean")
96
+ end
97
+
98
+ # Returns the column value to boolean column like a string. If the
99
+ # column value exists returns a true string else false string. There
100
+ # are alias methods to the database engines that works similarity.
101
+ def mysql2_column_value_boolean
102
+ column_value ? "true" : "false"
103
+ end
104
+ alias :postgresql_column_value_boolean :mysql2_column_value_boolean
105
+ alias :sqlserver_column_value_boolean :mysql2_column_value_boolean
106
+
107
+ # Returns the column value to boolean column like a string. If the
108
+ # column value exists returns a "1" else "0".
109
+ def sqlite3_column_value_boolean
110
+ column_value ? "1" : "0"
111
+ end
112
+
113
+ end
114
+ end
115
+ end
116
+ end
@@ -8,14 +8,6 @@ module MassInsert
8
8
  "%Y-%m-%d %H:%M:%S"
9
9
  end
10
10
 
11
- # This functions calls the necessary functions to create a complete
12
- # mysql query to multiple insertion. The methods are in the Abstract
13
- # Sql String module. If some method is too specific to this database
14
- # adapter you can overwrite it.
15
- def execute
16
- "#{begin_string}#{string_columns}#{string_values}"
17
- end
18
-
19
11
  end
20
12
  end
21
13
  end
@@ -2,14 +2,6 @@ module MassInsert
2
2
  module Adapters
3
3
  class PostgreSQLAdapter < Adapter
4
4
 
5
- # This functions calls the necessary functions to create a complete
6
- # postgresql query to multiple insertion. The methods are in the
7
- # AbstractQuery module. If some method is too specific to this database
8
- # adapter you can overwrite it.
9
- def execute
10
- "#{begin_string}#{string_columns}#{string_values}"
11
- end
12
-
13
5
  end
14
6
  end
15
7
  end
@@ -28,7 +28,7 @@ module MassInsert
28
28
  def execute
29
29
  @values.each_slice(MAX_VALUES_PER_INSERTION).map do |slice|
30
30
  @values = slice
31
- "#{begin_string}#{string_columns}#{string_values}"
31
+ super
32
32
  end
33
33
  end
34
34
 
@@ -4,6 +4,12 @@ module MassInsert
4
4
 
5
5
  MAX_VALUES_PER_INSERTION = 1000
6
6
 
7
+ # This method is overwrite because the timestamp format to this
8
+ # database engine needs precision in three nanoseconds.
9
+ def timestamp_format
10
+ "%Y-%m-%d %H:%M:%S.%3N"
11
+ end
12
+
7
13
  # This functions calls the necessary functions to create a complete
8
14
  # sqlserver query to multiple insertion. The methods are in the Abstract
9
15
  # Query module. If some method is too specific to this database adapter
@@ -14,7 +20,7 @@ module MassInsert
14
20
  def execute
15
21
  @values.each_slice(MAX_VALUES_PER_INSERTION).map do |slice|
16
22
  @values = slice
17
- "#{begin_string}#{string_columns}#{string_values}"
23
+ super
18
24
  end
19
25
  end
20
26
 
@@ -1,3 +1,3 @@
1
1
  module MassInsert
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -12,7 +12,7 @@ describe "Binary" do
12
12
  context "when is 1" do
13
13
  it "should be saved correctly" do
14
14
  User.mass_insert(@values, @options)
15
- User.last.checked.should eq("1")
15
+ expect(User.last.checked).to eq("1")
16
16
  end
17
17
  end
18
18
 
@@ -20,7 +20,7 @@ describe "Binary" do
20
20
  it "should be saved correctly" do
21
21
  @values.first.merge!(:checked => 0)
22
22
  User.mass_insert(@values, @options)
23
- User.last.checked.should eq("0")
23
+ expect(User.last.checked).to eq("0")
24
24
  end
25
25
  end
26
26
  end
@@ -29,7 +29,7 @@ describe "Binary" do
29
29
  it "should convert string value to binary" do
30
30
  @values.first.merge!(:checked => "string")
31
31
  User.mass_insert(@values, @options)
32
- User.last.checked.should eq("string")
32
+ expect(User.last.checked).to eq("string")
33
33
  end
34
34
  end
35
35
 
@@ -37,7 +37,7 @@ describe "Binary" do
37
37
  it "should convert decimal value to binary" do
38
38
  @values.first.merge!(:checked => 25.34)
39
39
  User.mass_insert(@values, @options)
40
- User.last.checked.should eq("25.34")
40
+ expect(User.last.checked).to eq("25.34")
41
41
  end
42
42
  end
43
43
 
@@ -45,7 +45,7 @@ describe "Binary" do
45
45
  it "should convert boolean value to binary" do
46
46
  @values.first.merge!(:checked => true)
47
47
  User.mass_insert(@values, @options)
48
- User.last.checked.should eq("true")
48
+ expect(User.last.checked).to eq("true")
49
49
  end
50
50
  end
51
51
  end
@@ -54,7 +54,7 @@ describe "Binary" do
54
54
  it "should save the default value" do
55
55
  @values.first.delete(:checked)
56
56
  User.mass_insert(@values, @options)
57
- User.last.checked.should eq(nil)
57
+ expect(User.last.checked).to eq(nil)
58
58
  end
59
59
  end
60
60
  end
@@ -12,7 +12,7 @@ describe "Boolean" do
12
12
  context "when is true" do
13
13
  it "should be saved correctly" do
14
14
  User.mass_insert(@values, @options)
15
- User.last.active.should eq(true)
15
+ expect(User.last.active).to eq(true)
16
16
  end
17
17
  end
18
18
 
@@ -20,7 +20,7 @@ describe "Boolean" do
20
20
  it "should be saved correctly" do
21
21
  @values.first.merge!(:active => false)
22
22
  User.mass_insert(@values, @options)
23
- User.last.active.should eq(false)
23
+ expect(User.last.active).to eq(false)
24
24
  end
25
25
  end
26
26
  end
@@ -29,7 +29,7 @@ describe "Boolean" do
29
29
  it "should convert string value to boolean" do
30
30
  @values.first.merge!(:active => "string")
31
31
  User.mass_insert(@values, @options)
32
- User.last.active.should eq(true)
32
+ expect(User.last.active).to eq(true)
33
33
  end
34
34
  end
35
35
 
@@ -37,7 +37,7 @@ describe "Boolean" do
37
37
  it "should convert decimal value to boolean" do
38
38
  @values.first.merge!(:active => 25.34)
39
39
  User.mass_insert(@values, @options)
40
- User.last.active.should eq(true)
40
+ expect(User.last.active).to eq(true)
41
41
  end
42
42
  end
43
43
  end
@@ -46,7 +46,7 @@ describe "Boolean" do
46
46
  it "should save the default value" do
47
47
  @values.first.delete(:active)
48
48
  User.mass_insert(@values, @options)
49
- User.last.active.should eq(nil)
49
+ expect(User.last.active).to eq(nil)
50
50
  end
51
51
  end
52
52
  end
@@ -12,7 +12,7 @@ describe "Decimal" do
12
12
  it "should convert integer value to decimal" do
13
13
  @values.first.merge!(:money => 10)
14
14
  User.mass_insert(@values, @options)
15
- User.last.money.should eq(10.0)
15
+ expect(User.last.money).to eq(10.0)
16
16
  end
17
17
  end
18
18
 
@@ -20,21 +20,21 @@ describe "Decimal" do
20
20
  it "should convert string value to decimal" do
21
21
  @values.first.merge!(:money => "string")
22
22
  User.mass_insert(@values, @options)
23
- User.last.money.should eq(0.0)
23
+ expect(User.last.money).to eq(0.0)
24
24
  end
25
25
  end
26
26
 
27
27
  context "when contains a decimal" do
28
28
  it "should save the correct value" do
29
29
  User.mass_insert(@values, @options)
30
- User.last.money.should eq(20.50)
30
+ expect(User.last.money).to eq(20.50)
31
31
  end
32
32
  end
33
33
 
34
34
  context "when contains a boolean" do
35
35
  it "should raise an exception" do
36
36
  @values.first.merge!(:money => true)
37
- lambda{ User.mass_insert(@values, @options) }.should raise_exception
37
+ expect(lambda{ User.mass_insert(@values, @options) }).to raise_exception
38
38
  end
39
39
  end
40
40
  end
@@ -43,7 +43,7 @@ describe "Decimal" do
43
43
  it "should save the default value" do
44
44
  @values.first.delete(:money)
45
45
  User.mass_insert(@values, @options)
46
- User.last.money.should eq(nil)
46
+ expect(User.last.money).to eq(nil)
47
47
  end
48
48
  end
49
49
  end
@@ -11,7 +11,7 @@ describe "Integer" do
11
11
  context "when contains an integer" do
12
12
  it "should be saved correctly" do
13
13
  User.mass_insert(@values, @options)
14
- User.last.age.should eq(20)
14
+ expect(User.last.age).to eq(20)
15
15
  end
16
16
  end
17
17
 
@@ -19,7 +19,7 @@ describe "Integer" do
19
19
  it "should convert string value to integer" do
20
20
  @values.first.merge!(:age => "string")
21
21
  User.mass_insert(@values, @options)
22
- User.last.age.should eq(0)
22
+ expect(User.last.age).to eq(0)
23
23
  end
24
24
  end
25
25
 
@@ -27,14 +27,14 @@ describe "Integer" do
27
27
  it "should convert decimal value to integer" do
28
28
  @values.first.merge!(:age => 25.69)
29
29
  User.mass_insert(@values, @options)
30
- User.last.age.should eq(25)
30
+ expect(User.last.age).to eq(25)
31
31
  end
32
32
  end
33
33
 
34
34
  context "when contains a boolean" do
35
35
  it "should raise an exception" do
36
36
  @values.first.merge!(:age => true)
37
- lambda{ User.mass_insert(@values, @options) }.should raise_exception
37
+ expect(lambda{ User.mass_insert(@values, @options) }).to raise_exception
38
38
  end
39
39
  end
40
40
  end
@@ -43,7 +43,7 @@ describe "Integer" do
43
43
  it "should save the default value" do
44
44
  @values.first.delete(:age)
45
45
  User.mass_insert(@values, @options)
46
- User.last.age.should eq(nil)
46
+ expect(User.last.age).to eq(nil)
47
47
  end
48
48
  end
49
49
  end
@@ -11,7 +11,7 @@ describe "String" do
11
11
  context "when contains a string" do
12
12
  it "should be saved correctly" do
13
13
  User.mass_insert(@values, @options)
14
- User.last.name.should eq("some name")
14
+ expect(User.last.name).to eq("some name")
15
15
  end
16
16
  end
17
17
 
@@ -19,7 +19,7 @@ describe "String" do
19
19
  it "should convert integer value to string" do
20
20
  @values.first.merge!(:name => 10)
21
21
  User.mass_insert(@values, @options)
22
- User.last.name.should eq("10")
22
+ expect(User.last.name).to eq("10")
23
23
  end
24
24
  end
25
25
 
@@ -27,7 +27,7 @@ describe "String" do
27
27
  it "should convert decimal value to string" do
28
28
  @values.first.merge!(:name => 25.69)
29
29
  User.mass_insert(@values, @options)
30
- User.last.name.should eq("25.69")
30
+ expect(User.last.name).to eq("25.69")
31
31
  end
32
32
  end
33
33
 
@@ -35,7 +35,7 @@ describe "String" do
35
35
  it "should convert boolean value to string" do
36
36
  @values.first.merge!(:name => true)
37
37
  User.mass_insert(@values, @options)
38
- User.last.name.should eq("true")
38
+ expect(User.last.name).to eq("true")
39
39
  end
40
40
  end
41
41
  end
@@ -44,7 +44,7 @@ describe "String" do
44
44
  it "should save the default value" do
45
45
  @values.first.delete(:name)
46
46
  User.mass_insert(@values, @options)
47
- User.last.name.should eq(nil)
47
+ expect(User.last.name).to eq(nil)
48
48
  end
49
49
  end
50
50
  end
@@ -17,16 +17,69 @@ describe "Model" do
17
17
  end
18
18
 
19
19
  context "when is used without options" do
20
- it "should save 5 record into users table" do
21
- 5.times{ @values << @value_hash }
22
- User.mass_insert(@values, @options)
23
- User.count.should eq(5)
20
+ context "when value hashes have string keys" do
21
+ before :each do
22
+ value_hash = {
23
+ "name" => "some_name",
24
+ "email" => "some_email",
25
+ "age" => 20,
26
+ "active" => true,
27
+ "checked" => true
28
+ }
29
+ 5.times{ @values << value_hash }
30
+ User.mass_insert(@values, @options)
31
+ end
32
+
33
+ it "should save correct values" do
34
+ expect(User.first.name).to eq("some_name")
35
+ end
36
+
37
+ it "should have saved 5 records" do
38
+ expect(User.count).to eq(5)
39
+ end
40
+ end
41
+
42
+ context "when value hashes have symbol keys" do
43
+ before :each do
44
+ 5.times{ @values << @value_hash }
45
+ User.mass_insert(@values, @options)
46
+ end
47
+
48
+ it "should save correct values" do
49
+ expect(User.first.age).to eq(20)
50
+ end
51
+
52
+ it "should have saved 5 records" do
53
+ expect(User.count).to eq(5)
54
+ end
55
+ end
56
+
57
+ context "when value hashes have symbol and string keys" do
58
+ before :each do
59
+ value_hash = {
60
+ "name" => "some_name",
61
+ :email => "some_email",
62
+ "age" => 20,
63
+ :active => true,
64
+ "checked" => true
65
+ }
66
+ 5.times{ @values << value_hash }
67
+ User.mass_insert(@values, @options)
68
+ end
69
+
70
+ it "should save correct values" do
71
+ expect(User.first.email).to eq("some_email")
72
+ end
73
+
74
+ it "should have saved 5 records" do
75
+ expect(User.count).to eq(5)
76
+ end
24
77
  end
25
78
 
26
79
  it "should save if values cointains 1200 records" do
27
80
  1200.times{ @values << @value_hash }
28
81
  User.mass_insert(@values, @options)
29
- User.count.should eq(1200)
82
+ expect(User.count).to eq(1200)
30
83
  end
31
84
  end
32
85
 
@@ -35,7 +88,7 @@ describe "Model" do
35
88
  it "should not save any record" do
36
89
  5.times{ @values << @value_hash }
37
90
  @options.merge!(:table_name => "countries")
38
- lambda{ User.mass_insert(@values, @options) }.should raise_exception
91
+ expect(lambda{ User.mass_insert(@values, @options) }).to raise_exception
39
92
  end
40
93
  end
41
94
 
@@ -43,7 +96,7 @@ describe "Model" do
43
96
  it "should not save any record" do
44
97
  5.times{ @values << @value_hash }
45
98
  @options.merge!(:class_name => Test)
46
- lambda{ User.mass_insert(@values, @options) }.should raise_exception
99
+ expect(lambda{ User.mass_insert(@values, @options) }).to raise_exception
47
100
  end
48
101
  end
49
102
  end
@@ -97,9 +97,22 @@ describe MassInsert::Adapters::Helpers::AbstractQuery do
97
97
  end
98
98
 
99
99
  it "should call build method in ColumnValue class" do
100
- column_value = MassInsert::Adapters::ColumnValue.any_instance
100
+ column_value = MassInsert::Adapters::Helpers::ColumnValue.any_instance
101
101
  column_value.stub(:build).and_return("value")
102
102
  expect(subject.string_single_value({}, :name)).to eq("value")
103
103
  end
104
104
  end
105
+
106
+ describe "#execute" do
107
+ it "should respond to execute method" do
108
+ expect(subject).to respond_to(:execute)
109
+ end
110
+
111
+ it "call methods and returns their values concatenated" do
112
+ subject.stub(:begin_string).and_return("a")
113
+ subject.stub(:string_columns).and_return("b")
114
+ subject.stub(:string_values).and_return("c")
115
+ expect(subject.execute).to eq("abc")
116
+ end
117
+ end
105
118
  end
@@ -1,11 +1,11 @@
1
1
  require './spec/spec_helper'
2
2
  require "./lib/mass_insert"
3
3
 
4
- describe MassInsert::Adapters::ColumnValue do
4
+ describe MassInsert::Adapters::Helpers::ColumnValue do
5
5
  let(:options) {{ :class_name => User }}
6
6
  let(:row) {{ :name => "name", :age => 10 }}
7
7
  let(:column){ :name }
8
- let!(:subject){ MassInsert::Adapters::ColumnValue.new(row, column, options) }
8
+ let!(:subject){ MassInsert::Adapters::Helpers::ColumnValue.new(row, column, options) }
9
9
 
10
10
  describe "#initialize" do
11
11
  it "should assign options param to option attribute" do
@@ -6,10 +6,14 @@ describe MassInsert::Adapters::Helpers do
6
6
  expect(MassInsert::Adapters::Helpers).to be
7
7
  end
8
8
 
9
- it 'should define AbstractQuery class' do
9
+ it 'should define AbstractQuery module' do
10
10
  expect(MassInsert::Adapters::Helpers::AbstractQuery).to be
11
11
  end
12
12
 
13
+ it 'should define ColumnValue class' do
14
+ expect(MassInsert::Adapters::Helpers::ColumnValue).to be
15
+ end
16
+
13
17
  it 'should define Timestamp module' do
14
18
  expect(MassInsert::Adapters::Helpers::Timestamp).to be
15
19
  end
@@ -18,18 +18,5 @@ describe MassInsert::Adapters::Mysql2Adapter do
18
18
  expect(subject.timestamp_format).to eq("%Y-%m-%d %H:%M:%S")
19
19
  end
20
20
  end
21
-
22
- describe "#execute" do
23
- it "should respond to execute method" do
24
- expect(subject).to respond_to(:execute)
25
- end
26
-
27
- it "call methods and returns their values concatenated" do
28
- subject.stub(:begin_string).and_return("a")
29
- subject.stub(:string_columns).and_return("b")
30
- subject.stub(:string_values).and_return("c")
31
- expect(subject.execute).to eq("abc")
32
- end
33
- end
34
21
  end
35
22
  end
@@ -8,18 +8,4 @@ describe MassInsert::Adapters::PostgreSQLAdapter do
8
8
  expect(subject).to be_a(MassInsert::Adapters::Adapter)
9
9
  end
10
10
 
11
- describe "instance methods" do
12
- describe "#execute" do
13
- it "should respond to execute method" do
14
- expect(subject).to respond_to(:execute)
15
- end
16
-
17
- it "call methods and returns their values concatenated" do
18
- subject.stub(:begin_string).and_return("a")
19
- subject.stub(:string_columns).and_return("b")
20
- subject.stub(:string_values).and_return("c")
21
- expect(subject.execute).to eq("abc")
22
- end
23
- end
24
- end
25
11
  end
@@ -9,6 +9,16 @@ describe MassInsert::Adapters::SQLServerAdapter do
9
9
  end
10
10
 
11
11
  describe "instance methods" do
12
+ describe "#timestamp_format" do
13
+ it "should respond to timestamp_format method" do
14
+ expect(subject).to respond_to(:timestamp_format)
15
+ end
16
+
17
+ it "should return the format string" do
18
+ expect(subject.timestamp_format).to eq("%Y-%m-%d %H:%M:%S.%3N")
19
+ end
20
+ end
21
+
12
22
  describe "#execute" do
13
23
  before :each do
14
24
  subject.stub(:begin_string).and_return("a")
@@ -10,10 +10,6 @@ describe MassInsert::Adapters do
10
10
  expect(MassInsert::Adapters::Adapter).to be
11
11
  end
12
12
 
13
- it 'should define ColumnValue class' do
14
- expect(MassInsert::Adapters::ColumnValue).to be
15
- end
16
-
17
13
  it 'should define ColumnValue class' do
18
14
  expect(MassInsert::Adapters::Helpers).to be
19
15
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mass_insert
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-14 00:00:00.000000000 Z
12
+ date: 2013-06-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -61,9 +61,9 @@ files:
61
61
  - lib/mass_insert.rb
62
62
  - lib/mass_insert/adapters.rb
63
63
  - lib/mass_insert/adapters/adapter.rb
64
- - lib/mass_insert/adapters/column_value.rb
65
64
  - lib/mass_insert/adapters/helpers.rb
66
65
  - lib/mass_insert/adapters/helpers/abstract_query.rb
66
+ - lib/mass_insert/adapters/helpers/column_value.rb
67
67
  - lib/mass_insert/adapters/helpers/sanitizer.rb
68
68
  - lib/mass_insert/adapters/helpers/timestamp.rb
69
69
  - lib/mass_insert/adapters/mysql2_adapter.rb
@@ -132,8 +132,8 @@ files:
132
132
  - spec/active_record_models/model_spec.rb
133
133
  - spec/dummy_models/test.rb
134
134
  - spec/mass_insert/adapters/adapter_spec.rb
135
- - spec/mass_insert/adapters/column_value_spec.rb
136
135
  - spec/mass_insert/adapters/helpers/abstract_query_spec.rb
136
+ - spec/mass_insert/adapters/helpers/column_value_spec.rb
137
137
  - spec/mass_insert/adapters/helpers/sanitizer_spec.rb
138
138
  - spec/mass_insert/adapters/helpers/timestamp_spec.rb
139
139
  - spec/mass_insert/adapters/helpers_spec.rb
@@ -162,7 +162,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
162
162
  version: '0'
163
163
  segments:
164
164
  - 0
165
- hash: 27067544814586387
165
+ hash: -4593774517207519689
166
166
  required_rubygems_version: !ruby/object:Gem::Requirement
167
167
  none: false
168
168
  requirements:
@@ -171,7 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
171
  version: '0'
172
172
  segments:
173
173
  - 0
174
- hash: 27067544814586387
174
+ hash: -4593774517207519689
175
175
  requirements: []
176
176
  rubyforge_project:
177
177
  rubygems_version: 1.8.25
@@ -236,8 +236,8 @@ test_files:
236
236
  - spec/active_record_models/model_spec.rb
237
237
  - spec/dummy_models/test.rb
238
238
  - spec/mass_insert/adapters/adapter_spec.rb
239
- - spec/mass_insert/adapters/column_value_spec.rb
240
239
  - spec/mass_insert/adapters/helpers/abstract_query_spec.rb
240
+ - spec/mass_insert/adapters/helpers/column_value_spec.rb
241
241
  - spec/mass_insert/adapters/helpers/sanitizer_spec.rb
242
242
  - spec/mass_insert/adapters/helpers/timestamp_spec.rb
243
243
  - spec/mass_insert/adapters/helpers_spec.rb
@@ -1,111 +0,0 @@
1
- module MassInsert
2
- module Adapters
3
- class ColumnValue
4
-
5
- attr_accessor :row, :column, :options
6
-
7
- def initialize row, column, options
8
- @row = row
9
- @column = column
10
- @options = options
11
- end
12
-
13
- # Returns the class that invokes the mass insert process. The class
14
- # is in the options hash.
15
- def class_name
16
- options[:class_name]
17
- end
18
-
19
- # Returns a symbol with the column type in the database. The column or
20
- # attribute should belongs to the class that invokes the mass insert.
21
- def column_type
22
- class_name.columns_hash[@column.to_s].type
23
- end
24
-
25
- # Returns the value to this column in the row hash. The value is
26
- # finding by symbol or string key to be most flexible.
27
- def column_value
28
- row[column.to_sym]
29
- end
30
-
31
- # Returns the string with the database adapter name usually in the
32
- # database.yml file in your Rails project.
33
- def adapter
34
- ActiveRecord::Base.connection.instance_values["config"][:adapter]
35
- end
36
-
37
- # Returns the default value string to be included in query string.
38
- # This default value is added to the query if the row hash does not
39
- # contains the database column value.
40
- def default_value
41
- default_db_value ? default_db_value.to_s : "null"
42
- end
43
-
44
- # Return the database default value using methods that ActiveRecord
45
- # provides to see database columns settings.
46
- def default_db_value
47
- class_name.columns_hash[@column.to_s].default
48
- end
49
-
50
- # Returns a single column string value with the correct format and
51
- # according to the database configuration, column type and presence.
52
- # If the row hash does not include the value to this column return the
53
- # default value according to database configuration.
54
- def build
55
- column_value.nil? ? default_value : send(:"column_value_#{column_type}")
56
- end
57
-
58
- # Returns the correct value when the column value is string, text,
59
- # date, time, datetime, timestamp. There are alias methods to the
60
- # other column types that need a similar query value.
61
- def column_value_string
62
- "'#{column_value}'"
63
- end
64
- alias :column_value_text :column_value_string
65
- alias :column_value_date :column_value_string
66
- alias :column_value_time :column_value_string
67
- alias :column_value_datetime :column_value_string
68
- alias :column_value_timestamp :column_value_string
69
- alias :column_value_binary :column_value_string
70
-
71
- # Returns the correct value to integer column. The column values is
72
- # converted to integer to be sure that the value is correct to be
73
- # persisted into the database and after it, it's converted to string.
74
- def column_value_integer
75
- column_value.to_i.to_s
76
- end
77
-
78
- # Returns the correct value to decimal column. There is an alias method
79
- # to float type. The column values is converted to decimal to be sure
80
- # that the value is correct to be persisted into the database and after
81
- # it, it's converted to string.
82
- def column_value_decimal
83
- column_value.to_f.to_s
84
- end
85
- alias :column_value_float :column_value_decimal
86
-
87
- # Returns the correct value to boolean column. This column calls the
88
- # correct method according to the database adapter to return the correct
89
- # value to that database engine.
90
- def column_value_boolean
91
- self.send(:"#{adapter}_column_value_boolean")
92
- end
93
-
94
- # Returns the column value to boolean column like a string. If the
95
- # column value exists returns a true string else false string. There
96
- # are alias methods to the database engines that works similarity.
97
- def mysql2_column_value_boolean
98
- column_value ? "true" : "false"
99
- end
100
- alias :postgresql_column_value_boolean :mysql2_column_value_boolean
101
- alias :sqlserver_column_value_boolean :mysql2_column_value_boolean
102
-
103
- # Returns the column value to boolean column like a string. If the
104
- # column value exists returns a "1" else "0".
105
- def sqlite3_column_value_boolean
106
- column_value ? "1" : "0"
107
- end
108
-
109
- end
110
- end
111
- end