hash_conditions 0.1.14 → 0.1.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/hash_conditions.gemspec +1 -0
- data/lib/hash_conditions/matcher.rb +31 -20
- data/lib/hash_conditions/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ODY4ZjJlNjdkMTcwMDkyNmQwNTVkYmM4OTBmYzVhMmE1OWVlZDFjNg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZGUxZjlhMjI5NWNlOWRlZTZmMjg0ZTRmYzE3NzU3ZGU3YTI0ZTQ5Mw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZTlmZDNlNWNmMGI0NDBkYjY5ZGQ0MDU2YzhmMDIwNjQ5NDhiMGQwMGFlZTdm
|
10
|
+
Y2M0MjUxMWRiZjJmMzgyZGYwMmJjZTRkOTUwZmZkODQ2MjY5NDZhMDU2NTQ0
|
11
|
+
MjM0ZDQ2M2M3YjNiM2NmZmJlOTliZTVlMjc5NmNhZGJkYTcyODM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MGY1NWE3NmQ3YjhmYWNhYWZkZjJkNDVhN2UwMzBlNjkxY2I1OGY3N2IzMWM2
|
14
|
+
Mjc5NTM4OWRjYjUwMjY2MDcwM2U4YjVmZWMyZDFkMTY1ZDY4OWZiZTRkMzM3
|
15
|
+
NTA4NDY4OTNkYjNmNjRjZTJkZDc0OGZmZGY1MmNlY2Y1NDA5NzE=
|
data/hash_conditions.gemspec
CHANGED
@@ -1,6 +1,25 @@
|
|
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
|
+
|
11
|
+
def self.fix_for_aritmetics *values
|
12
|
+
class_precedence = [ Float, Integer, String ]
|
13
|
+
|
14
|
+
klass = class_precedence.find{ |k| values.any?{ |v| v.is_a? k } } || NilClass
|
15
|
+
|
16
|
+
values = case klass.name
|
17
|
+
when "Integer" then values.map(&:to_i)
|
18
|
+
when "Float" then values.map(&:to_f)
|
19
|
+
when "String" then values.map(&:to_s)
|
20
|
+
else values
|
21
|
+
end
|
22
|
+
end
|
4
23
|
|
5
24
|
def self.configurations
|
6
25
|
@@configurations ||= {}
|
@@ -35,13 +54,6 @@ module HashConditions
|
|
35
54
|
end
|
36
55
|
end
|
37
56
|
|
38
|
-
ARITMETIC_OPERATORS = {
|
39
|
-
'$add' => :+,
|
40
|
-
'$substract' => :-,
|
41
|
-
'$multiply' => :*,
|
42
|
-
'$divide' => :/,
|
43
|
-
}
|
44
|
-
|
45
57
|
def self.get_key hash, key, options = {}
|
46
58
|
__get_values = lambda do | values |
|
47
59
|
values.map{ |x| get_key hash, x, options }
|
@@ -94,16 +106,11 @@ module HashConditions
|
|
94
106
|
when :contains
|
95
107
|
!! %r{#{comparisson_value}}.match( hash_value )
|
96
108
|
else
|
97
|
-
|
98
|
-
|
99
|
-
when Integer then comparisson_value.to_i
|
100
|
-
when Float then comparisson_value.to_f
|
101
|
-
when String then comparisson_value.to_s
|
102
|
-
else comparisson_value
|
103
|
-
end
|
104
|
-
|
105
|
-
hash_value.send( expression[:operator], comparisson_value )
|
109
|
+
values = fix_for_aritmetics hash_value, comparisson_value
|
110
|
+
values[0].send( expression[:operator], values[1] )
|
106
111
|
end
|
112
|
+
rescue
|
113
|
+
raise "The expression: #{ expression } has an error"
|
107
114
|
end
|
108
115
|
|
109
116
|
def self.when hash, query
|
@@ -120,18 +127,22 @@ module HashConditions
|
|
120
127
|
map{ | e |
|
121
128
|
case e[:operator]
|
122
129
|
when :<, :<=, :>, :>= then
|
123
|
-
diff = e[:value]
|
130
|
+
diff = get_diff( e[:value], get_key( hash, e[:key] )) + 1
|
124
131
|
when :==, :!= then Time.now + s[:diff]
|
125
|
-
diff = e[:value]
|
132
|
+
diff = get_diff( e[:value], get_key(hash, e[:key]) )
|
126
133
|
when :between
|
127
|
-
diff = e[:value][0]
|
128
|
-
diff = e[:value][1]
|
134
|
+
diff = get_diff( e[:value][0], get_key(hash, e[:key]) )
|
135
|
+
diff = get_diff( e[:value][1], get_key(hash, e[:key]) ) if Time.now + diff < Time.now
|
129
136
|
end
|
130
137
|
|
131
138
|
Time.now + diff
|
132
139
|
}
|
133
140
|
end
|
134
141
|
|
142
|
+
def self.get_diff *values
|
143
|
+
fix_for_aritmetics(*values).inject(&:-)
|
144
|
+
end
|
145
|
+
|
135
146
|
def self.time_expressions conditions
|
136
147
|
expressions = []
|
137
148
|
iterator conditions,
|
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.15
|
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-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ! '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: byebug
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
description: ! ' Ability to parse and match hashes against Mongo-like querys '
|
56
70
|
email:
|
57
71
|
- kasthor@gmail.com
|