hash_conditions 0.1.14 → 0.1.15
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 +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
|