hash_conditions 0.1.16 → 0.1.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/hash_conditions/core.rb +39 -0
- data/lib/hash_conditions/matcher.rb +2 -40
- data/lib/hash_conditions/parser.rb +2 -1
- data/lib/hash_conditions/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MjYwN2RmYmExMWMzYzEyOTEyMTkyMmU2NDhiMWI1MWM0ZTVjZGI4Mw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NzcwYTRhM2Q5ZTkzMmI5OWE4Y2JjMWJiNTViYmJjN2E4MDUwMDM1ZQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NTA3Y2I1Njg3MmQ1NmIzYmYzM2ViZWEzMmNlNmQzMDY2YzE2OTY2YWZmNTk5
|
10
|
+
MzI0N2VmZWUzZTI3MDc4ODRkOWU2ZjI2MjJlZjk4ZDhkZDc3NjgzY2FhOTgx
|
11
|
+
Njc3MzllNDJlMTQwNGRkNWRmMjZkODU0N2VkMDg1NThmZmUxMDI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MTJhZGE4NWFhYjJkNmNiNTUzYjkzNjJhMGFmOGNkN2JlMzdlMjYzYTVkOGVm
|
14
|
+
NGM5YWM0ZDcwZjA1MDBhZDdiZjE1NTQ5MTFlM2FmYmFlMTBjYjk1NGRkMmYz
|
15
|
+
OGY1YWQwNTIyZTU0MmYwNTNkNmI0YjliMDZjZDcwMDVhNWY0NjI=
|
data/lib/hash_conditions/core.rb
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
module HashConditions
|
2
2
|
module Core
|
3
3
|
# Modular Matchers
|
4
|
+
ARITMETIC_OPERATORS = {
|
5
|
+
'$add' => :+,
|
6
|
+
'$substract' => :-,
|
7
|
+
'$multiply' => :*,
|
8
|
+
'$divide' => :/,
|
9
|
+
}
|
10
|
+
|
4
11
|
def modules
|
5
12
|
@@modules ||= []
|
6
13
|
end
|
@@ -134,6 +141,38 @@ module HashConditions
|
|
134
141
|
end
|
135
142
|
end
|
136
143
|
|
144
|
+
def eval_operand hash, key, options = {}
|
145
|
+
__get_values = lambda do | values |
|
146
|
+
values.map{ |x| eval_operand hash, x, options }
|
147
|
+
end
|
148
|
+
case key
|
149
|
+
when String, Symbol
|
150
|
+
if key.to_s == '$now'
|
151
|
+
options[:current_time] || Time.now
|
152
|
+
else
|
153
|
+
val = options[:is_key] ? hash[key] : key
|
154
|
+
re_type val
|
155
|
+
end
|
156
|
+
when Hash
|
157
|
+
op, values = key.to_a.first
|
158
|
+
|
159
|
+
case op.to_s
|
160
|
+
when *ARITMETIC_OPERATORS.keys
|
161
|
+
#TODO: Test feature: when applying aritmetics it forces that the values are floats
|
162
|
+
__get_values.call( values ).each{ |v| v.to_f }.inject( ARITMETIC_OPERATORS[ op ] )
|
163
|
+
when '$ifNull'
|
164
|
+
__get_values.call( values ).drop_while{ |n| n.nil? }.shift
|
165
|
+
when '$concat'
|
166
|
+
__get_values.call( values ).join('')
|
167
|
+
when '$concatWithSeparator'
|
168
|
+
separator = values.shift
|
169
|
+
__get_values.call( values ).join( separator )
|
170
|
+
end
|
171
|
+
else
|
172
|
+
key
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
137
176
|
def _ext_match condition, options
|
138
177
|
->(key) { _ext_get_module( key, condition, options ) != nil }
|
139
178
|
end
|
@@ -1,12 +1,6 @@
|
|
1
1
|
module HashConditions
|
2
2
|
class Matcher
|
3
3
|
extend Core
|
4
|
-
ARITMETIC_OPERATORS = {
|
5
|
-
'$add' => :+,
|
6
|
-
'$substract' => :-,
|
7
|
-
'$multiply' => :*,
|
8
|
-
'$divide' => :/,
|
9
|
-
}
|
10
4
|
|
11
5
|
def self.fix_for_aritmetics *values
|
12
6
|
class_precedence = [ Float, Integer, String ]
|
@@ -54,38 +48,6 @@ module HashConditions
|
|
54
48
|
end
|
55
49
|
end
|
56
50
|
|
57
|
-
def self.eval_operand hash, key, options = {}
|
58
|
-
__get_values = lambda do | values |
|
59
|
-
values.map{ |x| eval_operand hash, x, options }
|
60
|
-
end
|
61
|
-
case key
|
62
|
-
when String, Symbol
|
63
|
-
if key.to_s == '$now'
|
64
|
-
options[:current_time] || Time.now
|
65
|
-
else
|
66
|
-
val = options[:is_key] ? hash[key] : key
|
67
|
-
re_type val
|
68
|
-
end
|
69
|
-
when Hash
|
70
|
-
op, values = key.to_a.first
|
71
|
-
|
72
|
-
case op.to_s
|
73
|
-
when *ARITMETIC_OPERATORS.keys
|
74
|
-
#TODO: Test feature: when applying aritmetics it forces that the values are floats
|
75
|
-
__get_values.call( values ).each{ |v| v.to_f }.inject( ARITMETIC_OPERATORS[ op ] )
|
76
|
-
when '$ifNull'
|
77
|
-
__get_values.call( values ).drop_while{ |n| n.nil? }.shift
|
78
|
-
when '$concat'
|
79
|
-
__get_values.call( values ).join('')
|
80
|
-
when '$concatWithSeparator'
|
81
|
-
separator = values.shift
|
82
|
-
__get_values.call( values ).join( separator )
|
83
|
-
end
|
84
|
-
else
|
85
|
-
key
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
51
|
def self.match_single hash, expression, options
|
90
52
|
hash_value = eval_operand hash, expression[:key], options.merge(is_key: true)
|
91
53
|
comparisson_value = eval_operand hash, expression[ :value ], options
|
@@ -112,8 +74,8 @@ module HashConditions
|
|
112
74
|
values = fix_for_aritmetics hash_value, comparisson_value
|
113
75
|
values[0].send( expression[:operator], values[1] )
|
114
76
|
end
|
115
|
-
rescue
|
116
|
-
raise "The expression: #{ expression } has an error"
|
77
|
+
# rescue
|
78
|
+
# raise "The expression: #{ expression } has an error"
|
117
79
|
end
|
118
80
|
|
119
81
|
def self.when hash, query
|
@@ -35,7 +35,7 @@ module HashConditions
|
|
35
35
|
when :contains
|
36
36
|
"LIKE #{ _parse_value(expression[:value], '%', '%') }"
|
37
37
|
when :between
|
38
|
-
"BETWEEN #{ _parse_value expression[:value]
|
38
|
+
"BETWEEN #{ _parse_value expression[:value][0] } AND #{ _parse_value expression[:value][1] }"
|
39
39
|
end
|
40
40
|
|
41
41
|
"#{expression[:key]} #{comparisson}"
|
@@ -46,6 +46,7 @@ module HashConditions
|
|
46
46
|
when String then "'#{prepend}#{value}#{append}'"
|
47
47
|
when DateTime, Date, Time then "'#{value.strftime("%Y-%m-%d %H:%M")}'"
|
48
48
|
when Integer, Float then "#{value}"
|
49
|
+
when Hash then _parse_value( eval_operand( {}, value ) , prepend, append )
|
49
50
|
end
|
50
51
|
end
|
51
52
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hash_conditions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Giancarlo Palavicini
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|