istox 0.1.102 → 0.1.103
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/istox/helpers/result_handler.rb +2 -69
- data/lib/istox/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a4fdf1c4ef6e43e08853ee0921fe24c7a5055954f09e8994947d319f95e127f
|
4
|
+
data.tar.gz: fb11c641a84a1f285ef85ea5ad532b3896d3db6971f65ce4c83ec0970c43ed9d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4bec68b057c3f448e08f4958b7a51964cbda8b99a5689028107928e2b5a385914e78ff703d74ac43542e4f1c93b615be1c3a0a07a130c9fa4264df223be67fe9
|
7
|
+
data.tar.gz: 9f5d910541029a58e96bb1ef1955671b0ba431bb68acdd59de4e8da7a957485a1e68ad92e79ef278f80dc13f640a9e5c81b148e2a62f4eec4e79ea29ca007b58
|
@@ -1,8 +1,7 @@
|
|
1
1
|
module Istox
|
2
2
|
module ResultHandler
|
3
3
|
##### main method to be called, suggested to always use this method and not individual method below
|
4
|
-
def self.process(query:, meta:,
|
5
|
-
query = filter(query: query, meta: meta) unless exclude_filter
|
4
|
+
def self.process(query:, meta:, exclude_order: false, exclude_paginate: false)
|
6
5
|
query = order(query: query, meta: meta) unless exclude_order
|
7
6
|
|
8
7
|
# if never set limit, means no pagination is needed
|
@@ -13,36 +12,6 @@ module Istox
|
|
13
12
|
query
|
14
13
|
end
|
15
14
|
|
16
|
-
def self.filter(query:, meta:)
|
17
|
-
return query if meta.blank? || meta.filters.blank?
|
18
|
-
|
19
|
-
meta.filters.each do |filter|
|
20
|
-
# chain the query with AND conditions
|
21
|
-
# skip if there is no compare present, mean it is for inner filters
|
22
|
-
if filter.compare.present?
|
23
|
-
|
24
|
-
validate_filter(filter)
|
25
|
-
query = query.where("#{filter.field} #{transform_compare(filter.type, filter.compare)} ?",
|
26
|
-
transform_value(filter.type, filter.value))
|
27
|
-
end
|
28
|
-
|
29
|
-
next if filter.filters.blank?
|
30
|
-
|
31
|
-
# contains inner filters, chain the query with AND condition but internally with OR condition
|
32
|
-
columns = []
|
33
|
-
values = []
|
34
|
-
filter.filters.each do |inner_filter|
|
35
|
-
validate_filter(filter)
|
36
|
-
columns.push("#{inner_filter.field} #{transform_compare(inner_filter.type, inner_filter.compare)} ?")
|
37
|
-
values.push(transform_value(inner_filter.type, inner_filter.value))
|
38
|
-
end
|
39
|
-
|
40
|
-
query = query.where(columns.join(' OR '), *values) unless columns.empty?
|
41
|
-
end
|
42
|
-
|
43
|
-
query
|
44
|
-
end
|
45
|
-
|
46
15
|
def self.order(query:, meta:)
|
47
16
|
return query if meta.blank? || meta.sorts.blank?
|
48
17
|
|
@@ -95,42 +64,6 @@ module Istox
|
|
95
64
|
Istox::RegexHelper.alphabet_only(column)
|
96
65
|
end
|
97
66
|
|
98
|
-
|
99
|
-
# filter.field/column should contains only alphabet and nothing else
|
100
|
-
raise StandardError, 'POSSIBLE_SQL_INJECTION' unless validate_column_name(filter.field)
|
101
|
-
|
102
|
-
# filter.compare should only contains alphabets (eg. IN) or symbols only (eg. >=, =, <=, <>)
|
103
|
-
raise StandardError, 'POSSIBLE_SQL_INJECTION' unless validate_compare(filter.compare)
|
104
|
-
end
|
105
|
-
|
106
|
-
def self.transform_compare(type, compare)
|
107
|
-
return compare if type.blank?
|
108
|
-
|
109
|
-
return 'IS' if type.downcase == 'nullable' && ['=', 'is', '=='].include?(compare.downcase)
|
110
|
-
|
111
|
-
return 'IS NOT' if type.downcase == 'nullable' && ['<>', 'is not', '!='].include?(compare.downcase)
|
112
|
-
|
113
|
-
compare
|
114
|
-
end
|
115
|
-
|
116
|
-
def self.transform_value(type, value)
|
117
|
-
return value if value.blank? || type.blank? || type.downcase == 'string'
|
118
|
-
|
119
|
-
return nil if type.downcase == 'nullable'
|
120
|
-
|
121
|
-
return value.to_i if type.downcase == 'integer'
|
122
|
-
|
123
|
-
return value.to_f if type.downcase == 'float'
|
124
|
-
|
125
|
-
return ::Istox::CommonHelper.to_boolean(value) if type.downcase == 'boolean'
|
126
|
-
|
127
|
-
return ::Istox::CommonHelper.to_datetime(value) if type.downcase == 'date' || type.downcase == 'datetime'
|
128
|
-
end
|
129
|
-
|
130
|
-
def self.validate_compare(compare)
|
131
|
-
Istox::RegexHelper.alphabet_only(compare) || Istox::RegexHelper.symbol_only(compare)
|
132
|
-
end
|
133
|
-
|
134
|
-
private_class_method :validate_compare, :validate_filter, :transform_value, :transform_compare, :validate_column_name
|
67
|
+
private_class_method :validate_column_name
|
135
68
|
end
|
136
69
|
end
|
data/lib/istox/version.rb
CHANGED