pattern_query_helper 0.2.5 → 0.2.6
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f9478c942fdda25782ac53d2adc8aeea980719414857098383a5c5b6cfbecf6a
|
4
|
+
data.tar.gz: d5cf42e0b74a810e5111bb42e78595c7fca64ecd87657b7af6a23baa7765cc53
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59ea5d4b72d30ab2761f1f72fc43546ac20c2f48cb3e5924c95e81522a535a526be3f074226e6fc911b36b7dd1f902c5a897e2fa0c1166748635e30424f3ec74
|
7
|
+
data.tar.gz: b90f41129c7aea623290ffe882e981327b6604a821fc1536ff3eac67350ac05ece354c1a82605df0886612b4ff6795b4ee7752d3550ca4442ae2b804ad21ae7b
|
data/README.md
CHANGED
@@ -26,22 +26,24 @@ Or install it yourself as:
|
|
26
26
|
|
27
27
|
To run an active record query execute
|
28
28
|
```ruby
|
29
|
-
PatternQueryHelper.
|
29
|
+
PatternQueryHelper.run_active_record_query(active_record_call, query_helpers, valid_columns, single_record)
|
30
30
|
```
|
31
31
|
active_record_call: Valid active record syntax (i.e. ```Object.where(state: 'Active')```)
|
32
32
|
query_helpers: See docs below
|
33
|
+
valid_columns: Default is []. Pass in an array of columns you want to allow sorting and filtering on.
|
33
34
|
single_record: Default is false. Pass in true to format payload as a single object instead of a list of objects
|
34
35
|
|
35
36
|
### Custom SQL Queries
|
36
37
|
|
37
38
|
To run a custom sql query execute
|
38
39
|
```ruby
|
39
|
-
PatternQueryHelper.run_sql_query(model, query, query_params, query_helpers, single_record)
|
40
|
+
PatternQueryHelper.run_sql_query(model, query, query_params, query_helpers, valid_columns, single_record)
|
40
41
|
```
|
41
42
|
model: A valid ActiveRecord model
|
42
43
|
query: A string containing your custom SQL query
|
43
44
|
query_params: a symbolized hash of binds to be included in your SQL query
|
44
45
|
query_helpers: See docs below
|
46
|
+
valid_columns: Default is []. Pass in an array of columns you want to allow sorting and filtering on.
|
45
47
|
single_record: Default is false. Pass in true to format payload as a single object instead of a list of objects
|
46
48
|
|
47
49
|
## Query Helpers
|
@@ -86,6 +88,12 @@ Filtering is controlled by the `filter` object in the query_helpers hash
|
|
86
88
|
},
|
87
89
|
"column_2" => {
|
88
90
|
"eql" => "my_string"
|
91
|
+
},
|
92
|
+
"column_3" => {
|
93
|
+
"like" => "my_string%"
|
94
|
+
},
|
95
|
+
"column_4" => {
|
96
|
+
"in" => "item1,item2,item3"
|
89
97
|
}
|
90
98
|
}
|
91
99
|
```
|
@@ -99,6 +107,7 @@ The following operator codes are valid
|
|
99
107
|
“lt”: <
|
100
108
|
“eql”: =
|
101
109
|
“noteql”: !=
|
110
|
+
"like": like
|
102
111
|
“in”: in
|
103
112
|
“notin” not in
|
104
113
|
“null”: “is null” or “is not null” (pass in true or false as the value)
|
@@ -2,11 +2,7 @@ module PatternQueryHelper
|
|
2
2
|
class Associations
|
3
3
|
def self.process_association_params(associations)
|
4
4
|
associations ||= []
|
5
|
-
|
6
|
-
[associations.to_sym]
|
7
|
-
else
|
8
|
-
associations
|
9
|
-
end
|
5
|
+
associations.class == String ? [associations.to_sym] : associations
|
10
6
|
end
|
11
7
|
|
12
8
|
def self.load_associations(payload, associations, as_json_options)
|
@@ -1,16 +1,13 @@
|
|
1
1
|
module PatternQueryHelper
|
2
2
|
class Filtering
|
3
|
-
def self.create_filters(filters,
|
3
|
+
def self.create_filters(filters, valid_columns=nil, symbol_prefix="")
|
4
4
|
filters ||= {}
|
5
5
|
filter_string = "true = true"
|
6
6
|
filter_params = {}
|
7
7
|
filter_array = []
|
8
8
|
filters.each do |filter_attribute, criteria|
|
9
|
-
if
|
10
|
-
raise ArgumentError.new("Invalid filter '#{filter_attribute}'") unless
|
11
|
-
filter_column = column_map[filter_attribute]
|
12
|
-
else
|
13
|
-
filter_column = filter_attribute
|
9
|
+
if valid_columns
|
10
|
+
raise ArgumentError.new("Invalid filter '#{filter_attribute}'") unless valid_columns.include? filter_attribute
|
14
11
|
end
|
15
12
|
criteria.each do |operator_code, criterion|
|
16
13
|
filter_symbol = "#{symbol_prefix}#{filter_attribute}_#{operator_code}"
|
@@ -27,29 +24,25 @@ module PatternQueryHelper
|
|
27
24
|
operator = "="
|
28
25
|
when "noteql"
|
29
26
|
operator = "!="
|
27
|
+
when "like"
|
28
|
+
operator = "like"
|
30
29
|
when "in"
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
filter_symbol = ""
|
30
|
+
operator = "in (:#{filter_symbol})"
|
31
|
+
criterion = criterion.split(",")
|
32
|
+
filter_symbol_already_embedded = true
|
35
33
|
when "notin"
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
filter_symbol = ""
|
34
|
+
operator = "not in (:#{filter_symbol})"
|
35
|
+
criterion = criterion.split(",")
|
36
|
+
filter_symbol_already_embedded = true
|
40
37
|
when "null"
|
41
|
-
|
42
|
-
operator = "is null"
|
43
|
-
elsif criterion = false || "false"
|
44
|
-
operator = "is not null"
|
45
|
-
end
|
38
|
+
operator = criterion.to_s == "true" ? "is null" : "is not null"
|
46
39
|
filter_symbol = ""
|
47
40
|
else
|
48
41
|
raise ArgumentError.new("Invalid operator code '#{operator_code}' on '#{filter_attribute}' filter")
|
49
42
|
end
|
50
|
-
|
51
|
-
filter_string
|
52
|
-
filter_params["#{filter_symbol}"] = criterion
|
43
|
+
filter_string = "#{filter_string} and #{filter_attribute} #{operator}"
|
44
|
+
filter_string << " :#{filter_symbol}" unless filter_symbol_already_embedded or filter_symbol.blank?
|
45
|
+
filter_params["#{filter_symbol}"] = criterion unless filter_symbol.blank?
|
53
46
|
filter_array << {
|
54
47
|
column: filter_attribute,
|
55
48
|
operator: operator,
|
@@ -4,16 +4,8 @@ require 'kaminari'
|
|
4
4
|
module PatternQueryHelper
|
5
5
|
class Pagination
|
6
6
|
def self.parse_pagination_params(page, per_page)
|
7
|
-
|
8
|
-
|
9
|
-
else
|
10
|
-
page = 1
|
11
|
-
end
|
12
|
-
if per_page
|
13
|
-
per_page = per_page.to_i
|
14
|
-
else
|
15
|
-
per_page = 20
|
16
|
-
end
|
7
|
+
page = page ? page.to_i : 1
|
8
|
+
per_page = per_page ? per_page.to_i : 20
|
17
9
|
raise RangeError.new("page must be greater than 0") unless page > 0
|
18
10
|
raise RangeError.new("per_page must be greater than 0") unless per_page > 0
|
19
11
|
|
data/lib/pattern_query_helper.rb
CHANGED
@@ -89,11 +89,7 @@ module PatternQueryHelper
|
|
89
89
|
end
|
90
90
|
|
91
91
|
def self.parse_helpers(query_helpers, valid_columns)
|
92
|
-
|
93
|
-
valid_columns.each do |c|
|
94
|
-
valid_columns_map["#{c}"] = c
|
95
|
-
end
|
96
|
-
filtering = PatternQueryHelper::Filtering.create_filters(query_helpers[:filter], valid_columns_map)
|
92
|
+
filtering = PatternQueryHelper::Filtering.create_filters(query_helpers[:filter], valid_columns)
|
97
93
|
sorting = PatternQueryHelper::Sorting.parse_sorting_params(query_helpers[:sort], valid_columns)
|
98
94
|
associations = PatternQueryHelper::Associations.process_association_params(query_helpers[:include])
|
99
95
|
pagination = PatternQueryHelper::Pagination.parse_pagination_params(query_helpers[:page], query_helpers[:per_page])
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pattern_query_helper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Evan McDaniel
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -169,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
169
|
version: '0'
|
170
170
|
requirements: []
|
171
171
|
rubyforge_project:
|
172
|
-
rubygems_version: 2.6
|
172
|
+
rubygems_version: 2.7.6
|
173
173
|
signing_key:
|
174
174
|
specification_version: 4
|
175
175
|
summary: Ruby Gem to help with pagination and data formatting at Pattern, Inc.
|