where_lower 0.1.0 → 0.2.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
  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: