ruva 1.0.1 → 1.0.2
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 +7 -0
- data/.gitignore +1 -0
- data/README.md +7 -7
- data/lib/ruva.rb +48 -30
- data/lib/ruva/expression/equal_greater_less.rb +59 -55
- data/lib/ruva/expression/expression_leaf_spec.rb +37 -46
- data/lib/ruva/expression/identifier_comparable.rb +55 -51
- data/lib/ruva/expression/is_between.rb +49 -45
- data/lib/ruva/expression/matches.rb +39 -35
- data/lib/ruva/expression/ruva_expression.citrus +42 -42
- data/lib/ruva/specification/specification.rb +83 -100
- data/lib/ruva/util.rb +28 -0
- data/lib/ruva/version.rb +1 -1
- data/ruva.gemspec +4 -4
- data/spec/expression_spec.rb +18 -19
- data/spec/hash_to_ostruct_spec.rb +22 -22
- data/spec/helpers/expression_helper.rb +1 -1
- data/spec/util_spec.rb +7 -0
- metadata +15 -22
- data/lib/ruva/expression.rb +0 -17
- data/lib/ruva/specification.rb +0 -1
data/lib/ruva/util.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
module Ruva
|
2
|
+
module Util
|
3
|
+
# This module provides functionality to perform deep method/attribute calls
|
4
|
+
# on an object with a given string, such as 'this.is.a.deep.call'.
|
5
|
+
module DeepCall
|
6
|
+
def self.init_deep_call call_string, candidate
|
7
|
+
deep_call(get_call_stack(call_string), to_open_struct(candidate))
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.deep_call call_stack, candidate
|
11
|
+
candidate = candidate.instance_eval(call_stack.pop)
|
12
|
+
if (call_stack.size > 0)
|
13
|
+
candidate = to_open_struct(candidate)
|
14
|
+
return deep_call(call_stack, candidate)
|
15
|
+
end
|
16
|
+
candidate
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.get_call_stack call_string
|
20
|
+
call_string.split(".").reverse
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.to_open_struct candidate
|
24
|
+
candidate.is_a?(Hash) ? OpenStruct.new(candidate) : candidate
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/ruva/version.rb
CHANGED
data/ruva.gemspec
CHANGED
@@ -6,8 +6,8 @@ Gem::Specification.new do |gem|
|
|
6
6
|
gem.version = Ruva::VERSION
|
7
7
|
|
8
8
|
gem.authors = ["Samuel Mueller"]
|
9
|
-
gem.email = ["
|
10
|
-
gem.description = %q{
|
9
|
+
gem.email = [""]
|
10
|
+
gem.description = %q{Write text conditions.}
|
11
11
|
gem.summary = gem.description
|
12
12
|
gem.homepage = "https://github.com/ssmm/ruva"
|
13
13
|
|
@@ -15,9 +15,9 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
16
16
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
17
17
|
gem.require_paths = ["lib"]
|
18
|
-
|
18
|
+
|
19
19
|
gem.add_dependency "citrus", "~> 2.4.1"
|
20
20
|
gem.add_dependency "indentation-parser"
|
21
|
-
|
21
|
+
|
22
22
|
gem.add_development_dependency "rspec", "~> 2.6"
|
23
23
|
end
|
data/spec/expression_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'ruva
|
1
|
+
require 'ruva'
|
2
2
|
require 'helpers/expression_helper'
|
3
3
|
|
4
4
|
RSpec.configure do |c|
|
@@ -14,10 +14,10 @@ describe Ruva do
|
|
14
14
|
test_expression "age is 23 or 24 or 25", {:age => 24}, true
|
15
15
|
|
16
16
|
test_expression "age is between 18 and 28", {:age => 23}, true
|
17
|
-
|
17
|
+
|
18
18
|
test_expression "age is between 18 and 28", {:age => 28}, true
|
19
19
|
test_expression "age is between 18 and 28", {:age => 18}, true
|
20
|
-
|
20
|
+
|
21
21
|
test_expression "age is between 18 and 28", {:age => 50}, false
|
22
22
|
test_expression "age is between 18 and 28", {:age => 17}, false
|
23
23
|
end
|
@@ -44,39 +44,39 @@ describe Ruva do
|
|
44
44
|
it "handles numerics" do
|
45
45
|
test_expression "age is greater than 23", {:age => 24}, true
|
46
46
|
test_expression "age is greater than 23", {:age => 23}, false
|
47
|
-
|
47
|
+
|
48
48
|
test_expression "age is less than 23", {:age => 22}, true
|
49
49
|
test_expression "age is less than 23", {:age => 23}, false
|
50
|
-
|
50
|
+
|
51
51
|
test_expression "age is greater than or equal to 23", {:age => 23}, true
|
52
52
|
test_expression "age is greater than or equal to 23", {:age => 22}, false
|
53
|
-
|
53
|
+
|
54
54
|
test_expression "age is less than or equal to 23", {:age => 23}, true
|
55
55
|
test_expression "age is less than or equal to 23", {:age => 24}, false
|
56
56
|
|
57
57
|
test_expression "age is 23 or more", {:age => 23}, true
|
58
58
|
test_expression "age is 23 or more", {:age => 22}, false
|
59
59
|
test_expression "age is 23 or more", {:age => 24}, true
|
60
|
-
|
60
|
+
|
61
61
|
test_expression "age is 23 or less", {:age => 23}, true
|
62
62
|
test_expression "age is 23 or less", {:age => 24}, false
|
63
63
|
test_expression "age is 23 or less", {:age => 22}, true
|
64
64
|
end
|
65
|
-
|
66
|
-
it "handles strings" do
|
65
|
+
|
66
|
+
it "handles strings" do
|
67
67
|
test_expression "name is greater than samuel", {:name => "simon"}, true
|
68
68
|
test_expression "name is greater than samuel", {:name => "samantha"}, false
|
69
|
-
|
69
|
+
|
70
70
|
test_expression "name is less than samuel", {:name => "lisa"}, true
|
71
71
|
test_expression "name is less than samuel", {:name => "samuel l jackson"}, false
|
72
|
-
|
72
|
+
|
73
73
|
test_expression "name is greater than or equal to samuel", {:name => "samuel"}, true
|
74
74
|
test_expression "name is greater than or equal to samuel", {:name => "samantha"}, false
|
75
|
-
|
75
|
+
|
76
76
|
test_expression "name is less than or equal to samuel", {:name => "samuel"}, true
|
77
77
|
test_expression "name is less than or equal to samuel", {:name => "samuel l jackson"}, false
|
78
78
|
end
|
79
|
-
|
79
|
+
|
80
80
|
it "handes dates" do
|
81
81
|
test_expression "date is greater than 01.01.2011", {:date => Date.parse("1.1.2012")}, true
|
82
82
|
test_expression "date is greater than 01.01.2011", {:date => Date.parse("1.1.2010")}, false
|
@@ -91,21 +91,21 @@ describe Ruva do
|
|
91
91
|
test_expression "date is less than or equal to 01.01.2011", {:date => Date.parse("1.1.2012")}, false
|
92
92
|
end
|
93
93
|
end
|
94
|
-
|
94
|
+
|
95
95
|
describe "matches expressions" do
|
96
96
|
it "handles strings" do
|
97
97
|
test_expression "name matches sam", {:name => "samuel"}, true
|
98
98
|
test_expression "name matches am", {:name => "samuel"}, true
|
99
99
|
test_expression "name matches uel", {:name => "samuel"}, true
|
100
|
-
|
100
|
+
|
101
101
|
test_expression "name matches xyz", {:name => "samuel"}, false
|
102
|
-
|
102
|
+
|
103
103
|
test_expression "name matches /^samuel$/", {:name => "samuel"}, true
|
104
104
|
test_expression "name matches /^samuel$/", {:name => "samuel "}, false
|
105
|
-
|
105
|
+
|
106
106
|
test_expression "name matches /daniel|jonas/", {:name => "daniel"}, true
|
107
107
|
test_expression "name matches /daniel|jonas/", {:name => "jonas"}, true
|
108
|
-
|
108
|
+
|
109
109
|
test_expression 'name matches /regex\/with escaping/', {:name => "regex/with escaping"}, true
|
110
110
|
test_expression "name matches /regex\\/with escaping/", {:name => "regex/with escaping"}, true
|
111
111
|
end
|
@@ -148,7 +148,6 @@ describe Ruva do
|
|
148
148
|
{:third => 3}
|
149
149
|
]}
|
150
150
|
obj.map = map
|
151
|
-
puts obj
|
152
151
|
test_expression "map.list[1].second is 2", obj, true
|
153
152
|
end
|
154
153
|
end
|
@@ -1,23 +1,23 @@
|
|
1
|
-
require 'ruva'
|
1
|
+
# require 'ruva'
|
2
2
|
|
3
|
-
describe Ruva do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
3
|
+
# describe Ruva do
|
4
|
+
# it "turns a hash into an ostruct" do
|
5
|
+
# person = OpenStruct.new
|
6
|
+
# person.name = "sam"
|
7
|
+
# person.age = 23
|
8
|
+
# hash = {
|
9
|
+
# :this => {
|
10
|
+
# :ostruct => person,
|
11
|
+
# :is => {
|
12
|
+
# :a => {
|
13
|
+
# :test => "works!"
|
14
|
+
# }
|
15
|
+
# }
|
16
|
+
# }
|
17
|
+
# }
|
18
|
+
# ostruct = Ruva.hash_to_ostruct hash
|
19
|
+
# ostruct.this.is.a.test.should eq "works!"
|
20
|
+
# ostruct.this.ostruct.name.should eq "sam"
|
21
|
+
# ostruct.this.ostruct.age.should eq 23
|
22
|
+
# end
|
23
|
+
# end
|
data/spec/util_spec.rb
ADDED
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruva
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Samuel Mueller
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-05-23 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: citrus
|
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: :runtime
|
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,23 +27,20 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: indentation-parser
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :runtime
|
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
|
45
40
|
version: '0'
|
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,14 +48,13 @@ 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
|
61
54
|
version: '2.6'
|
62
|
-
description:
|
55
|
+
description: Write text conditions.
|
63
56
|
email:
|
64
|
-
-
|
57
|
+
- ''
|
65
58
|
executables: []
|
66
59
|
extensions: []
|
67
60
|
extra_rdoc_files: []
|
@@ -73,15 +66,14 @@ files:
|
|
73
66
|
- README.md
|
74
67
|
- Rakefile
|
75
68
|
- lib/ruva.rb
|
76
|
-
- lib/ruva/expression.rb
|
77
69
|
- lib/ruva/expression/equal_greater_less.rb
|
78
70
|
- lib/ruva/expression/expression_leaf_spec.rb
|
79
71
|
- lib/ruva/expression/identifier_comparable.rb
|
80
72
|
- lib/ruva/expression/is_between.rb
|
81
73
|
- lib/ruva/expression/matches.rb
|
82
74
|
- lib/ruva/expression/ruva_expression.citrus
|
83
|
-
- lib/ruva/specification.rb
|
84
75
|
- lib/ruva/specification/specification.rb
|
76
|
+
- lib/ruva/util.rb
|
85
77
|
- lib/ruva/version.rb
|
86
78
|
- ruva.gemspec
|
87
79
|
- spec/conditions/simple_condition.ruva
|
@@ -91,30 +83,30 @@ files:
|
|
91
83
|
- spec/inline_ruva_spec.rb
|
92
84
|
- spec/normalize_indentation_spec.rb
|
93
85
|
- spec/ruva_spec.rb
|
86
|
+
- spec/util_spec.rb
|
94
87
|
homepage: https://github.com/ssmm/ruva
|
95
88
|
licenses: []
|
89
|
+
metadata: {}
|
96
90
|
post_install_message:
|
97
91
|
rdoc_options: []
|
98
92
|
require_paths:
|
99
93
|
- lib
|
100
94
|
required_ruby_version: !ruby/object:Gem::Requirement
|
101
|
-
none: false
|
102
95
|
requirements:
|
103
|
-
- -
|
96
|
+
- - '>='
|
104
97
|
- !ruby/object:Gem::Version
|
105
98
|
version: '0'
|
106
99
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
-
none: false
|
108
100
|
requirements:
|
109
|
-
- -
|
101
|
+
- - '>='
|
110
102
|
- !ruby/object:Gem::Version
|
111
103
|
version: '0'
|
112
104
|
requirements: []
|
113
105
|
rubyforge_project:
|
114
|
-
rubygems_version:
|
106
|
+
rubygems_version: 2.0.3
|
115
107
|
signing_key:
|
116
|
-
specification_version:
|
117
|
-
summary:
|
108
|
+
specification_version: 4
|
109
|
+
summary: Write text conditions.
|
118
110
|
test_files:
|
119
111
|
- spec/conditions/simple_condition.ruva
|
120
112
|
- spec/expression_spec.rb
|
@@ -123,3 +115,4 @@ test_files:
|
|
123
115
|
- spec/inline_ruva_spec.rb
|
124
116
|
- spec/normalize_indentation_spec.rb
|
125
117
|
- spec/ruva_spec.rb
|
118
|
+
- spec/util_spec.rb
|
data/lib/ruva/expression.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'citrus'
|
2
|
-
require 'ostruct'
|
3
|
-
require 'ruva/specification'
|
4
|
-
require 'ruva/expression/expression_leaf_spec'
|
5
|
-
require 'ruva/expression/equal_greater_less'
|
6
|
-
require 'ruva/expression/identifier_comparable'
|
7
|
-
require 'ruva/expression/is_between'
|
8
|
-
require 'ruva/expression/matches'
|
9
|
-
|
10
|
-
Citrus.require 'ruva/expression/ruva_expression'
|
11
|
-
|
12
|
-
module RuvaExpression
|
13
|
-
def self.parse expression
|
14
|
-
result = super expression
|
15
|
-
result.value
|
16
|
-
end
|
17
|
-
end
|
data/lib/ruva/specification.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'ruva/specification/specification'
|