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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cb05183f08ea309e144cdbcffaf26008e4dc7f45
4
- data.tar.gz: 30367bed82e96ea4d079b9806b027a8f2bf031b1
3
+ metadata.gz: f84a4041a532127bb4bb9117fc11ecda4992f7ff
4
+ data.tar.gz: 51596a49ea5ee3f71eb6e375bc26562d90a4bf8a
5
5
  SHA512:
6
- metadata.gz: b1f7bc135acc5a1a4833dfd510f0ac870cdc4b84fa63400fc000df6c7a462e08110574bbc7f159e358c1771fa9b00dea0d4eb35e6c788fafc77ef544370bbe50
7
- data.tar.gz: 8f0ce99c9dd7ccb2ef814b9f000aeb31105a4f78f1ea51a6d7e9ee2fb1b015461dd5e23cdea63db23e9101fdf586681f192e0810bd4c63009ed333b051b1a9de
6
+ metadata.gz: 9bdd4d235dfa5ff8e92b2e59877c6a1cafd7f29d1fa50d6dced92e72aceab149a0f55b5d24058992e4adf38ff65f98bd9ea6289d783d391ad3dacb3faee4fa3e
7
+ data.tar.gz: 077019dc9f7008c13fab4cc2975e259fbcb2d17eb5f3d56dfcc744e0bf065b4705c38d6c333d91c8ba505b2b8038001a0b43515c3207f3577a816730a110279a
data/.gitignore CHANGED
@@ -1,2 +1,5 @@
1
1
  gemfiles/*.gemfile.lock
2
2
  Gemfile.lock
3
+ # Ignore Coverage Report
4
+ coverage/.last_run.json
5
+ coverage/.resultset.json
data/Appraisals CHANGED
@@ -5,11 +5,11 @@ appraise "rails3-1" do
5
5
  end
6
6
 
7
7
  appraise "rails3-2" do
8
- version = "3.2.13"
8
+ version = "3.2.14"
9
9
  gem 'activerecord', version
10
10
  end
11
11
 
12
12
  appraise "rails4-0" do
13
- version = "4.0.0.beta1"
13
+ version = "4.0.0"
14
14
  gem 'activerecord', version
15
15
  end
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', '>= 1.0.0.RC1' # Need RC1 for Rails 4 support
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
  [![Build Status](https://travis-ci.org/PikachuEXE/where_lower.png?branch=master)](https://travis-ci.org/PikachuEXE/where_lower)
13
+ [![Gem Version](https://badge.fury.io/rb/where_lower.png)](http://badge.fury.io/rb/where_lower)
14
+ [![Dependency Status](https://gemnasium.com/PikachuEXE/where_lower.png)](https://gemnasium.com/PikachuEXE/where_lower)
15
+ [![Coverage Status](https://coveralls.io/repos/PikachuEXE/where_lower/badge.png)](https://coveralls.io/r/PikachuEXE/where_lower)
16
+ [![Code Climate](https://codeclimate.com/github/PikachuEXE/where_lower.png)](https://codeclimate.com/github/PikachuEXE/where_lower)
13
17
 
14
18
  Install
15
19
  =======
@@ -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", ">= 1.0.0.RC1"
10
+ gem "database_cleaner"
11
+ gem "coveralls", :require=>false
10
12
  gem "activerecord", "3.1.12"
11
13
 
12
14
  gemspec :path=>"../"
@@ -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", ">= 1.0.0.RC1"
10
- gem "activerecord", "3.2.13"
10
+ gem "database_cleaner"
11
+ gem "coveralls", :require=>false
12
+ gem "activerecord", "3.2.14"
11
13
 
12
14
  gemspec :path=>"../"
@@ -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", ">= 1.0.0.RC1"
10
- gem "activerecord", "4.0.0.beta1"
10
+ gem "database_cleaner"
11
+ gem "coveralls", :require=>false
12
+ gem "activerecord", "4.0.0"
11
13
 
12
14
  gemspec :path=>"../"
@@ -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
- table = self.arel_table
13
-
14
- fields.each do |field_name, value|
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
@@ -1,3 +1,3 @@
1
1
  module WhereLower
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
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
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe WhereLower do
4
4
 
5
- let(:parent_name) { 'Parent #1' }
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', '>= 1.0.0.RC1'
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.1.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-04-12 00:00:00.000000000 Z
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: 1.0.0.RC1
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: 1.0.0.RC1
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.3
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: