semi 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/semi/config.rb +7 -1
- data/lib/semi/driver.rb +5 -0
- data/lib/semi/variable.rb +20 -2
- data/lib/semi/variables/boolean.rb +2 -2
- data/lib/semi/version.rb +1 -1
- data/spec/semi_variable_spec.rb +105 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4fce5fc892b8b2580065e3ea26962266cc3c5e94
|
4
|
+
data.tar.gz: e7838ad1cd46b5eeb41bdc0c900035620e43db85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c77242bcc00ffdc56f833534aa8aea287012e9b8bb6ecb6916f8037b89acd0133e72f4075049c1032ce20acc6c3902607b4c58c077595693f8c55aaa4eae6fd
|
7
|
+
data.tar.gz: 7895df9833744e8d0e8528865bad7017932da4fb1582b7d95b669bba12758284aa68169e423610d849c675108b64d05b51415dee5f0f7659999ae58ccc3cc144
|
data/lib/semi/config.rb
CHANGED
@@ -49,7 +49,13 @@ module Semi
|
|
49
49
|
# Read the file and apply @dictionary values
|
50
50
|
contents = File.open(filename, 'r') do |fp|
|
51
51
|
renderer = ERB.new(fp.readlines.join, nil, '%<>-')
|
52
|
-
|
52
|
+
begin
|
53
|
+
renderer.result(dictionary.instance_eval {binding})
|
54
|
+
rescue SyntaxError => e
|
55
|
+
$stderr.puts "Error processing ERB expressions in #{filename}"
|
56
|
+
$stderr.puts "ERB reported #{e}"
|
57
|
+
exit 1
|
58
|
+
end
|
53
59
|
end
|
54
60
|
|
55
61
|
# Reopen the file and write the rendered contents
|
data/lib/semi/driver.rb
CHANGED
@@ -22,6 +22,11 @@ module Semi
|
|
22
22
|
@dictionary[name.downcase] = Semi::Variable.import(val, hints)
|
23
23
|
end
|
24
24
|
|
25
|
+
# Now that all values should be present in @dictionary, do any expansions
|
26
|
+
@dictionary.each_pair do |name, val|
|
27
|
+
@dictionary[name] = Semi::Variable.expand(val, @dictionary)
|
28
|
+
end
|
29
|
+
|
25
30
|
# Check any validations being asserted
|
26
31
|
@config.validators.each_key { |key|
|
27
32
|
begin
|
data/lib/semi/variable.rb
CHANGED
@@ -5,6 +5,7 @@ require 'semi/variables/boolean'
|
|
5
5
|
require 'semi/variables/path'
|
6
6
|
require 'semi/variables/url'
|
7
7
|
|
8
|
+
|
8
9
|
module Semi
|
9
10
|
|
10
11
|
class VariableError < RuntimeError; end
|
@@ -46,11 +47,28 @@ module Semi
|
|
46
47
|
else
|
47
48
|
return Semi::Variables::String.new(val)
|
48
49
|
end
|
49
|
-
|
50
|
+
|
50
51
|
end
|
51
52
|
|
52
|
-
|
53
53
|
|
54
|
+
def self.expand(val, dict)
|
55
|
+
check = true
|
56
|
+
while check
|
57
|
+
# Look for simple variable expansion
|
58
|
+
if val =~ /\$\{?(\w+)\}?/
|
59
|
+
Regexp.last_match
|
60
|
+
val = $` + expand($1, dict) + $'
|
61
|
+
elsif val =~ /\$\((.*)\)/
|
62
|
+
Regexp.last_match
|
63
|
+
val = $` + `$1` + $'
|
64
|
+
else
|
65
|
+
# no more matches... we must be done...
|
66
|
+
check = false
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
return val
|
71
|
+
end
|
54
72
|
|
55
73
|
end
|
56
74
|
end
|
@@ -33,9 +33,9 @@ module Semi::Variables
|
|
33
33
|
end
|
34
34
|
|
35
35
|
# test to see if the value is a common true value
|
36
|
-
if value =~ /true|yes|enable/i
|
36
|
+
if value =~ /true|yes|on|enable/i
|
37
37
|
real_value = true
|
38
|
-
elsif value =~ /false|no|disable/i
|
38
|
+
elsif value =~ /false|no|off|disable/i
|
39
39
|
real_value = false
|
40
40
|
end
|
41
41
|
|
data/lib/semi/version.rb
CHANGED
@@ -0,0 +1,105 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
describe Semi::Variable do
|
5
|
+
|
6
|
+
[
|
7
|
+
# value, var type, hints
|
8
|
+
['/etc/passwd', 'Semi::Variables::Path', nil],
|
9
|
+
['./file.txt', 'Semi::Variables::Path', nil],
|
10
|
+
['~root/.bashrc', 'Semi::Variables::Path', nil],
|
11
|
+
['../../bin/ls', 'Semi::Variables::Path', nil],
|
12
|
+
['/etc/passwd', 'Semi::Variables::Path', 'path'],
|
13
|
+
['./file.txt', 'Semi::Variables::Path', 'path'],
|
14
|
+
['~root/.bashrc', 'Semi::Variables::Path', 'path'],
|
15
|
+
['../../bin/ls', 'Semi::Variables::Path', 'path'],
|
16
|
+
['/etc/passwd', 'Semi::Variables::String', 'string'],
|
17
|
+
['./file.txt', 'Semi::Variables::String', 'string'],
|
18
|
+
['~root/.bashrc', 'Semi::Variables::String', 'string'],
|
19
|
+
['../../bin/ls', 'Semi::Variables::String', 'string'],
|
20
|
+
[849234, 'Semi::Variables::Integer', nil],
|
21
|
+
[0x8849, 'Semi::Variables::Integer', nil],
|
22
|
+
[7_849, 'Semi::Variables::Integer', nil],
|
23
|
+
['849234', 'Semi::Variables::String', nil],
|
24
|
+
['0x8849', 'Semi::Variables::String', nil],
|
25
|
+
['7_849', 'Semi::Variables::String', nil],
|
26
|
+
['849234', 'Semi::Variables::Integer', 'integer'],
|
27
|
+
['0x8849', 'Semi::Variables::Integer', 'integer'],
|
28
|
+
['7_849', 'Semi::Variables::Integer', 'integer'],
|
29
|
+
[true, 'Semi::Variables::Boolean', nil],
|
30
|
+
[false, 'Semi::Variables::Boolean', nil],
|
31
|
+
['true', 'Semi::Variables::Boolean', nil],
|
32
|
+
['false', 'Semi::Variables::Boolean', nil],
|
33
|
+
['on', 'Semi::Variables::Boolean', nil],
|
34
|
+
['off', 'Semi::Variables::Boolean', nil],
|
35
|
+
['yes', 'Semi::Variables::Boolean', nil],
|
36
|
+
['no', 'Semi::Variables::Boolean', nil],
|
37
|
+
['enable', 'Semi::Variables::Boolean', nil],
|
38
|
+
['disable', 'Semi::Variables::Boolean', nil],
|
39
|
+
['TRUE', 'Semi::Variables::Boolean', nil],
|
40
|
+
['FALSE', 'Semi::Variables::Boolean', nil],
|
41
|
+
['ON', 'Semi::Variables::Boolean', nil],
|
42
|
+
['OFF', 'Semi::Variables::Boolean', nil],
|
43
|
+
['YES', 'Semi::Variables::Boolean', nil],
|
44
|
+
['NO', 'Semi::Variables::Boolean', nil],
|
45
|
+
['ENABLE', 'Semi::Variables::Boolean', nil],
|
46
|
+
['DISABLE', 'Semi::Variables::Boolean', nil],
|
47
|
+
['True', 'Semi::Variables::Boolean', nil],
|
48
|
+
['False', 'Semi::Variables::Boolean', nil],
|
49
|
+
['On', 'Semi::Variables::Boolean', nil],
|
50
|
+
['Off', 'Semi::Variables::Boolean', nil],
|
51
|
+
['Yes', 'Semi::Variables::Boolean', nil],
|
52
|
+
['No', 'Semi::Variables::Boolean', nil],
|
53
|
+
['Enable', 'Semi::Variables::Boolean', nil],
|
54
|
+
['Disable', 'Semi::Variables::Boolean', nil],
|
55
|
+
['true', 'Semi::Variables::Boolean', 'boolean'],
|
56
|
+
['false', 'Semi::Variables::Boolean', 'boolean'],
|
57
|
+
['on', 'Semi::Variables::Boolean', 'boolean'],
|
58
|
+
['off', 'Semi::Variables::Boolean', 'boolean'],
|
59
|
+
['yes', 'Semi::Variables::Boolean', 'boolean'],
|
60
|
+
['no', 'Semi::Variables::Boolean', 'boolean'],
|
61
|
+
['enable', 'Semi::Variables::Boolean', 'boolean'],
|
62
|
+
['disable', 'Semi::Variables::Boolean', 'boolean'],
|
63
|
+
['true', 'Semi::Variables::String', 'string'],
|
64
|
+
['false', 'Semi::Variables::String', 'string'],
|
65
|
+
['on', 'Semi::Variables::String', 'string'],
|
66
|
+
['off', 'Semi::Variables::String', 'string'],
|
67
|
+
['yes', 'Semi::Variables::String', 'string'],
|
68
|
+
['no', 'Semi::Variables::String', 'string'],
|
69
|
+
['enable', 'Semi::Variables::String', 'string'],
|
70
|
+
['disable', 'Semi::Variables::String', 'string'],
|
71
|
+
['http://www.google.com/', 'Semi::Variables::Url', nil],
|
72
|
+
['https://www.google.com/', 'Semi::Variables::Url', nil],
|
73
|
+
['http://www.google.com', 'Semi::Variables::Url', nil],
|
74
|
+
['https://www.google.com', 'Semi::Variables::Url', nil],
|
75
|
+
['https://www.google.com:80/', 'Semi::Variables::Url', nil],
|
76
|
+
['http://www.google.com:808/', 'Semi::Variables::Url', nil],
|
77
|
+
['http://www.google.com:8080/', 'Semi::Variables::Url', nil],
|
78
|
+
['https://www.google.com:80808/', 'Semi::Variables::Url', nil],
|
79
|
+
['https://www.google.com:80', 'Semi::Variables::Url', nil],
|
80
|
+
['http://www.google.com:808', 'Semi::Variables::Url', nil],
|
81
|
+
['http://www.google.com:8080', 'Semi::Variables::Url', nil],
|
82
|
+
['https://www.google.com:80808', 'Semi::Variables::Url', nil],
|
83
|
+
['ftp://ftp.ftp.com', 'Semi::Variables::Url', nil],
|
84
|
+
['ftp://ftp.com/', 'Semi::Variables::Url', nil],
|
85
|
+
['ftp://ftp.com/foo.baz', 'Semi::Variables::Url', nil],
|
86
|
+
['ftp://ftp.com/foo/bar/foo.baz',
|
87
|
+
'Semi::Variables::Url', nil],
|
88
|
+
['http://www/', 'Semi::Variables::Url', nil],
|
89
|
+
['http://www', 'Semi::Variables::Url', nil],
|
90
|
+
['http://www:888', 'Semi::Variables::Url', nil],
|
91
|
+
['http://www/some/file', 'Semi::Variables::Url', nil],
|
92
|
+
['http:/www/', 'Semi::Variables::Path', nil],
|
93
|
+
|
94
|
+
].each do |test|
|
95
|
+
it "#import identifies #{test[0]} as #{test[1]}" do
|
96
|
+
if test[2].nil?
|
97
|
+
# no hints given
|
98
|
+
expect(Semi::Variable.import(test[0]).class.to_s).to eql test[1]
|
99
|
+
else
|
100
|
+
expect(Semi::Variable.import(test[0], test[2]).class.to_s).to eql test[1]
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: semi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerard Hickey
|
@@ -91,6 +91,7 @@ files:
|
|
91
91
|
- lib/semi/variables/url.rb
|
92
92
|
- lib/semi/version.rb
|
93
93
|
- spec/semi_validator_spec.rb
|
94
|
+
- spec/semi_variable_spec.rb
|
94
95
|
- spec/semi_variables_boolean_spec.rb
|
95
96
|
- spec/semi_variables_path_spec.rb
|
96
97
|
- spec/semi_variables_url_spec.rb
|