mysql_framework 2.0.0.rc1 → 2.0.0
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
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67610b6f4fad6d1ae4feca440f9952c02c92e56dc9add1f8ae65c5258cbb70e5
|
4
|
+
data.tar.gz: d27443bd3f0d37eecc86471f43a9a67047dea2a873b122851cb32b3f41062c47
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: def004956a96d594de0afe4e6b2f6033d539b0affc5ba08e9a83813f46dd8f0beaa9d0e6e65d45bb985cbd931c5d33c39a0b093412850fb8e7acd33130418893
|
7
|
+
data.tar.gz: bb88d080d02dbf476de3f7c94ff4982b93fb92ac63aaf7a472944a13859de7bf01458e1cb8b6e9af6c2b38e2b49e277c610abaed4d078f6a43d9df01ba2f6517
|
@@ -3,18 +3,54 @@
|
|
3
3
|
module MysqlFramework
|
4
4
|
# This class is used to represent a Sql Condition for a column.
|
5
5
|
class SqlCondition
|
6
|
+
NIL_COMPARISONS = ['IS NULL', 'IS NOT NULL'].freeze
|
7
|
+
|
6
8
|
# This method is called to get the value of this condition for prepared statements.
|
7
9
|
attr_reader :value
|
8
10
|
|
9
|
-
|
11
|
+
# Creates a new SqlCondition using the given parameters.
|
12
|
+
#
|
13
|
+
# @raise ArgumentError if comparison is 'IS NULL' and value is not nil
|
14
|
+
# @raise ArgumentError if comparison is 'IS NOT NULL' and value is not nil
|
15
|
+
# @raise ArgumentError if comparison is neither 'IS NULL' or 'IS NOT NULL' and value is nil
|
16
|
+
#
|
17
|
+
# @param column [String] - the name of the column to use in the comparison
|
18
|
+
# @param comparison [String] - the MySQL comparison operator to use
|
19
|
+
# @param value [Object] - the value to use in the comparison (default nil)
|
20
|
+
def initialize(column:, comparison:, value: nil)
|
10
21
|
@column = column
|
11
22
|
@comparison = comparison
|
23
|
+
|
24
|
+
validate(value)
|
12
25
|
@value = value
|
13
26
|
end
|
14
27
|
|
15
28
|
# This method is called to get the condition as a string for a sql prepared statement
|
29
|
+
#
|
30
|
+
# @return [String]
|
16
31
|
def to_s
|
32
|
+
return "#{@column} #{@comparison.upcase}" if nil_comparison?
|
33
|
+
|
17
34
|
"#{@column} #{@comparison} ?"
|
18
35
|
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def nil_comparison?
|
40
|
+
NIL_COMPARISONS.include?(@comparison.upcase)
|
41
|
+
end
|
42
|
+
|
43
|
+
def validate(value)
|
44
|
+
raise ArgumentError, "Cannot set value when comparison is #{@comparison}" if invalid_null_condition?(value)
|
45
|
+
raise ArgumentError, "Comparison of #{@comparison} requires value to be not nil" if invalid_nil_value?(value)
|
46
|
+
end
|
47
|
+
|
48
|
+
def invalid_null_condition?(value)
|
49
|
+
nil_comparison? && value != nil
|
50
|
+
end
|
51
|
+
|
52
|
+
def invalid_nil_value?(value)
|
53
|
+
nil_comparison? == false && value.nil?
|
54
|
+
end
|
19
55
|
end
|
20
56
|
end
|
@@ -8,4 +8,82 @@ describe MysqlFramework::SqlCondition do
|
|
8
8
|
expect(subject.to_s).to eq('version = ?')
|
9
9
|
end
|
10
10
|
end
|
11
|
+
|
12
|
+
context 'when comparison is neither IS NULL or IS NOT NULL' do
|
13
|
+
context 'when value is nil' do
|
14
|
+
subject { described_class.new(column: 'version', comparison: '=', value: nil) }
|
15
|
+
|
16
|
+
it 'does raises an ArgumentError' do
|
17
|
+
expect { subject }.to raise_error(ArgumentError, "Comparison of = requires value to be not nil")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'when comparison is IS NULL' do
|
23
|
+
subject { described_class.new(column: 'version', comparison: 'IS NULL') }
|
24
|
+
|
25
|
+
it 'has a nil value by default' do
|
26
|
+
expect(subject.value).to be_nil
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'when a value is passed to the constructor' do
|
30
|
+
subject { described_class.new(column: 'version', comparison: 'IS NULL', value: 'foo') }
|
31
|
+
|
32
|
+
describe '#new' do
|
33
|
+
it 'raises an ArgumentError if value is set' do
|
34
|
+
expect { subject }.to raise_error(ArgumentError, 'Cannot set value when comparison is IS NULL')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe '#to_s' do
|
40
|
+
it 'does not include a value placeholder' do
|
41
|
+
expect(subject.to_s).to eq('version IS NULL')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'when comparison is lowercase is null' do
|
47
|
+
subject { described_class.new(column: 'version', comparison: 'is null') }
|
48
|
+
|
49
|
+
describe '#to_s' do
|
50
|
+
it 'ignores case' do
|
51
|
+
expect(subject.to_s).to eq 'version IS NULL'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'when comparison is IS NOT NULL' do
|
57
|
+
subject { described_class.new(column: 'version', comparison: 'IS NOT NULL') }
|
58
|
+
|
59
|
+
it 'has a nil value by default' do
|
60
|
+
expect(subject.value).to be_nil
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'when a value is passed to the constructor' do
|
64
|
+
subject { described_class.new(column: 'version', comparison: 'IS NOT NULL', value: 'foo') }
|
65
|
+
|
66
|
+
describe '#new' do
|
67
|
+
it 'raises an ArgumentError if value is set' do
|
68
|
+
expect { subject }.to raise_error(ArgumentError, 'Cannot set value when comparison is IS NOT NULL')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe '#to_s' do
|
74
|
+
it 'does not include a value placeholder' do
|
75
|
+
expect(subject.to_s).to eq('version IS NOT NULL')
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context 'when comparison is lowercase is not null' do
|
81
|
+
subject { described_class.new(column: 'version', comparison: 'is not null') }
|
82
|
+
|
83
|
+
describe '#to_s' do
|
84
|
+
it 'ignores case' do
|
85
|
+
expect(subject.to_s).to eq 'version IS NOT NULL'
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
11
89
|
end
|
@@ -213,6 +213,13 @@ describe MysqlFramework::SqlQuery do
|
|
213
213
|
expect(subject.sql).to eq('WHERE (`gems`.`author` = ? AND `gems`.`created_at` > ?) AND (`gems`.`name` = ?)')
|
214
214
|
end
|
215
215
|
end
|
216
|
+
|
217
|
+
context 'when the condition includes an array of parameters' do
|
218
|
+
it 'concats the parameter collections' do
|
219
|
+
subject.and.where(gems[:name].in('a','b'))
|
220
|
+
expect(subject.sql).to eq('WHERE (`gems`.`author` = ? AND `gems`.`created_at` > ?) AND (`gems`.`name` IN (?, ?))')
|
221
|
+
end
|
222
|
+
end
|
216
223
|
end
|
217
224
|
|
218
225
|
describe '#and' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mysql_framework
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sage
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-06-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -133,9 +133,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
133
133
|
version: '0'
|
134
134
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- - "
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
138
|
+
version: '0'
|
139
139
|
requirements: []
|
140
140
|
rubyforge_project:
|
141
141
|
rubygems_version: 2.7.7
|