where_lower 0.1.0 → 0.2.0
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/.gitignore +3 -0
- data/Appraisals +2 -2
- data/Gemfile +3 -1
- data/README.md +4 -0
- data/gemfiles/rails3_1.gemfile +3 -1
- data/gemfiles/rails3_2.gemfile +4 -2
- data/gemfiles/rails4_0.gemfile +4 -2
- data/lib/where_lower/core.rb +44 -23
- data/lib/where_lower/version.rb +1 -1
- data/spec/spec_helper.rb +8 -0
- data/spec/where_lower_spec.rb +33 -1
- data/where_lower.gemspec +2 -1
- metadata +20 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f84a4041a532127bb4bb9117fc11ecda4992f7ff
|
4
|
+
data.tar.gz: 51596a49ea5ee3f71eb6e375bc26562d90a4bf8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9bdd4d235dfa5ff8e92b2e59877c6a1cafd7f29d1fa50d6dced92e72aceab149a0f55b5d24058992e4adf38ff65f98bd9ea6289d783d391ad3dacb3faee4fa3e
|
7
|
+
data.tar.gz: 077019dc9f7008c13fab4cc2975e259fbcb2d17eb5f3d56dfcc744e0bf065b4705c38d6c333d91c8ba505b2b8038001a0b43515c3207f3577a816730a110279a
|
data/.gitignore
CHANGED
data/Appraisals
CHANGED
data/Gemfile
CHANGED
@@ -2,8 +2,10 @@ source 'https://rubygems.org'
|
|
2
2
|
gemspec
|
3
3
|
|
4
4
|
gem 'activerecord'
|
5
|
+
gem 'squeel'
|
5
6
|
gem 'appraisal'
|
6
7
|
gem 'rake'
|
7
8
|
gem 'sqlite3'
|
8
9
|
gem 'rspec'
|
9
|
-
gem 'database_cleaner'
|
10
|
+
gem 'database_cleaner'
|
11
|
+
gem 'coveralls', require: false
|
data/README.md
CHANGED
@@ -10,6 +10,10 @@ Tested against:
|
|
10
10
|
- Ruby `1.9.2`, `1.9.3`, `2.0.0` (except Rails 4 with `1.9.2`)
|
11
11
|
|
12
12
|
[](https://travis-ci.org/PikachuEXE/where_lower)
|
13
|
+
[](http://badge.fury.io/rb/where_lower)
|
14
|
+
[](https://gemnasium.com/PikachuEXE/where_lower)
|
15
|
+
[](https://coveralls.io/r/PikachuEXE/where_lower)
|
16
|
+
[](https://codeclimate.com/github/PikachuEXE/where_lower)
|
13
17
|
|
14
18
|
Install
|
15
19
|
=======
|
data/gemfiles/rails3_1.gemfile
CHANGED
@@ -2,11 +2,13 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
+
gem "squeel"
|
5
6
|
gem "appraisal"
|
6
7
|
gem "rake"
|
7
8
|
gem "sqlite3"
|
8
9
|
gem "rspec"
|
9
|
-
gem "database_cleaner"
|
10
|
+
gem "database_cleaner"
|
11
|
+
gem "coveralls", :require=>false
|
10
12
|
gem "activerecord", "3.1.12"
|
11
13
|
|
12
14
|
gemspec :path=>"../"
|
data/gemfiles/rails3_2.gemfile
CHANGED
@@ -2,11 +2,13 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
+
gem "squeel"
|
5
6
|
gem "appraisal"
|
6
7
|
gem "rake"
|
7
8
|
gem "sqlite3"
|
8
9
|
gem "rspec"
|
9
|
-
gem "database_cleaner"
|
10
|
-
gem "
|
10
|
+
gem "database_cleaner"
|
11
|
+
gem "coveralls", :require=>false
|
12
|
+
gem "activerecord", "3.2.14"
|
11
13
|
|
12
14
|
gemspec :path=>"../"
|
data/gemfiles/rails4_0.gemfile
CHANGED
@@ -2,11 +2,13 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
+
gem "squeel"
|
5
6
|
gem "appraisal"
|
6
7
|
gem "rake"
|
7
8
|
gem "sqlite3"
|
8
9
|
gem "rspec"
|
9
|
-
gem "database_cleaner"
|
10
|
-
gem "
|
10
|
+
gem "database_cleaner"
|
11
|
+
gem "coveralls", :require=>false
|
12
|
+
gem "activerecord", "4.0.0"
|
11
13
|
|
12
14
|
gemspec :path=>"../"
|
data/lib/where_lower/core.rb
CHANGED
@@ -8,34 +8,55 @@ module WhereLower
|
|
8
8
|
def where_lower(fields)
|
9
9
|
fields.is_a?(Hash) or raise AugumentError, 'fields is not a Hash'
|
10
10
|
|
11
|
+
spawn_lower_scope(fields)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def spawn_lower_scope(fields)
|
11
17
|
scope = self
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
case value
|
16
|
-
when Range
|
17
|
-
value = Range.new(value.begin.to_s.downcase, value.end.to_s.downcase, value.exclude_end?)
|
18
|
-
scope = scope.where(
|
19
|
-
table[field_name].lower.in(value)
|
20
|
-
)
|
21
|
-
when Array # Assume the content to be string, or can be converted to string
|
22
|
-
value = value.to_a.map {|x| x.to_s.downcase}
|
23
|
-
scope = scope.where(
|
24
|
-
table[field_name].lower.in(value)
|
25
|
-
)
|
26
|
-
when String
|
27
|
-
scope = scope.where(
|
28
|
-
table[field_name].lower.eq(table.lower(value))
|
29
|
-
)
|
30
|
-
else # other single value classes
|
31
|
-
scope = scope.where(
|
32
|
-
table[field_name].eq(value)
|
33
|
-
)
|
34
|
-
end
|
18
|
+
|
19
|
+
fields.each do |name, value|
|
20
|
+
scope = spawn_lower_scope_by_type(scope, name, value)
|
35
21
|
end
|
36
22
|
|
37
23
|
scope
|
38
24
|
end
|
25
|
+
|
26
|
+
def spawn_lower_scope_by_type(scope, column_name, value)
|
27
|
+
case value
|
28
|
+
when Range
|
29
|
+
value = Range.new(value.begin.to_s.downcase, value.end.to_s.downcase, value.exclude_end?)
|
30
|
+
scope = scope.where(
|
31
|
+
lower_query_string(column_name, :in), value
|
32
|
+
)
|
33
|
+
when Array # Assume the content to be string, or can be converted to string
|
34
|
+
value = value.to_a.map {|x| x.to_s.downcase}
|
35
|
+
scope = scope.where(
|
36
|
+
lower_query_string(column_name, :in), value
|
37
|
+
)
|
38
|
+
when String
|
39
|
+
value = value.downcase
|
40
|
+
scope = scope.where(
|
41
|
+
lower_query_string(column_name), value
|
42
|
+
)
|
43
|
+
else # other single value classes
|
44
|
+
scope = scope.where(column_name => value)
|
45
|
+
end
|
46
|
+
|
47
|
+
scope
|
48
|
+
end
|
49
|
+
|
50
|
+
# @param column_name [String/Symbol] name of column
|
51
|
+
# @param type [Symbol] :in or :eq
|
52
|
+
def lower_query_string(column_name, type = :eq)
|
53
|
+
case type
|
54
|
+
when :in
|
55
|
+
"lower(#{column_name}) IN (?)"
|
56
|
+
else #:eq
|
57
|
+
"lower(#{column_name}) = ?"
|
58
|
+
end
|
59
|
+
end
|
39
60
|
end
|
40
61
|
end
|
41
62
|
end
|
data/lib/where_lower/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,11 @@
|
|
1
|
+
require 'coveralls'
|
2
|
+
Coveralls.wear!('rails')
|
3
|
+
|
1
4
|
require 'active_record'
|
2
5
|
require 'where_lower'
|
6
|
+
|
7
|
+
require 'squeel'
|
8
|
+
|
3
9
|
require 'database_cleaner'
|
4
10
|
require 'logger'
|
5
11
|
|
@@ -58,6 +64,8 @@ end
|
|
58
64
|
|
59
65
|
class Parent < ActiveRecord::Base
|
60
66
|
has_many :children, inverse_of: :parent
|
67
|
+
|
68
|
+
scope :latest_first, proc { order('created_at DESC') }
|
61
69
|
end
|
62
70
|
|
63
71
|
class Child < ActiveRecord::Base
|
data/spec/where_lower_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe WhereLower do
|
4
4
|
|
5
|
-
let(:parent_name) { 'Parent
|
5
|
+
let(:parent_name) { 'Parent' }
|
6
6
|
let(:parent_name2) { 'Parent #10' }
|
7
7
|
let(:parent_name3) { 'Parent #20' }
|
8
8
|
let(:parent_description) { 'I need a Medic!' }
|
@@ -73,10 +73,12 @@ describe WhereLower do
|
|
73
73
|
it 'works like where' do
|
74
74
|
Parent.where_lower(name: [parent_name, parent_name2]).should_not be_empty
|
75
75
|
Parent.where_lower(name: [parent_name2, parent_name3]).should be_empty
|
76
|
+
Parent.where_lower(name: []).should be_empty
|
76
77
|
end
|
77
78
|
it 'works like where case insensitively' do
|
78
79
|
Parent.where_lower(name: [parent_name.swapcase, parent_name2.swapcase]).should_not be_empty
|
79
80
|
Parent.where_lower(name: [parent_name2.swapcase, parent_name3.swapcase]).should be_empty
|
81
|
+
Parent.where_lower(name: []).should be_empty
|
80
82
|
end
|
81
83
|
end
|
82
84
|
|
@@ -112,6 +114,36 @@ describe WhereLower do
|
|
112
114
|
end.to_not change(Parent, :count)
|
113
115
|
end
|
114
116
|
end
|
117
|
+
|
118
|
+
|
119
|
+
describe 'with chaining' do
|
120
|
+
it 'can be chained with where' do
|
121
|
+
Parent.where_lower(name: parent_name).where(description: parent_description).should_not be_empty
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'can be chained with where_lower' do
|
125
|
+
Parent.where_lower(name: parent_name).where_lower(description: parent_description).should_not be_empty
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'can be chained with order' do
|
129
|
+
Parent.where_lower(name: parent_name).order(:description).should_not be_empty
|
130
|
+
end
|
131
|
+
|
132
|
+
|
133
|
+
it 'can be chained with name scope' do
|
134
|
+
Parent.where_lower(name: parent_name).latest_first.should_not be_empty
|
135
|
+
end
|
136
|
+
|
137
|
+
|
138
|
+
it 'can be chained with where in squeel' do
|
139
|
+
description_value = parent_description
|
140
|
+
Parent.where_lower(name: parent_name).where{description.eq description_value}.should_not be_empty
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'can be chained with order in squeel' do
|
144
|
+
Parent.where_lower(name: parent_name).order{description}.should_not be_empty
|
145
|
+
end
|
146
|
+
end
|
115
147
|
end
|
116
148
|
end
|
117
149
|
|
data/where_lower.gemspec
CHANGED
@@ -28,7 +28,8 @@ Gem::Specification.new do |s|
|
|
28
28
|
|
29
29
|
s.add_development_dependency 'rake'
|
30
30
|
s.add_development_dependency 'appraisal'
|
31
|
+
s.add_development_dependency 'squeel'
|
31
32
|
s.add_development_dependency 'sqlite3'
|
32
33
|
s.add_development_dependency 'rspec'
|
33
|
-
s.add_development_dependency 'database_cleaner'
|
34
|
+
s.add_development_dependency 'database_cleaner'
|
34
35
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: where_lower
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- PikachuEXE
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -58,6 +58,20 @@ dependencies:
|
|
58
58
|
- - '>='
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '0'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: squeel
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
61
75
|
- !ruby/object:Gem::Dependency
|
62
76
|
name: sqlite3
|
63
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -92,14 +106,14 @@ dependencies:
|
|
92
106
|
requirements:
|
93
107
|
- - '>='
|
94
108
|
- !ruby/object:Gem::Version
|
95
|
-
version:
|
109
|
+
version: '0'
|
96
110
|
type: :development
|
97
111
|
prerelease: false
|
98
112
|
version_requirements: !ruby/object:Gem::Requirement
|
99
113
|
requirements:
|
100
114
|
- - '>='
|
101
115
|
- !ruby/object:Gem::Version
|
102
|
-
version:
|
116
|
+
version: '0'
|
103
117
|
description: ActiveRecord provides no method for case insensitive version of `where`
|
104
118
|
method. So here is one. No longer need to use SQL fragment yeah!
|
105
119
|
email:
|
@@ -144,10 +158,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
158
|
version: '0'
|
145
159
|
requirements: []
|
146
160
|
rubyforge_project:
|
147
|
-
rubygems_version: 2.0.
|
161
|
+
rubygems_version: 2.0.7
|
148
162
|
signing_key:
|
149
163
|
specification_version: 4
|
150
164
|
summary: Provide an easy way to use case insensitive `where` in ActiveRecord.
|
151
165
|
test_files:
|
152
166
|
- spec/spec_helper.rb
|
153
167
|
- spec/where_lower_spec.rb
|
168
|
+
has_rdoc:
|