searchkon 0.1.2 → 1.0.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/lib/searchkon/query_builder.rb +1 -1
- data/lib/searchkon/regex_formatter.rb +1 -1
- data/searchkon.gemspec +5 -2
- data/spec/models/coupon.rb +3 -0
- data/spec/models/payment.rb +3 -0
- data/spec/{product.rb → models/product.rb} +4 -1
- data/spec/query_builder_spec.rb +2 -4
- data/spec/schema.rb +10 -1
- data/spec/spec_helper.rb +3 -1
- metadata +33 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: eb893a4d3dc86aa19c3da94c49e4fcb2746931308710ba6a165b5a39290a8cb4
|
|
4
|
+
data.tar.gz: 18eec74102de5b1ae4d5f07a965f682871f7bdfbff793f1ddf7ced1ea35a7c43
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d11d1b0d6c13e55e4239f641c8fa65fa2378a2d856ca43d8f2ea09321dac83876258206ca5ee5791ce147a7be8e87acfba768c003116705bc1248b43f941d044
|
|
7
|
+
data.tar.gz: f09f8209e58b8be30119cc4da86b0e9e9c785e4c2a03f4df3626d5847e341bef6a8aad772133a00337386f415838d04a3c23b1dedd51388252f7c3b59862e274
|
|
@@ -7,7 +7,7 @@ module Searchkon
|
|
|
7
7
|
def filter model, params = {}
|
|
8
8
|
@model = model.constantize
|
|
9
9
|
@res = @model.all
|
|
10
|
-
valid_params = validate_params(params, @model.searchable_columns)
|
|
10
|
+
valid_params = validate_params(params[:filters], @model.searchable_columns)
|
|
11
11
|
create_filters valid_params
|
|
12
12
|
@res
|
|
13
13
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module Searchkon
|
|
2
2
|
module RegexFormatter
|
|
3
|
-
|
|
3
|
+
SIMPLE_RANGE_FORMAT_REGEX = /\((.*)\.\.(.*)\)/
|
|
4
4
|
RELATIONAL_FORMAT_REGEX = /(.*)\.(.*)/
|
|
5
5
|
DIGIT_RANGE_FORMAT_REGEX = /\((\d*)\.\.(\d*)\)/
|
|
6
6
|
DATE_RANGE_FORMAT_REGEX = /\((\d{4}-\d{1,2}-\d{1,2})\.\.(\d{4}-\d{1,2}-\d{1,2})\)/
|
data/searchkon.gemspec
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Gem::Specification.new do |s|
|
|
2
2
|
s.name = 'searchkon'
|
|
3
|
-
s.version = '0.
|
|
3
|
+
s.version = '1.0.0'
|
|
4
4
|
s.date = '2020-05-24'
|
|
5
5
|
s.summary = "Search Command"
|
|
6
6
|
s.description = "make search easy"
|
|
7
|
-
s.authors = ["Majid Imanzade"]
|
|
7
|
+
s.authors = ["Majid Imanzade", 'Amin Samadzade']
|
|
8
8
|
s.email = 'majidimanzade1@gmail.com'
|
|
9
9
|
s.homepage = 'https://rubygems.org/gems/searchkon'
|
|
10
10
|
s.homepage = "http://github.com/majidimanzade/searchkon"
|
|
@@ -16,4 +16,7 @@ Gem::Specification.new do |s|
|
|
|
16
16
|
s.add_development_dependency("rake")
|
|
17
17
|
s.add_development_dependency("rspec")
|
|
18
18
|
s.add_development_dependency "sqlite3"
|
|
19
|
+
|
|
20
|
+
s.add_dependency "activesupport"
|
|
21
|
+
s.add_dependency "activerecord"
|
|
19
22
|
end
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
class Product < ActiveRecord::Base
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
has_many :coupons
|
|
4
|
+
has_many :payments
|
|
3
5
|
|
|
4
6
|
def self.searchable_columns
|
|
5
7
|
{
|
|
@@ -7,6 +9,7 @@ class Product < ActiveRecord::Base
|
|
|
7
9
|
exact: [
|
|
8
10
|
'created_at',
|
|
9
11
|
'coupons.id',
|
|
12
|
+
'payments.id',
|
|
10
13
|
'id'
|
|
11
14
|
]
|
|
12
15
|
}
|
data/spec/query_builder_spec.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
RSpec.describe Searchkon::QueryBuilder do
|
|
4
4
|
describe 'query builder for filter' do
|
|
5
5
|
let (:simple_where_params) do
|
|
@@ -31,7 +31,6 @@ RSpec.describe Searchkon::QueryBuilder do
|
|
|
31
31
|
|
|
32
32
|
it 'should return simple where query' do
|
|
33
33
|
query = "SELECT \"products\".* FROM \"products\" WHERE (products.title like '%foobar%') AND \"products\".\"id\" = 1"
|
|
34
|
-
|
|
35
34
|
expect(Searchkon::QueryBuilder.filter('Product', simple_where_params).to_sql).to eq query
|
|
36
35
|
end
|
|
37
36
|
|
|
@@ -57,8 +56,7 @@ RSpec.describe Searchkon::QueryBuilder do
|
|
|
57
56
|
|
|
58
57
|
it 'should return simple where relational query with two relations' do
|
|
59
58
|
relational_params = { filters: { 'coupons.id': 1, 'payments.id': 1 } }
|
|
60
|
-
query = "SELECT \"products\".* FROM \"products\" INNER JOIN \"
|
|
61
|
-
|
|
59
|
+
query = "SELECT \"products\".* FROM \"products\" INNER JOIN \"coupons\" ON \"coupons\".\"product_id\" = \"products\".\"id\" INNER JOIN \"payments\" ON \"payments\".\"product_id\" = \"products\".\"id\" WHERE \"coupons\".\"id\" = 1 AND \"payments\".\"id\" = 1"
|
|
62
60
|
expect(Searchkon::QueryBuilder.filter('Product', relational_params).to_sql).to eq query
|
|
63
61
|
end
|
|
64
62
|
|
data/spec/schema.rb
CHANGED
|
@@ -3,8 +3,17 @@ ActiveRecord::Schema.define do
|
|
|
3
3
|
|
|
4
4
|
create_table :products, :force => true do |t|
|
|
5
5
|
t.string :key
|
|
6
|
-
t.string :
|
|
6
|
+
t.string :title
|
|
7
|
+
t.timestamps
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
create_table :coupons, :force => true do |t|
|
|
11
|
+
t.string :title
|
|
12
|
+
t.timestamps
|
|
13
|
+
end
|
|
7
14
|
|
|
15
|
+
create_table :payments, :force => true do |t|
|
|
16
|
+
t.string :title
|
|
8
17
|
t.timestamps
|
|
9
18
|
end
|
|
10
19
|
|
data/spec/spec_helper.rb
CHANGED
|
@@ -10,4 +10,6 @@ require 'rspec'
|
|
|
10
10
|
ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
|
|
11
11
|
|
|
12
12
|
load File.dirname(__FILE__) + '/schema.rb'
|
|
13
|
-
require File.dirname(__FILE__) + '/
|
|
13
|
+
require File.dirname(__FILE__) + '/models/coupon.rb'
|
|
14
|
+
require File.dirname(__FILE__) + '/models/payment.rb'
|
|
15
|
+
require File.dirname(__FILE__) + '/models/product.rb'
|
metadata
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: searchkon
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Majid Imanzade
|
|
8
|
+
- Amin Samadzade
|
|
8
9
|
autorequire:
|
|
9
10
|
bindir: bin
|
|
10
11
|
cert_chain: []
|
|
@@ -66,6 +67,34 @@ dependencies:
|
|
|
66
67
|
- - ">="
|
|
67
68
|
- !ruby/object:Gem::Version
|
|
68
69
|
version: '0'
|
|
70
|
+
- !ruby/object:Gem::Dependency
|
|
71
|
+
name: activesupport
|
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
|
73
|
+
requirements:
|
|
74
|
+
- - ">="
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: '0'
|
|
77
|
+
type: :runtime
|
|
78
|
+
prerelease: false
|
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
80
|
+
requirements:
|
|
81
|
+
- - ">="
|
|
82
|
+
- !ruby/object:Gem::Version
|
|
83
|
+
version: '0'
|
|
84
|
+
- !ruby/object:Gem::Dependency
|
|
85
|
+
name: activerecord
|
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
|
87
|
+
requirements:
|
|
88
|
+
- - ">="
|
|
89
|
+
- !ruby/object:Gem::Version
|
|
90
|
+
version: '0'
|
|
91
|
+
type: :runtime
|
|
92
|
+
prerelease: false
|
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
94
|
+
requirements:
|
|
95
|
+
- - ">="
|
|
96
|
+
- !ruby/object:Gem::Version
|
|
97
|
+
version: '0'
|
|
69
98
|
description: make search easy
|
|
70
99
|
email: majidimanzade1@gmail.com
|
|
71
100
|
executables: []
|
|
@@ -83,7 +112,9 @@ files:
|
|
|
83
112
|
- lib/searchkon/searchables.rb
|
|
84
113
|
- searchkon.gemspec
|
|
85
114
|
- spec/filterable_spec.rb
|
|
86
|
-
- spec/
|
|
115
|
+
- spec/models/coupon.rb
|
|
116
|
+
- spec/models/payment.rb
|
|
117
|
+
- spec/models/product.rb
|
|
87
118
|
- spec/query_builder_spec.rb
|
|
88
119
|
- spec/schema.rb
|
|
89
120
|
- spec/spec_helper.rb
|