istox 0.1.102 → 0.1.103
Sign up to get free protection for your applications and to get access to all the features.
- 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