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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZTU3ZGFjMDhhZWI3NDZhYTExYmMyNjhlNTVjMWI5MmI3MWFjYzg1MA==
4
+ ODY4ZjJlNjdkMTcwMDkyNmQwNTVkYmM4OTBmYzVhMmE1OWVlZDFjNg==
5
5
  data.tar.gz: !binary |-
6
- OTAyNmQzYjVkYmNhM2MxNmUwZTBmOGRjY2ZmNTA3MjhiYjAwYTU4ZA==
6
+ ZGUxZjlhMjI5NWNlOWRlZTZmMjg0ZTRmYzE3NzU3ZGU3YTI0ZTQ5Mw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NmM4ZGJiYjExYjZlZjg2NWU4MzlhYTVmMGJmMDhiMGY3YTNhOWY5NjliZTIz
10
- ODE2MWZiNDMzN2M0OTBkYTY5NWJkMDUyZmNmZWJlODhhMWU4ZTI3MjM0MWYx
11
- NWI1OGQwYzY5ODg4NjYyZTllZTAzMzkwYWJhYmMzYmUzOWNlNjU=
9
+ ZTlmZDNlNWNmMGI0NDBkYjY5ZGQ0MDU2YzhmMDIwNjQ5NDhiMGQwMGFlZTdm
10
+ Y2M0MjUxMWRiZjJmMzgyZGYwMmJjZTRkOTUwZmZkODQ2MjY5NDZhMDU2NTQ0
11
+ MjM0ZDQ2M2M3YjNiM2NmZmJlOTliZTVlMjc5NmNhZGJkYTcyODM=
12
12
  data.tar.gz: !binary |-
13
- MTUyMzQxY2ViYzkwZTU2YWYzNmIyYzVkZTkwYTZkNzllMTBiM2NlNWRkZjE3
14
- MjZiZGNhMmE4MjQxMzc4YjYyNjU4MDM3NjcxZjQzM2FhMzUwNTEzMDJkYzM2
15
- N2Y1MmIzMTZjMTQ3ODk5MmM0MzVmZTY1MGMwNWU0ZWEyZjgzMzA=
13
+ MGY1NWE3NmQ3YjhmYWNhYWZkZjJkNDVhN2UwMzBlNjkxY2I1OGY3N2IzMWM2
14
+ Mjc5NTM4OWRjYjUwMjY2MDcwM2U4YjVmZWMyZDFkMTY1ZDY4OWZiZTRkMzM3
15
+ NTA4NDY4OTNkYjNmNjRjZTJkZDc0OGZmZGY1MmNlY2Y1NDA5NzE=
@@ -30,4 +30,5 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency "bundler", "~> 1.7"
31
31
  spec.add_development_dependency "rake", "~> 10.0"
32
32
  spec.add_development_dependency "rspec"
33
+ spec.add_development_dependency 'byebug'
33
34
  end
@@ -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
- #TODO: test this!!
98
- comparisson_value = case hash_value
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] - get_key(hash, e[:key]) + 1
130
+ diff = get_diff( e[:value], get_key( hash, e[:key] )) + 1
124
131
  when :==, :!= then Time.now + s[:diff]
125
- diff = e[:value] - get_key(hash, e[:key])
132
+ diff = get_diff( e[:value], get_key(hash, e[:key]) )
126
133
  when :between
127
- diff = e[:value][0] - get_key(hash, e[:key])
128
- diff = e[:value][1] - get_key(hash, e[:key]) if Time.now + diff < Time.now
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,
@@ -1,3 +1,3 @@
1
1
  module HashConditions
2
- VERSION = "0.1.14"
2
+ VERSION = "0.1.15"
3
3
  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.14
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-03 00:00:00.000000000 Z
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