bulk_updater 0.0.1 → 0.0.2

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: 0602240cc3436e129c8b7aa97fbc9d4ac7e809fd
4
- data.tar.gz: 7a5c7b5672aa89bb47067bb36b70364f33db0442
3
+ metadata.gz: 2baae495ca7a7c60ede032edaaeabf4126d261a2
4
+ data.tar.gz: 444e1dea03657b0ad8fdd2ff9ee767ac499c071d
5
5
  SHA512:
6
- metadata.gz: efd0b1749f840d68860c0a490d3ea4942d5d0b07bdf2c43bbff6a2e4c6cd35942082c1e4f6c656c1083c72862a9710166d61f7b7b184523abd514d81aed8b3c1
7
- data.tar.gz: 0bac70e0c18c7fae2352f4da12dac97d47107ebad07e0dc435ec2cbaa87020ae5c1c0f45cde9ffe9b6cf6f5133d18dda75bfc57b4c937e106cfd3c78959f0f50
6
+ metadata.gz: e037db7978e15a00877668c13678a348eb6f425a73483ba6faf013927b4220b6e4245a9a8b8db8c9c2135c64a15d490b2187857487d9ea8da69b3d032cefd351
7
+ data.tar.gz: 77c4da2b34ba53dba9f2151142e5f284057e30ee36f57d8bf2943e54c6db0adf31e524d17dbea8ad173112a0e42c968440bac34294d7d080503c0ca9d15c391d
data/Rakefile CHANGED
@@ -1,2 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rake/testtask'
2
3
 
4
+ Rake::TestTask.new do |t|
5
+ t.libs << 'test'
6
+ t.pattern = "test/*_test.rb"
7
+ end
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 = BulkUpdater::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
- case_conditions = data.map do |data_unit|
44
- case_condition = when_then(column, data_unit)
39
+ conditions = data.map do |data_unit|
40
+ when_then(column, data_unit)
45
41
  end.compact.join(' ')
46
- if case_conditions.present?
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.to_s} = #{value}"
50
+ "#{column_to_find} = #{value}"
57
51
  end.compact.join(' AND ')
58
52
  update_value = data_unit[column_to_update]
59
- if update_value.present?
60
- update_value = quote_value(update_value)
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
- ActiveRecord::Base.connection.quote(value)
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
@@ -0,0 +1,9 @@
1
+ class FakeConnection
2
+ def quote(value)
3
+ value.to_s
4
+ end
5
+
6
+ def execute(sql)
7
+ sql
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ require 'bulk_updater'
2
+ require 'minitest/unit'
3
+ require 'minitest/autorun'
4
+ require 'minitest/mock'
5
+ require 'minitest/pride'
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.1
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-04-22 00:00:00.000000000 Z
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
- - ".gitignore"
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
- - lib/bulk_updater/version.rb
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.2.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
@@ -1,3 +0,0 @@
1
- module BulkUpdater
2
- VERSION = "0.0.1"
3
- end