ruler_coaster 1.0.2 → 1.1.0
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 +4 -4
- data/lib/ruler_coaster/operator/base.rb +30 -3
- data/lib/ruler_coaster/operator/equal.rb +1 -1
- data/lib/ruler_coaster/operator/greater_than.rb +1 -1
- data/lib/ruler_coaster/parser.rb +8 -8
- data/lib/ruler_coaster/term/array.rb +31 -0
- data/lib/ruler_coaster/term/base.rb +30 -0
- data/lib/ruler_coaster/term/decimal.rb +9 -0
- data/lib/ruler_coaster/term/number.rb +9 -0
- data/lib/ruler_coaster/term/string.rb +9 -0
- data/lib/ruler_coaster/version.rb +1 -1
- data/lib/ruler_coaster.rb +1 -0
- metadata +9 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82f22410e008b993d8c7fefcdd9f51a4fb31a09c
|
4
|
+
data.tar.gz: f6850f85ff5ccd93c658390e281a96a731de686f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3aadd2800dce23c9760c3b6e7dfd15f5eafe272d0bf3120e7d33eca77fedd56f816e267eacad3134a55d62d9b3380055a4a0c4f2f1169fb9fe80b68c732155f5
|
7
|
+
data.tar.gz: 9b24b1af8b7aa6493156de273743e09177cbe903952cfad2f28a0e76252b109ed802bc107da87a38782fff5786f0ae1169253054f436df4fbb84f4381475fc87
|
@@ -1,10 +1,37 @@
|
|
1
1
|
module RulerCoaster
|
2
2
|
module Operator
|
3
3
|
class Base
|
4
|
-
attr_reader :assert_value
|
4
|
+
attr_reader :assert_value,
|
5
|
+
:value_type
|
5
6
|
|
6
|
-
def initialize(
|
7
|
-
@
|
7
|
+
def initialize(value, value_type = nil)
|
8
|
+
@value_type = infere_value_type(value_type, value)
|
9
|
+
@assert_value = build_term(value, @value_type).value
|
10
|
+
end
|
11
|
+
|
12
|
+
protected
|
13
|
+
|
14
|
+
def term_for(value)
|
15
|
+
Term.call(value, @value_type).value
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def build_term(value, value_type)
|
21
|
+
value.is_a?(Term::Base) ? value : Term.call(value, value_type)
|
22
|
+
end
|
23
|
+
|
24
|
+
def infere_value_type(type, value)
|
25
|
+
mapping = {
|
26
|
+
String => 'string',
|
27
|
+
Fixnum => 'number',
|
28
|
+
Float => 'decimal',
|
29
|
+
Array => 'array'
|
30
|
+
}
|
31
|
+
|
32
|
+
return mapping[value.class] || 'string' if type.nil?
|
33
|
+
|
34
|
+
type
|
8
35
|
end
|
9
36
|
end
|
10
37
|
end
|
data/lib/ruler_coaster/parser.rb
CHANGED
@@ -29,35 +29,35 @@ module RulerCoaster
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def visit_equal(node)
|
32
|
-
Operator::Equal.new
|
32
|
+
Operator::Equal.new node[:value], node[:value_type]
|
33
33
|
end
|
34
34
|
|
35
35
|
def visit_not_equal(node)
|
36
|
-
Operator::NotEqual.new
|
36
|
+
Operator::NotEqual.new node[:value], node[:value_type]
|
37
37
|
end
|
38
38
|
|
39
39
|
def visit_greater_than(node)
|
40
|
-
Operator::GreaterThan.new
|
40
|
+
Operator::GreaterThan.new node[:value], node[:value_type]
|
41
41
|
end
|
42
42
|
|
43
43
|
def visit_less_than(node)
|
44
|
-
Operator::LessThan.new
|
44
|
+
Operator::LessThan.new node[:value], node[:value_type]
|
45
45
|
end
|
46
46
|
|
47
47
|
def visit_contain(node)
|
48
|
-
Operator::Contain.new
|
48
|
+
Operator::Contain.new node[:value], node[:value_type]
|
49
49
|
end
|
50
50
|
|
51
51
|
def visit_not_contain(node)
|
52
|
-
Operator::NotContain.new
|
52
|
+
Operator::NotContain.new node[:value], node[:value_type]
|
53
53
|
end
|
54
54
|
|
55
55
|
def visit_empty(node)
|
56
|
-
Operator::Empty.new
|
56
|
+
Operator::Empty.new node[:value], node[:value_type]
|
57
57
|
end
|
58
58
|
|
59
59
|
def visit_not_empty(node)
|
60
|
-
Operator::NotEmpty.new
|
60
|
+
Operator::NotEmpty.new node[:value], node[:value_type]
|
61
61
|
end
|
62
62
|
|
63
63
|
module_function
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module RulerCoaster
|
2
|
+
module Term
|
3
|
+
class Array < Base
|
4
|
+
def value
|
5
|
+
array_value.map(&:to_s).map(&:strip)
|
6
|
+
end
|
7
|
+
|
8
|
+
protected
|
9
|
+
|
10
|
+
def array_value
|
11
|
+
@value.is_a?(::Array) ? @value : @value.split(',')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class ArrayNumber < Term::Array
|
16
|
+
def value
|
17
|
+
array_value.map do |item|
|
18
|
+
item.to_s.strip.to_i
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class ArrayDecimal < Term::Array
|
24
|
+
def value
|
25
|
+
array_value.map do |item|
|
26
|
+
item.to_s.strip.to_f
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module RulerCoaster
|
2
|
+
module Term
|
3
|
+
def self.call(value, value_type = nil)
|
4
|
+
mapping = {
|
5
|
+
'string' => Term::String,
|
6
|
+
'number' => Term::Number,
|
7
|
+
'decimal' => Term::Decimal,
|
8
|
+
'array' => Term::Array,
|
9
|
+
'array[string]' => Term::Array,
|
10
|
+
'array[number]' => Term::ArrayNumber,
|
11
|
+
'array[decimal]' => Term::ArrayDecimal
|
12
|
+
}
|
13
|
+
|
14
|
+
(mapping[value_type] || Term::String).new(value)
|
15
|
+
end
|
16
|
+
|
17
|
+
class Base
|
18
|
+
attr_accessor :value
|
19
|
+
|
20
|
+
def initialize(value)
|
21
|
+
@value = value
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
require 'ruler_coaster/term/string'
|
28
|
+
require 'ruler_coaster/term/number'
|
29
|
+
require 'ruler_coaster/term/decimal'
|
30
|
+
require 'ruler_coaster/term/array'
|
data/lib/ruler_coaster.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruler_coaster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Streetbees Dev Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -96,8 +96,13 @@ files:
|
|
96
96
|
- lib/ruler_coaster/parser.rb
|
97
97
|
- lib/ruler_coaster/result.rb
|
98
98
|
- lib/ruler_coaster/rule.rb
|
99
|
+
- lib/ruler_coaster/term/array.rb
|
100
|
+
- lib/ruler_coaster/term/base.rb
|
101
|
+
- lib/ruler_coaster/term/decimal.rb
|
102
|
+
- lib/ruler_coaster/term/number.rb
|
103
|
+
- lib/ruler_coaster/term/string.rb
|
99
104
|
- lib/ruler_coaster/version.rb
|
100
|
-
homepage: https://github.com/streetbees/
|
105
|
+
homepage: https://github.com/streetbees/ruler-coaster
|
101
106
|
licenses: []
|
102
107
|
metadata: {}
|
103
108
|
post_install_message:
|
@@ -116,7 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
121
|
version: '0'
|
117
122
|
requirements: []
|
118
123
|
rubyforge_project:
|
119
|
-
rubygems_version: 2.
|
124
|
+
rubygems_version: 2.5.1
|
120
125
|
signing_key:
|
121
126
|
specification_version: 4
|
122
127
|
summary: Rule engine
|