queryko 1.0.2 → 1.1.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
  SHA256:
3
- metadata.gz: 9b6fc3082f0af793f3662b64c9d8adb44011876052d3ad668df7ac6c3e091022
4
- data.tar.gz: 46c52021042f4ee7fa94c414e7bc46ff8d864db23d22a59f75bf52a54f292f0f
3
+ metadata.gz: c7a137e9ef74fc1cb784fa9f67e9245bde68ff624adfd984e5ee2dc09439169c
4
+ data.tar.gz: 60df495dfd96bb8e25c2ec271f20eed65dc87883fb8f9519b812de8b35c65c04
5
5
  SHA512:
6
- metadata.gz: 7c07e549329d0a33b30c35d331571ab02c81b88b7f87a7a7056ac6b39154cfe707ae552ed054c9287908ed2010b6b1142997840012f3c8eac69a7f77f5345e87
7
- data.tar.gz: 87f949beb23627b5c1cda6d220269bb674234b589d7d61886e04b8f8ee095e923ede7b0a069340da87edc4272857063f2f194f0be24569c7632e0485db0cb156
6
+ metadata.gz: 110cc3fc4e8ccea70c773ff32efaba9af14883980d40af9f5a2d908aada62a460346bd41548a72437963ea626e1139c5af9252d4c1a6d996bc3790643b979e43
7
+ data.tar.gz: e4750c2293eae142af7b9f5bbddf8e5c94736468fa9a96cd949be4bdc5715377da645f9b2c472a3eb7f2e9b8d68a3c5b7b691faaef925b48c0087160ad289b92
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- queryko (1.0.2)
4
+ queryko (1.1.0)
5
5
  activerecord (>= 4.0)
6
- activesupport
6
+ activesupport (>= 4.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -1,11 +1,15 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/queryko.svg)](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 an option
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Queryko
2
- VERSION = "1.0.2"
2
+ VERSION = "1.1.0"
3
3
  end
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.2
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: 2018-12-13 00:00:00.000000000 Z
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