hash_conditions 0.1.11 → 0.1.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NzAzN2UyMzc4M2E0MjkwYzJmOTM0MzQwYWIwNDI2YjJjNGQ4MTRlZA==
5
+ data.tar.gz: !binary |-
6
+ MjExZmQxNGJiMTI1ZmU0OTg1NDEyMWM4OGNlMGZlZGU4NGQzYjEyOQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ NDliZDZlMjQwMDEwYmEwOGZjYzM4MTE0ZDY3MDBhM2I1M2E5ZTk4YjAyNGM2
10
+ MDg1OWM3Mjc1MDg1ZWJlYmJhMzkxMTVmYTlmMzMzMjJlNDZlYmU1NzYzNzIz
11
+ OWJmYzYzZGJjZDcwY2FjZDEzMjA1NTBmODdhYWNhZWVkMWMyYjU=
12
+ data.tar.gz: !binary |-
13
+ NTA1YjFhMmYyNzRkYTExYzkyZWM2NzE5MTY2ZGE4ZjhhODQzYTgwYTgwOTFh
14
+ MjEyNTMyZGM4NDc1ZjFkZjM5NzliNWNjMmQ4NjgxODkzNjBlOTdiMWUzNjAw
15
+ ODc1ZWZiNWQ0NGI3MmFmM2NlNTUyMzBlMjZlMGQ4MGZiNjhjOWQ=
data/.travis.yml CHANGED
@@ -1,3 +1,5 @@
1
1
  language: ruby
2
- rvm:
3
- - 2.0.0
2
+ script: bundle exec rspec spec
3
+ addons:
4
+ code_climate:
5
+ repo_token: 95cc7851ba72101f1fd583babcbc66eb70b457f2e351df99aaafb621fef2c2e5
data/Gemfile CHANGED
@@ -1,4 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in hash_conditions.gemspec
4
+
5
+ gem "codeclimate-test-reporter", group: :test, require: nil
6
+
4
7
  gemspec
data/README.md CHANGED
@@ -1,3 +1,6 @@
1
+ [![Code Climate](https://codeclimate.com/github/kasthor/hash_conditions/badges/gpa.svg)](https://codeclimate.com/github/kasthor/hash_conditions)
2
+ [![Test Coverage](https://codeclimate.com/github/kasthor/hash_conditions/badges/coverage.svg)](https://codeclimate.com/github/kasthor/hash_conditions/coverage)
3
+
1
4
  # HashConditions
2
5
 
3
6
  Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/hash_conditions`. To experiment with that code, run `bin/console` for an interactive prompt.
@@ -9,14 +9,14 @@ module HashConditions
9
9
  @@modules = []
10
10
  end
11
11
 
12
- def bundles
12
+ def bundles
13
13
  @@bundles ||= []
14
14
  end
15
15
 
16
16
  def add_bundle name
17
17
  bundles << name
18
18
  end
19
- def contains_bundle name
19
+ def contains_bundle name
20
20
  bundles.include? name
21
21
  end
22
22
 
@@ -24,13 +24,13 @@ module HashConditions
24
24
  writer = block if block
25
25
  modules << ModuleMatcher.new(matcher, writer, operations)
26
26
  end
27
-
27
+
28
28
  # Iterator
29
29
 
30
30
  def iterator conditions, options = {}
31
31
  options = { glue: :and }.merge options
32
32
 
33
- result = case conditions
33
+ result = case conditions
34
34
  when ::Hash
35
35
  conditions.map do | key, value |
36
36
  case key
@@ -46,7 +46,7 @@ module HashConditions
46
46
  iterator condition, options
47
47
  end
48
48
  end
49
-
49
+
50
50
  options[:finalize].call result, options
51
51
  end
52
52
 
@@ -55,10 +55,10 @@ module HashConditions
55
55
  end
56
56
 
57
57
  def eval_expression value
58
- raise "Invalid eval expression" unless value.is_a? Array and value.length == 3
58
+ raise "Invalid eval expression" unless value.is_a? Array and value.length == 3
59
59
 
60
60
  Hash[ [ :key, :operator, :value ].zip( value ) ].tap do | exp |
61
- exp[ :operator ] = get_op exp[ :operator ]
61
+ exp[ :operator ] = get_op exp[ :operator ]
62
62
  end
63
63
  end
64
64
 
@@ -79,8 +79,8 @@ module HashConditions
79
79
 
80
80
  result[:operator] = get_op key
81
81
  result[:value] = value
82
- else
83
- case
82
+ else
83
+ case
84
84
  when value.keys.include?('$between')
85
85
  result[:operator] = :between
86
86
  result[:value] = value.values_at [ '$between', '$and' ]
@@ -102,7 +102,7 @@ module HashConditions
102
102
  def ops
103
103
  {
104
104
  :== => [ '$eq', '$equal' ],
105
- :!= => [ '$ne' ],
105
+ :!= => [ '$ne', '$not_equal' ],
106
106
  :> => [ '$gt' ],
107
107
  :< => [ '$lt' ],
108
108
  :>= => [ '$gte' ],
@@ -126,7 +126,7 @@ module HashConditions
126
126
  case data
127
127
  when /\d{4}-\d{2}-\d{2}[\sT]\d{2}:\d{2}:\d{2}(\.\d{3})?Z?/ then DateTime.parse( data ).to_time
128
128
  else data
129
- end
129
+ end
130
130
  else
131
131
  data
132
132
  end
@@ -143,17 +143,17 @@ module HashConditions
143
143
  mod = _ext_get_module key,condition, options
144
144
  parser = mod.replacement
145
145
 
146
- case parser
146
+ case parser
147
147
  when String then options[:result].call(extract_expression( parser, condition ), options)
148
148
  when Hash then _ext_read_module( { '$eval' => [ parser, op, value ] }, options )
149
149
  when Proc then _ext_read_module( parser.call( key, condition, options ), options )
150
- end
150
+ end
151
151
  end
152
152
 
153
153
  def _ext_get_module key, condition, options
154
154
  modules.select{ |m| m.for_operation? options[:operation] }.find do | matcher |
155
155
  matcher.apply_for key, condition
156
- end
156
+ end
157
157
  end
158
158
 
159
159
  def _ext_read_module parser_output, options
@@ -1,8 +1,8 @@
1
1
  module HashConditions
2
2
  class Matcher
3
- extend Core
3
+ extend Core
4
4
 
5
- def self.configurations
5
+ def self.configurations
6
6
  @@configurations ||= {}
7
7
  end
8
8
 
@@ -21,20 +21,20 @@ module HashConditions
21
21
  match_single hash, expression, options
22
22
  },
23
23
  finalize: lambda{ | array, options |
24
- finalize hash, array, options
24
+ finalize hash, array, options
25
25
  }
26
26
  }.merge options
27
27
 
28
28
  iterator conditions, options
29
29
  end
30
-
30
+
31
31
  def self.finalize hash, array, options
32
32
  case options[:glue]
33
33
  when :or then array.any?
34
34
  when :and then array.all?
35
35
  end
36
- end
37
-
36
+ end
37
+
38
38
  ARITMETIC_OPERATORS = {
39
39
  '$add' => :+,
40
40
  '$substract' => :-,
@@ -69,13 +69,13 @@ module HashConditions
69
69
  end
70
70
  end
71
71
  end
72
-
72
+
73
73
  def self.match_single hash, expression, options
74
74
  hash_value = get_key hash, expression[:key], options
75
75
  comparisson_value = expression[ :value ]
76
76
 
77
77
  case expression[:operator]
78
- when :==
78
+ when :==
79
79
  if configuration( :force_string_comparations )
80
80
  hash_value = hash_value.to_s
81
81
  comparisson_value = comparisson_value.to_s
@@ -86,7 +86,7 @@ module HashConditions
86
86
  hash_value = hash_value.to_s
87
87
  comparisson_value = comparisson_value.map(&:to_s)
88
88
  end
89
-
89
+
90
90
  comparisson_value.include? hash_value
91
91
  when :between
92
92
  hash_value > comparisson_value[0] and hash_value < comparisson_value[1]
@@ -99,7 +99,7 @@ module HashConditions
99
99
 
100
100
  def self.when hash, query
101
101
  now_result = match hash, query
102
- test_times = critical_times( hash, time_expressions( query ) )
102
+ test_times = critical_times( hash, time_expressions( query ) )
103
103
  test_times.
104
104
  sort.
105
105
  drop_while{ |t| t < Time.now }.
@@ -108,9 +108,9 @@ module HashConditions
108
108
 
109
109
  def self.critical_times hash, expressions
110
110
  expressions.
111
- map{ | e |
111
+ map{ | e |
112
112
  case e[:operator]
113
- when :<, :<=, :>, :>= then
113
+ when :<, :<=, :>, :>= then
114
114
  diff = e[:value] - get_key(hash, e[:key]) + 1
115
115
  when :==, :!= then Time.now + s[:diff]
116
116
  diff = e[:value] - get_key(hash, e[:key])
@@ -124,8 +124,8 @@ module HashConditions
124
124
  end
125
125
 
126
126
  def self.time_expressions conditions
127
- expressions = []
128
- iterator conditions,
127
+ expressions = []
128
+ iterator conditions,
129
129
  operation: :match,
130
130
  result: lambda{ | expression, options |
131
131
  expressions << expression if uses_now? expression
@@ -22,16 +22,18 @@ module HashConditions
22
22
  end
23
23
 
24
24
  def self._parse_key_value_condition expression
25
- # "#{key} #{_parse_value_condition condition}"
25
+ # "#{key} #{_parse_value_condition condition}"
26
26
  comparisson = case expression[:operator]
27
27
  when :==
28
28
  "= #{_parse_value expression[:value]}"
29
+ when :!=
30
+ "!= #{_parse_value expression[:value]}"
29
31
  when :>, :<, :>=, :<=
30
32
  "#{ expression[:operator] } #{_parse_value expression[:value]}"
31
33
  when :in
32
34
  "IN ( #{ expression[:value].map{ |v| _parse_value v }.join ", " } )"
33
35
  when :contains
34
- "LIKE #{ _parse_value(expression[:value], '%', '%') }"
36
+ "LIKE #{ _parse_value(expression[:value], '%', '%') }"
35
37
  when :between
36
38
  "BETWEEN #{ _parse_value expression[:value].shift } AND #{ _parse_value expression[:value].shift }"
37
39
  end
@@ -1,3 +1,3 @@
1
1
  module HashConditions
2
- VERSION = "0.1.11"
2
+ VERSION = "0.1.12"
3
3
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_conditions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.11
5
- prerelease:
4
+ version: 0.1.12
6
5
  platform: ruby
7
6
  authors:
8
7
  - Giancarlo Palavicini
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2015-06-16 00:00:00.000000000 Z
11
+ date: 2015-06-22 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ! '>='
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ! '>='
60
53
  - !ruby/object:Gem::Version
@@ -90,32 +83,25 @@ files:
90
83
  homepage: http://kasthor.com
91
84
  licenses:
92
85
  - MIT
86
+ metadata: {}
93
87
  post_install_message:
94
88
  rdoc_options: []
95
89
  require_paths:
96
90
  - lib
97
91
  required_ruby_version: !ruby/object:Gem::Requirement
98
- none: false
99
92
  requirements:
100
93
  - - ! '>='
101
94
  - !ruby/object:Gem::Version
102
95
  version: '0'
103
- segments:
104
- - 0
105
- hash: -563002779968632233
106
96
  required_rubygems_version: !ruby/object:Gem::Requirement
107
- none: false
108
97
  requirements:
109
98
  - - ! '>='
110
99
  - !ruby/object:Gem::Version
111
100
  version: '0'
112
- segments:
113
- - 0
114
- hash: -563002779968632233
115
101
  requirements: []
116
102
  rubyforge_project:
117
- rubygems_version: 1.8.23
103
+ rubygems_version: 2.4.8
118
104
  signing_key:
119
- specification_version: 3
105
+ specification_version: 4
120
106
  summary: Ability to parse and match hashes against Mongo-like querys
121
107
  test_files: []