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 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