queryko 1.0.2 → 1.1.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/Gemfile.lock +2 -2
- data/README.md +14 -2
- data/lib/queryko/after_attributes.rb +1 -1
- data/lib/queryko/naming.rb +31 -0
- data/lib/queryko/query_object.rb +4 -1
- data/lib/queryko/range_attributes.rb +2 -2
- data/lib/queryko/version.rb +1 -1
- data/queryko.gemspec +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7a137e9ef74fc1cb784fa9f67e9245bde68ff624adfd984e5ee2dc09439169c
|
4
|
+
data.tar.gz: 60df495dfd96bb8e25c2ec271f20eed65dc87883fb8f9519b812de8b35c65c04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 110cc3fc4e8ccea70c773ff32efaba9af14883980d40af9f5a2d908aada62a460346bd41548a72437963ea626e1139c5af9252d4c1a6d996bc3790643b979e43
|
7
|
+
data.tar.gz: e4750c2293eae142af7b9f5bbddf8e5c94736468fa9a96cd949be4bdc5715377da645f9b2c472a3eb7f2e9b8d68a3c5b7b691faaef925b48c0087160ad289b92
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
[](https://badge.fury.io/rb/queryko)
|
2
2
|
# Queryko
|
3
|
-
This gem provides additional functionality on your query objects. It will filter and paginate your query by supplying
|
3
|
+
This gem provides additional functionality on your query objects. It will filter and paginate your query by supplying arguments directly from controller params
|
4
4
|
|
5
5
|
## Installation
|
6
|
-
For now, it only works with kaminari
|
7
6
|
```ruby
|
7
|
+
# Pagination
|
8
8
|
gem 'kaminari'
|
9
|
+
#or
|
10
|
+
gem 'will_paginate'
|
11
|
+
|
12
|
+
# Query Object
|
9
13
|
gem 'queryko'
|
10
14
|
```
|
11
15
|
|
@@ -24,6 +28,8 @@ class ProductsQuery < Queryko::QueryObject
|
|
24
28
|
add_range_attributes :created_at, :price
|
25
29
|
add_searchables :name, :vendor
|
26
30
|
|
31
|
+
table_name 'my_products' # optional
|
32
|
+
|
27
33
|
def initialize params={}, relation = Product.all
|
28
34
|
super(params, relation)
|
29
35
|
end
|
@@ -34,7 +40,13 @@ end
|
|
34
40
|
Filter your query by appending `_min` or `_max` on your defined attributes. You can also filter searc3h by attribute.
|
35
41
|
As long as you defined it in your query object definition.
|
36
42
|
``` ruby
|
43
|
+
# Collection
|
37
44
|
products = ProductsQuery.new(price_min: 100, price_max: 150, name: 'Milk').call
|
45
|
+
products = ProductsQuery.new(since_id: 26).call
|
46
|
+
|
47
|
+
# Count
|
48
|
+
products = ProductsQuery.new(created_at_min: 'Jan 1, 2019').count
|
49
|
+
products = ProductsQuery.new(name: 'Bag').count
|
38
50
|
```
|
39
51
|
|
40
52
|
#### Object Methods
|
@@ -16,7 +16,7 @@ module Queryko
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
def filter_after attribute
|
19
|
-
self.relation = relation.where("#{attribute} > ?", params["after_#{attribute}".to_sym])
|
19
|
+
self.relation = relation.where("'#{defined_table_name}'.'#{attribute}' > ?", params["after_#{attribute}".to_sym])
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Queryko
|
2
|
+
module Naming
|
3
|
+
def self.included(base)
|
4
|
+
base.extend(ClassMethods)
|
5
|
+
base.class_eval do
|
6
|
+
class_attribute :defined_table_name, default: :table, instance_writer: false
|
7
|
+
set_table_name
|
8
|
+
|
9
|
+
def table_name
|
10
|
+
self.defined_table_name
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
module ClassMethods
|
16
|
+
def set_table_name
|
17
|
+
self.defined_table_name = self.inferered_from_class_name
|
18
|
+
end
|
19
|
+
|
20
|
+
def table_name(name = nil)
|
21
|
+
return self.defined_table_name unless name
|
22
|
+
self.defined_table_name = name.to_s
|
23
|
+
end
|
24
|
+
|
25
|
+
def inferered_from_class_name
|
26
|
+
# class names should be in plural form by default. No need to tableize
|
27
|
+
self.class.name.chomp('Query').split('::').last.underscore
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/queryko/query_object.rb
CHANGED
@@ -2,11 +2,14 @@ require "active_support/core_ext/class/attribute"
|
|
2
2
|
require "queryko/range_attributes"
|
3
3
|
require "queryko/searchables"
|
4
4
|
require "queryko/after_attributes"
|
5
|
+
require "queryko/naming"
|
6
|
+
|
5
7
|
module Queryko
|
6
8
|
class QueryObject
|
7
9
|
attr_reader :countable_resource
|
8
10
|
include Queryko::RangeAttributes
|
9
11
|
include Queryko::Searchables
|
12
|
+
include Queryko::Naming
|
10
13
|
# include AfterAttributes
|
11
14
|
|
12
15
|
def initialize(params = {}, rel)
|
@@ -90,7 +93,7 @@ module Queryko
|
|
90
93
|
end
|
91
94
|
|
92
95
|
def since_id
|
93
|
-
relation.where("id > ?", params[:since_id])
|
96
|
+
relation.where("'#{defined_table_name}'.'id' > ?", params[:since_id])
|
94
97
|
end
|
95
98
|
|
96
99
|
end
|
@@ -19,13 +19,13 @@ module Queryko
|
|
19
19
|
def attribute_min key
|
20
20
|
# Calm down. column_name is whitelisted. check #add_range_attributes method
|
21
21
|
column_name = key.to_s.gsub(/_min$/, "")
|
22
|
-
relation.where("#{column_name} >= ?", params[key.to_sym])
|
22
|
+
relation.where("'#{defined_table_name}'.'#{column_name}' >= ?", params[key.to_sym])
|
23
23
|
end
|
24
24
|
|
25
25
|
def attribute_max key
|
26
26
|
# Calm down. column_name is whitelisted. check #add_range_attributes method
|
27
27
|
column_name = key.to_s.gsub(/_max$/, "")
|
28
|
-
relation.where("#{column_name} <= ?", params[key.to_sym])
|
28
|
+
relation.where("'#{defined_table_name}'.'#{column_name}' <= ?", params[key.to_sym])
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
data/lib/queryko/version.rb
CHANGED
data/queryko.gemspec
CHANGED
@@ -33,7 +33,7 @@ Gem::Specification.new do |spec|
|
|
33
33
|
spec.require_paths = ["lib"]
|
34
34
|
|
35
35
|
spec.add_dependency 'activerecord', '>= 4.0'
|
36
|
-
spec.add_dependency "activesupport"
|
36
|
+
spec.add_dependency "activesupport", '>= 4.0'
|
37
37
|
|
38
38
|
spec.add_development_dependency "bundler", "~> 1.16"
|
39
39
|
spec.add_development_dependency "rake", "~> 10.0"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: queryko
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joseph Nelson Valeros
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
33
|
+
version: '4.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
40
|
+
version: '4.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -143,6 +143,7 @@ files:
|
|
143
143
|
- bin/setup
|
144
144
|
- lib/queryko.rb
|
145
145
|
- lib/queryko/after_attributes.rb
|
146
|
+
- lib/queryko/naming.rb
|
146
147
|
- lib/queryko/query_object.rb
|
147
148
|
- lib/queryko/range_attributes.rb
|
148
149
|
- lib/queryko/searchables.rb
|