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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '02359b553606b9825cc8e94ac5060303dd9ab56e4fba7b9bde8c5e4e85529984'
4
- data.tar.gz: 70aae89471427d04de003f0fe88200db70a04b204eddbb65e01e87afc3fc9c24
3
+ metadata.gz: 2a4fdf1c4ef6e43e08853ee0921fe24c7a5055954f09e8994947d319f95e127f
4
+ data.tar.gz: fb11c641a84a1f285ef85ea5ad532b3896d3db6971f65ce4c83ec0970c43ed9d
5
5
  SHA512:
6
- metadata.gz: f4fcac506560e2bd2739f31fc99ac4c1875a3c5e0605017ddf48cc057b1d4b946084135e80227bf8dc476a1efec5dc988f67cc0f84c5b68f94331efce582bbbb
7
- data.tar.gz: b2cf95ab75837b7fa8630ccfd80d3165f79d76d21c3bb0892969cb81088c086ba2d8863382f7f9ece7683e0122e47022e177f96f133f094ffce48c7e94b9d217
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:, exclude_filter: false, exclude_order: false, exclude_paginate: false)
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
- def self.validate_filter(filter)
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
@@ -1,3 +1,3 @@
1
1
  module Istox
2
- VERSION = '0.1.102'.freeze
2
+ VERSION = '0.1.103'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: istox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.102
4
+ version: 0.1.103
5
5
  platform: ruby
6
6
  authors:
7
7
  - Siong Leng