query_methods_extend 0.0.5 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -9
- data/lib/query_methods_extend.rb +1 -0
- data/lib/query_methods_extend/activerecord.rb +6 -5
- data/lib/query_methods_extend/association.rb +1 -1
- data/lib/query_methods_extend/like.rb +20 -18
- data/lib/query_methods_extend/operators.rb +20 -18
- data/lib/query_methods_extend/or.rb +3 -2
- data/lib/query_methods_extend/railtie.rb +9 -0
- data/lib/query_methods_extend/spec/{association.rb → association_spec.rb} +1 -0
- data/lib/query_methods_extend/spec/{operators.rb → operators_spec.rb} +0 -0
- data/lib/query_methods_extend/spec/{or.rb → or_spec.rb} +0 -0
- data/lib/query_methods_extend/spec/{union.rb → union_spec.rb} +0 -0
- data/lib/query_methods_extend/union.rb +2 -2
- data/lib/query_methods_extend/version.rb +2 -2
- data/query_methods_extend.gemspec +2 -1
- data/spec/spec_helper.rb +1 -0
- data/spec/supports/migrate.rb +6 -4
- metadata +22 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c4039add270257fd9f5c8c1799aec94af2603eb
|
4
|
+
data.tar.gz: 7a45d215f5a8f2307e60ccbc8d7feb594f0e3ff5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 329c27fa87fc6f178f55ddb12d07fe2a5e69c11f74cd391d397ee1a0b5ce649a3041a99f55937290d4b79635bd08b3981d2e140881028a2a3eb6f9519114b660
|
7
|
+
data.tar.gz: bb9845d99f036e524aaf7037df007351ee02e63e8200927a7d2c6a3c6879ee641a7202c697e90f81f1ffefacaaa73d2c56c7b5076af73f7f883a2131958d623e
|
data/README.md
CHANGED
@@ -11,30 +11,22 @@ Add this line to your application's Gemfile:
|
|
11
11
|
gem 'query_methods_extend'
|
12
12
|
```
|
13
13
|
|
14
|
-
And model file:
|
15
|
-
```ruby
|
16
|
-
include QueryMethodsExtend
|
17
|
-
```
|
18
|
-
|
19
14
|
## Usage
|
20
15
|
|
21
16
|
The structure book models:
|
22
17
|
```ruby
|
23
18
|
class Store < ActiveRecord::Base
|
24
|
-
include QueryMethodsExtend
|
25
19
|
has_many :categories
|
26
20
|
end
|
27
21
|
// Store(id: integer, address: string)
|
28
22
|
|
29
23
|
class Category < ActiveRecord::Base
|
30
|
-
include QueryMethodsExtend
|
31
24
|
belongs_to :store
|
32
25
|
has_many :books
|
33
26
|
end
|
34
27
|
// Category(id: integer, name: string, store_id: integer)
|
35
28
|
|
36
29
|
class Book < ActiveRecord::Base
|
37
|
-
include QueryMethodsExtend
|
38
30
|
belongs_to :category
|
39
31
|
end
|
40
32
|
// Book(id: integer, name: string, price: integer, category_id: integer)
|
@@ -57,7 +49,7 @@ SELECT "categories".* FROM "categories"
|
|
57
49
|
)
|
58
50
|
```
|
59
51
|
|
60
|
-
And take **all books in the stores** in Vietnam
|
52
|
+
And take **all books in the stores** in Vietnam:
|
61
53
|
```ruby
|
62
54
|
Store.where(address: 'Vietnam').categories.books
|
63
55
|
|
data/lib/query_methods_extend.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
module ActiveRecord
|
2
2
|
module QueryMethods
|
3
3
|
include QueryMethodsExtend::Association
|
4
|
+
include QueryMethodsExtend::Like
|
5
|
+
include QueryMethodsExtend::Operators
|
6
|
+
include QueryMethodsExtend::OrQuery
|
7
|
+
include QueryMethodsExtend::Union
|
4
8
|
|
5
9
|
def method_missing(method_name, *args, &block)
|
6
|
-
|
7
|
-
super
|
8
|
-
else
|
9
|
-
check_association_exist(method_name) || super
|
10
|
-
end
|
10
|
+
check_association_exist(method_name) || super
|
11
11
|
end
|
12
|
+
|
12
13
|
end
|
13
14
|
end
|
@@ -12,7 +12,7 @@ module QueryMethodsExtend
|
|
12
12
|
|
13
13
|
association = self.try(:reflect_on_association, method_name)
|
14
14
|
result = false
|
15
|
-
if association && association.macro == :has_many
|
15
|
+
if association && association.try(:macro) == :has_many
|
16
16
|
model_reflect = association.inverse_of
|
17
17
|
model = model_reflect.active_record
|
18
18
|
query = self.select(association.primary_key_column.name)
|
@@ -3,38 +3,40 @@ module QueryMethodsExtend
|
|
3
3
|
included do
|
4
4
|
attr_accessor :extend_like_string
|
5
5
|
|
6
|
-
|
6
|
+
def self.like agrs
|
7
7
|
@extend_like_string = '%{?}%'
|
8
8
|
like_basic agrs
|
9
|
-
|
9
|
+
end
|
10
10
|
|
11
|
-
|
11
|
+
def self.l_like agrs
|
12
12
|
@extend_like_string = '%{?}'
|
13
13
|
like_basic agrs
|
14
|
-
|
14
|
+
end
|
15
15
|
|
16
|
-
|
16
|
+
def self.r_like agrs
|
17
17
|
@extend_like_string = '{?}%'
|
18
18
|
like_basic agrs
|
19
|
-
|
19
|
+
end
|
20
20
|
|
21
|
-
|
21
|
+
def self.regex_like agrs
|
22
22
|
@extend_like_string = '{?}'
|
23
23
|
like_basic agrs
|
24
|
-
|
24
|
+
end
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
26
|
+
private
|
27
|
+
def self.like_basic agrs
|
28
|
+
if agrs.class == Hash
|
29
|
+
items = self
|
30
|
+
agrs.each do |agr|
|
31
|
+
field, value = agr
|
32
|
+
items = items.where("#{self.table_name}.#{field} LIKE ?", @extend_like_string.gsub('{?}', value.to_s))
|
33
|
+
end
|
34
|
+
return items
|
35
|
+
else
|
36
|
+
raise "Like method with agruments should be a HASH"
|
32
37
|
end
|
33
|
-
return items
|
34
|
-
else
|
35
|
-
raise "Like method with agruments should be a HASH"
|
36
38
|
end
|
37
|
-
|
39
|
+
|
38
40
|
end
|
39
41
|
end
|
40
42
|
end
|
@@ -1,38 +1,40 @@
|
|
1
1
|
module QueryMethodsExtend
|
2
2
|
module Operators extend ActiveSupport::Concern
|
3
3
|
included do
|
4
|
-
|
4
|
+
def self.gt agrs
|
5
5
|
@extend_operator_string = '>'
|
6
6
|
operator_basic agrs
|
7
|
-
|
7
|
+
end
|
8
8
|
|
9
|
-
|
9
|
+
def self.gteq agrs
|
10
10
|
@extend_operator_string = '>='
|
11
11
|
operator_basic agrs
|
12
|
-
|
12
|
+
end
|
13
13
|
|
14
|
-
|
14
|
+
def self.lt agrs
|
15
15
|
@extend_operator_string = '<'
|
16
16
|
operator_basic agrs
|
17
|
-
|
17
|
+
end
|
18
18
|
|
19
|
-
|
19
|
+
def self.lteq agrs
|
20
20
|
@extend_operator_string = '<='
|
21
21
|
operator_basic agrs
|
22
|
-
|
22
|
+
end
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
24
|
+
private
|
25
|
+
def self.operator_basic agrs
|
26
|
+
if agrs.class == Hash
|
27
|
+
items = self
|
28
|
+
agrs.each do |agr|
|
29
|
+
field, value = agr
|
30
|
+
items = items.where("#{self.table_name}.#{field} #{@extend_operator_string} ?", value)
|
31
|
+
end
|
32
|
+
return items
|
33
|
+
else
|
34
|
+
raise "Operators '#{@extend_operator_string}' with agruments should be a HASH"
|
30
35
|
end
|
31
|
-
return items
|
32
|
-
else
|
33
|
-
raise "Operators '#{@extend_operator_string}' with agruments should be a HASH"
|
34
36
|
end
|
35
|
-
|
37
|
+
|
36
38
|
end
|
37
39
|
end
|
38
40
|
end
|
@@ -30,7 +30,7 @@ module QueryMethodsExtend
|
|
30
30
|
|
31
31
|
module OrQuery extend ActiveSupport::Concern
|
32
32
|
included do
|
33
|
-
|
33
|
+
def self.or agrs = nil
|
34
34
|
if agrs
|
35
35
|
if agrs.class == Hash
|
36
36
|
act = self.unscoped.where(agrs).where_values.map{ |data| data.to_sql }.join(' OR ')
|
@@ -41,7 +41,8 @@ module QueryMethodsExtend
|
|
41
41
|
else
|
42
42
|
all.extending(OrExtend).set_is_query_or(true)
|
43
43
|
end
|
44
|
-
|
44
|
+
end
|
45
45
|
end
|
46
46
|
end
|
47
|
+
|
47
48
|
end
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module QueryMethodsExtend
|
2
2
|
module Union extend ActiveSupport::Concern
|
3
3
|
included do
|
4
|
-
|
4
|
+
def self.union query
|
5
5
|
query_self = self.all.to_sql
|
6
6
|
self.unscoped.from("(#{query_self} UNION #{query.to_sql}) AS #{self.table_name}")
|
7
|
-
|
7
|
+
end
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
@@ -1,3 +1,3 @@
|
|
1
1
|
module QueryMethodsExtend
|
2
|
-
VERSION =
|
3
|
-
end
|
2
|
+
VERSION = '1.0.0'
|
3
|
+
end
|
@@ -18,7 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.
|
21
|
+
spec.add_development_dependency "activerecord", ">= 3.0"
|
22
|
+
spec.add_development_dependency 'rails', '~> 4.0'
|
22
23
|
|
23
24
|
spec.add_development_dependency "bundler", "~> 1.7"
|
24
25
|
spec.add_development_dependency "rake", "~> 10.0"
|
data/spec/spec_helper.rb
CHANGED
data/spec/supports/migrate.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
require "query_methods_extend"
|
2
|
-
require "query_methods_extend/
|
2
|
+
# require "query_methods_extend/railtie"
|
3
3
|
require "query_methods_extend/association"
|
4
4
|
require "query_methods_extend/like"
|
5
5
|
require "query_methods_extend/operators"
|
6
6
|
require "query_methods_extend/or"
|
7
7
|
require "query_methods_extend/union"
|
8
|
-
require
|
9
|
-
|
10
|
-
require 'models/
|
8
|
+
require "query_methods_extend/activerecord"
|
9
|
+
|
10
|
+
require 'models/book'
|
11
|
+
require 'models/category'
|
12
|
+
require 'models/store'
|
11
13
|
|
12
14
|
def run_migrate
|
13
15
|
ActiveRecord::Base.establish_connection(
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: query_methods_extend
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alicuche
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -17,13 +17,27 @@ dependencies:
|
|
17
17
|
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '3.0'
|
20
|
-
type: :
|
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: '3.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rails
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '4.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '4.0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -99,11 +113,12 @@ files:
|
|
99
113
|
- lib/query_methods_extend/like.rb
|
100
114
|
- lib/query_methods_extend/operators.rb
|
101
115
|
- lib/query_methods_extend/or.rb
|
102
|
-
- lib/query_methods_extend/
|
116
|
+
- lib/query_methods_extend/railtie.rb
|
117
|
+
- lib/query_methods_extend/spec/association_spec.rb
|
103
118
|
- lib/query_methods_extend/spec/like_spec.rb
|
104
|
-
- lib/query_methods_extend/spec/
|
105
|
-
- lib/query_methods_extend/spec/
|
106
|
-
- lib/query_methods_extend/spec/
|
119
|
+
- lib/query_methods_extend/spec/operators_spec.rb
|
120
|
+
- lib/query_methods_extend/spec/or_spec.rb
|
121
|
+
- lib/query_methods_extend/spec/union_spec.rb
|
107
122
|
- lib/query_methods_extend/union.rb
|
108
123
|
- lib/query_methods_extend/version.rb
|
109
124
|
- query_methods_extend.gemspec
|