bulk_updater 0.0.1 → 0.0.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.
- checksums.yaml +4 -4
- data/Rakefile +5 -0
- data/bulk_updater.gemspec +2 -2
- data/lib/bulk_updater.rb +8 -15
- data/test/bulk_updater_test.rb +19 -0
- data/test/fake_connection.rb +9 -0
- data/test/test_helper.rb +5 -0
- metadata +33 -14
- data/lib/bulk_updater/version.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2baae495ca7a7c60ede032edaaeabf4126d261a2
|
4
|
+
data.tar.gz: 444e1dea03657b0ad8fdd2ff9ee767ac499c071d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e037db7978e15a00877668c13678a348eb6f425a73483ba6faf013927b4220b6e4245a9a8b8db8c9c2135c64a15d490b2187857487d9ea8da69b3d032cefd351
|
7
|
+
data.tar.gz: 77c4da2b34ba53dba9f2151142e5f284057e30ee36f57d8bf2943e54c6db0adf31e524d17dbea8ad173112a0e42c968440bac34294d7d080503c0ca9d15c391d
|
data/Rakefile
CHANGED
data/bulk_updater.gemspec
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'bulk_updater/version'
|
5
4
|
|
6
5
|
Gem::Specification.new do |spec|
|
7
6
|
spec.name = "bulk_updater"
|
8
|
-
spec.version =
|
7
|
+
spec.version = '0.0.2'
|
9
8
|
spec.author = "Alex Teut"
|
10
9
|
spec.email = ["jaturken@gmail.com"]
|
11
10
|
spec.summary = %q{Generate and execute SQL UPDATE for bulk updating multiple records by one request.}
|
@@ -20,5 +19,6 @@ Gem::Specification.new do |spec|
|
|
20
19
|
|
21
20
|
spec.add_development_dependency "bundler", "~> 1.6"
|
22
21
|
spec.add_development_dependency "rake", '>= 0'
|
22
|
+
spec.add_development_dependency "minitest"
|
23
23
|
spec.add_runtime_dependency 'activerecord', '>= 0'
|
24
24
|
end
|
data/lib/bulk_updater.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
|
-
require "bulk_updater/version"
|
2
|
-
|
3
1
|
class BulkUpdater
|
4
2
|
attr_reader :model, :columns_to_find, :columns_to_update, :data
|
5
3
|
|
6
4
|
def self.update!(model, columns_to_find, columns_to_update, data)
|
7
|
-
new(model, columns_to_find, columns_to_update, data).update!
|
5
|
+
new(model, columns_to_find, columns_to_update, data).send(:update!)
|
8
6
|
end
|
9
7
|
|
10
8
|
private
|
@@ -26,8 +24,6 @@ class BulkUpdater
|
|
26
24
|
end
|
27
25
|
end
|
28
26
|
|
29
|
-
private
|
30
|
-
|
31
27
|
def update_condition
|
32
28
|
columns_to_find.map do |column|
|
33
29
|
values = data.map do |data_unit|
|
@@ -40,12 +36,10 @@ class BulkUpdater
|
|
40
36
|
|
41
37
|
def update_statement
|
42
38
|
columns_to_update.map do |column|
|
43
|
-
|
44
|
-
|
39
|
+
conditions = data.map do |data_unit|
|
40
|
+
when_then(column, data_unit)
|
45
41
|
end.compact.join(' ')
|
46
|
-
if
|
47
|
-
"#{column.to_s} = CASE #{case_conditions} ELSE #{column.to_s} end"
|
48
|
-
end
|
42
|
+
"#{column} = CASE #{conditions} ELSE #{column} END" if !conditions.empty?
|
49
43
|
end.compact.join(', ')
|
50
44
|
end
|
51
45
|
|
@@ -53,12 +47,11 @@ class BulkUpdater
|
|
53
47
|
one_record_condition = columns_to_find.map do |column_to_find|
|
54
48
|
value = data_unit[column_to_find]
|
55
49
|
value = quote_value(value)
|
56
|
-
"#{column_to_find
|
50
|
+
"#{column_to_find} = #{value}"
|
57
51
|
end.compact.join(' AND ')
|
58
52
|
update_value = data_unit[column_to_update]
|
59
|
-
if update_value.
|
60
|
-
|
61
|
-
"WHEN #{one_record_condition} THEN #{update_value}"
|
53
|
+
if !update_value.nil?
|
54
|
+
"WHEN #{one_record_condition} THEN #{quote_value(update_value)}"
|
62
55
|
end
|
63
56
|
end
|
64
57
|
|
@@ -66,7 +59,7 @@ class BulkUpdater
|
|
66
59
|
if value.is_a?(Integer)
|
67
60
|
value.to_s
|
68
61
|
else
|
69
|
-
|
62
|
+
model.connection.quote(value)
|
70
63
|
end
|
71
64
|
end
|
72
65
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require 'bulk_updater'
|
3
|
+
require 'fake_connection'
|
4
|
+
|
5
|
+
class BulkUpdaterTest < Minitest::Test
|
6
|
+
def setup
|
7
|
+
@model = Minitest::Mock.new
|
8
|
+
@model.expect(:table_name, 'users')
|
9
|
+
connection = Minitest::Mock.new
|
10
|
+
connection.expect(:quote, 1, [Object])
|
11
|
+
connection.expect(:execute, 2)
|
12
|
+
@model.expect(:connection, connection)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_bulk_updater_has_update_method
|
16
|
+
assert_equal Method, BulkUpdater.method(:update!).class
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
CHANGED
@@ -1,55 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bulk_updater
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Teut
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.6'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.6'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: activerecord
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
|
-
- -
|
59
|
+
- - '>='
|
46
60
|
- !ruby/object:Gem::Version
|
47
61
|
version: '0'
|
48
62
|
type: :runtime
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
|
-
- -
|
66
|
+
- - '>='
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
description: Gem for joining multiple UPDATE requests into one. Useful when you regular
|
@@ -60,14 +74,16 @@ executables: []
|
|
60
74
|
extensions: []
|
61
75
|
extra_rdoc_files: []
|
62
76
|
files:
|
63
|
-
-
|
77
|
+
- .gitignore
|
64
78
|
- Gemfile
|
65
79
|
- LICENSE.txt
|
66
80
|
- README.md
|
67
81
|
- Rakefile
|
68
82
|
- bulk_updater.gemspec
|
69
83
|
- lib/bulk_updater.rb
|
70
|
-
-
|
84
|
+
- test/bulk_updater_test.rb
|
85
|
+
- test/fake_connection.rb
|
86
|
+
- test/test_helper.rb
|
71
87
|
homepage: https://github.com/jaturken/bulk_updater
|
72
88
|
licenses:
|
73
89
|
- MIT
|
@@ -78,19 +94,22 @@ require_paths:
|
|
78
94
|
- lib
|
79
95
|
required_ruby_version: !ruby/object:Gem::Requirement
|
80
96
|
requirements:
|
81
|
-
- -
|
97
|
+
- - '>='
|
82
98
|
- !ruby/object:Gem::Version
|
83
99
|
version: '0'
|
84
100
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
101
|
requirements:
|
86
|
-
- -
|
102
|
+
- - '>='
|
87
103
|
- !ruby/object:Gem::Version
|
88
104
|
version: '0'
|
89
105
|
requirements: []
|
90
106
|
rubyforge_project:
|
91
|
-
rubygems_version: 2.
|
107
|
+
rubygems_version: 2.0.3
|
92
108
|
signing_key:
|
93
109
|
specification_version: 4
|
94
110
|
summary: Generate and execute SQL UPDATE for bulk updating multiple records by one
|
95
111
|
request.
|
96
|
-
test_files:
|
112
|
+
test_files:
|
113
|
+
- test/bulk_updater_test.rb
|
114
|
+
- test/fake_connection.rb
|
115
|
+
- test/test_helper.rb
|
data/lib/bulk_updater/version.rb
DELETED