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