semi 0.3.1 → 0.3.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 +4 -4
- data/lib/semi/variables/base.rb +4 -1
- data/lib/semi/variables/boolean.rb +78 -5
- data/lib/semi/variables/path.rb +23 -1
- data/lib/semi/variables/url.rb +55 -5
- data/lib/semi/version.rb +1 -1
- data/spec/semi_validator_spec.rb +4 -1
- data/spec/semi_variables_boolean_spec.rb +145 -0
- data/spec/semi_variables_path_spec.rb +70 -0
- data/spec/semi_variables_url_spec.rb +57 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ddcfc2b2c39716b3545162f16871750194bd3b4
|
4
|
+
data.tar.gz: 9256ddba7ee653ec38f3d7b5f0be59b9353efa42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e59adc27e9693d872d224173daba47be734a609ae5a6679d3b0dc205fd7481cdc7bd69df93e56d80a88fae573ccdadda76f96b4359c3edfe70c017f210d293f
|
7
|
+
data.tar.gz: f6c8f58b7371a8a928740664036309e74a653929c61e99a6df247a3d354555147ad4bb24cf9788c62bffbeec5ce73194a10e9253aa745b00e7143b25bbfff79a
|
data/lib/semi/variables/base.rb
CHANGED
@@ -5,10 +5,15 @@ module Semi::Variables
|
|
5
5
|
|
6
6
|
|
7
7
|
def set(val)
|
8
|
-
|
9
|
-
|
8
|
+
if val.instance_of? TrueClass
|
9
|
+
@value = true
|
10
|
+
elsif val.instance_of? FalseClass
|
11
|
+
@value = false
|
12
|
+
elsif val =~ /true|yes|on|enable/i
|
13
|
+
# test to see if the value is a common true value
|
10
14
|
@value = true
|
11
|
-
elsif val =~ /false|no|disable/i
|
15
|
+
elsif val =~ /false|no|off|disable/i
|
16
|
+
# test to see if the value is a common false value
|
12
17
|
@value = false
|
13
18
|
else
|
14
19
|
raise Semi::VariableError, "#{val} trying to be set as a boolean"
|
@@ -18,7 +23,7 @@ module Semi::Variables
|
|
18
23
|
def validate
|
19
24
|
self.validate(@value)
|
20
25
|
end
|
21
|
-
|
26
|
+
|
22
27
|
def self.validate(value)
|
23
28
|
real_value = nil
|
24
29
|
|
@@ -34,6 +39,74 @@ module Semi::Variables
|
|
34
39
|
end
|
35
40
|
false
|
36
41
|
end
|
37
|
-
|
42
|
+
|
43
|
+
def onoff
|
44
|
+
if @value
|
45
|
+
'on'
|
46
|
+
else
|
47
|
+
'off'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def ONOFF
|
52
|
+
onoff.upcase
|
53
|
+
end
|
54
|
+
|
55
|
+
def OnOff
|
56
|
+
onoff.capitalize
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
def yesno()
|
61
|
+
if @value
|
62
|
+
'yes'
|
63
|
+
else
|
64
|
+
'no'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def YESNO
|
69
|
+
yesno.upcase
|
70
|
+
end
|
71
|
+
|
72
|
+
def YesNo
|
73
|
+
yesno.capitalize
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
def enabledisable
|
78
|
+
if @value
|
79
|
+
'enable'
|
80
|
+
else
|
81
|
+
'disable'
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def ENABLEDISABLE
|
86
|
+
enabledisable.upcase
|
87
|
+
end
|
88
|
+
|
89
|
+
def EnableDisable
|
90
|
+
enabledisable.capitalize
|
91
|
+
end
|
92
|
+
|
93
|
+
|
94
|
+
def truefalse
|
95
|
+
if @value
|
96
|
+
'true'
|
97
|
+
else
|
98
|
+
'false'
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def TRUEFALSE
|
103
|
+
truefalse.upcase
|
104
|
+
end
|
105
|
+
|
106
|
+
def TrueFalse
|
107
|
+
truefalse.capitalize
|
108
|
+
end
|
38
109
|
end
|
110
|
+
|
111
|
+
|
39
112
|
end
|
data/lib/semi/variables/path.rb
CHANGED
@@ -3,7 +3,15 @@ require_relative 'base'
|
|
3
3
|
module Semi::Variables
|
4
4
|
class Path < Semi::Variables::Base
|
5
5
|
|
6
|
-
@@path_re = Regexp.new('^(?<path>(
|
6
|
+
@@path_re = Regexp.new('^(?<path>(?:\/|\.{1,2}\/|~(?:[a-z_][a-z0-9_]{0,30})?\/?|[^~][^\/\000]+\/)*?)(?<file>[^\/\000]+)?$')
|
7
|
+
|
8
|
+
def initialize(val)
|
9
|
+
if @@path_re.match(val)
|
10
|
+
@value = val
|
11
|
+
else
|
12
|
+
raise Semi::VariableError, '#{val} does not look like a path'
|
13
|
+
end
|
14
|
+
end
|
7
15
|
|
8
16
|
def validate
|
9
17
|
self.validate(@value)
|
@@ -18,5 +26,19 @@ module Semi::Variables
|
|
18
26
|
false
|
19
27
|
end
|
20
28
|
|
29
|
+
def path
|
30
|
+
match = @@path_re.match(@value)
|
31
|
+
if match
|
32
|
+
match['path']
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def file
|
37
|
+
match = @@path_re.match(@value)
|
38
|
+
if match
|
39
|
+
match['file']
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
21
43
|
end
|
22
44
|
end
|
data/lib/semi/variables/url.rb
CHANGED
@@ -3,20 +3,70 @@ require_relative 'base'
|
|
3
3
|
module Semi::Variables
|
4
4
|
class Url < Semi::Variables::Base
|
5
5
|
|
6
|
-
@@url_re = Regexp.new('^(?<proto>https?|ftp
|
6
|
+
@@url_re = Regexp.new('^(?<proto>https?|ftp):\/{2}(?!\/)(?<host>[a-z\.0-9\-_]+)?(?::(?<port>\d{1,5}))?\/?(?<path>.*?)\/?(?<file>[^\/\?]+)?(?:\?(?<params>.*?))?$', Regexp::IGNORECASE)
|
7
|
+
|
8
|
+
def initialize(val)
|
9
|
+
if @@url_re.match(val)
|
10
|
+
@value = val
|
11
|
+
else
|
12
|
+
raise Semi::VariableError, '#{val} does not look like a URL'
|
13
|
+
end
|
14
|
+
end
|
7
15
|
|
8
16
|
def validate
|
9
17
|
self.validate(@value)
|
10
18
|
end
|
11
|
-
|
12
|
-
def self.validate(
|
13
|
-
if ['String', 'Semi::Variables::Url'].include?
|
14
|
-
if @@url_re.match(
|
19
|
+
|
20
|
+
def self.validate(val)
|
21
|
+
if ['String', 'Semi::Variables::Url'].include? val.class.to_s
|
22
|
+
if @@url_re.match(val)
|
15
23
|
return true
|
16
24
|
end
|
17
25
|
end
|
18
26
|
false
|
19
27
|
end
|
28
|
+
|
29
|
+
|
30
|
+
def proto
|
31
|
+
match = @@url_re.match(@value)
|
32
|
+
if match
|
33
|
+
match['proto']
|
34
|
+
end
|
35
|
+
end
|
20
36
|
|
37
|
+
def host
|
38
|
+
match = @@url_re.match(@value)
|
39
|
+
if match
|
40
|
+
match['host']
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def port
|
45
|
+
match = @@url_re.match(@value)
|
46
|
+
if match
|
47
|
+
match['port']
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def path
|
52
|
+
match = @@url_re.match(@value)
|
53
|
+
if match
|
54
|
+
match['path']
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def file
|
59
|
+
match = @@url_re.match(@value)
|
60
|
+
if match
|
61
|
+
match['file']
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def params
|
66
|
+
match = @@url_re.match(@value)
|
67
|
+
if match
|
68
|
+
match['params']
|
69
|
+
end
|
70
|
+
end
|
21
71
|
end
|
22
72
|
end
|
data/lib/semi/version.rb
CHANGED
data/spec/semi_validator_spec.rb
CHANGED
@@ -19,7 +19,10 @@ describe "Semi::validator" do
|
|
19
19
|
[nil, ['required'], false],
|
20
20
|
['/etc/passwd', 'path', true],
|
21
21
|
['../parent', ['path'], true],
|
22
|
-
['.005', 'path',
|
22
|
+
['.005', 'path', true],
|
23
|
+
['file.name', 'path', true],
|
24
|
+
['~user', 'path', true],
|
25
|
+
['~user/dir/file', 'path', true],
|
23
26
|
['http://www.simple.com',
|
24
27
|
'url', true],
|
25
28
|
['http://abit.more.complex.com/',
|
@@ -0,0 +1,145 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Semi::Variables::Boolean do
|
4
|
+
|
5
|
+
[
|
6
|
+
# test value, real value
|
7
|
+
[true, true],
|
8
|
+
[false, false],
|
9
|
+
['true', true],
|
10
|
+
['yes', true],
|
11
|
+
['on', true],
|
12
|
+
['enable', true],
|
13
|
+
['false', false],
|
14
|
+
['no', false],
|
15
|
+
['off', false],
|
16
|
+
['disable', false]
|
17
|
+
].each do |test|
|
18
|
+
it "set '#{test[0]}' as #{test[1]}" do
|
19
|
+
expect(Semi::Variables::Boolean.new(test[0]).value).to eq test[1]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
[
|
24
|
+
# test value, exception?
|
25
|
+
['true', 'not raise'],
|
26
|
+
['false', 'not raise'],
|
27
|
+
['foo', 'raise'],
|
28
|
+
['bar', 'raise'],
|
29
|
+
['1', 'raise'],
|
30
|
+
['0', 'raise'],
|
31
|
+
[1, 'raise'],
|
32
|
+
[0, 'raise'],
|
33
|
+
[nil, 'raise']
|
34
|
+
].each do |test|
|
35
|
+
it "set '#{test[0]}' to #{test[1]} exception" do
|
36
|
+
if test[1] == 'raise'
|
37
|
+
expect{Semi::Variables::Boolean.new(test[0])}.to raise_error(Semi::VariableError)
|
38
|
+
else
|
39
|
+
expect{Semi::Variables::Boolean.new(test[0])}.not_to raise_error
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
##
|
45
|
+
# Test variable specific output methods
|
46
|
+
let (:on) {Semi::Variables::Boolean.new('true')}
|
47
|
+
let (:off) {Semi::Variables::Boolean.new('false')}
|
48
|
+
|
49
|
+
it "#onoff returns 'on'" do
|
50
|
+
expect(on.onoff).to eq 'on'
|
51
|
+
end
|
52
|
+
|
53
|
+
it "#ONOFF returns 'ON'" do
|
54
|
+
expect(on.ONOFF).to eq 'ON'
|
55
|
+
end
|
56
|
+
|
57
|
+
it "#OnOff returns 'On'" do
|
58
|
+
expect(on.OnOff).to eq 'On'
|
59
|
+
end
|
60
|
+
|
61
|
+
it "#onoff returns 'off'" do
|
62
|
+
expect(off.onoff).to eq 'off'
|
63
|
+
end
|
64
|
+
|
65
|
+
it "#ONOFF returns 'OFF'" do
|
66
|
+
expect(off.ONOFF).to eq 'OFF'
|
67
|
+
end
|
68
|
+
|
69
|
+
it "#OnOff returns 'Off'" do
|
70
|
+
expect(off.OnOff).to eq 'Off'
|
71
|
+
end
|
72
|
+
|
73
|
+
it "#yesno returns 'yes'" do
|
74
|
+
expect(on.yesno).to eq 'yes'
|
75
|
+
end
|
76
|
+
|
77
|
+
it "#YESNO returns 'YES'" do
|
78
|
+
expect(on.YESNO).to eq 'YES'
|
79
|
+
end
|
80
|
+
|
81
|
+
it "#YesNo returns 'Yes'" do
|
82
|
+
expect(on.YesNo).to eq 'Yes'
|
83
|
+
end
|
84
|
+
|
85
|
+
it "#yesno returns 'no'" do
|
86
|
+
expect(off.yesno).to eq 'no'
|
87
|
+
end
|
88
|
+
|
89
|
+
it "#YESNO returns 'NO'" do
|
90
|
+
expect(off.YESNO).to eq 'NO'
|
91
|
+
end
|
92
|
+
|
93
|
+
it "#YesNo returns 'No'" do
|
94
|
+
expect(off.YesNo).to eq 'No'
|
95
|
+
end
|
96
|
+
|
97
|
+
it "#enabledisable returns 'enable'" do
|
98
|
+
expect(on.enabledisable).to eq 'enable'
|
99
|
+
end
|
100
|
+
|
101
|
+
it "#ENABLEDISABLE returns 'ENABLE'" do
|
102
|
+
expect(on.ENABLEDISABLE).to eq 'ENABLE'
|
103
|
+
end
|
104
|
+
|
105
|
+
it "#EnableDisable returns 'Enable'" do
|
106
|
+
expect(on.EnableDisable).to eq 'Enable'
|
107
|
+
end
|
108
|
+
|
109
|
+
it "#enabledisable returns 'disable'" do
|
110
|
+
expect(off.enabledisable).to eq 'disable'
|
111
|
+
end
|
112
|
+
|
113
|
+
it "#ENABLEDISABLE returns 'DISABLE'" do
|
114
|
+
expect(off.ENABLEDISABLE).to eq 'DISABLE'
|
115
|
+
end
|
116
|
+
|
117
|
+
it "#EnableDisable returns 'Disable'" do
|
118
|
+
expect(off.EnableDisable).to eq 'Disable'
|
119
|
+
end
|
120
|
+
|
121
|
+
it "#truefalse returns 'true'" do
|
122
|
+
expect(on.truefalse).to eq 'true'
|
123
|
+
end
|
124
|
+
|
125
|
+
it "#TRUEFALSE returns 'TRUE'" do
|
126
|
+
expect(on.TRUEFALSE).to eq 'TRUE'
|
127
|
+
end
|
128
|
+
|
129
|
+
it "#TrueFalse returns 'True'" do
|
130
|
+
expect(on.TrueFalse).to eq 'True'
|
131
|
+
end
|
132
|
+
|
133
|
+
it "#truefalse returns 'false'" do
|
134
|
+
expect(off.truefalse).to eq 'false'
|
135
|
+
end
|
136
|
+
|
137
|
+
it "#TRUEFALSE returns 'FALSE'" do
|
138
|
+
expect(off.TRUEFALSE).to eq 'FALSE'
|
139
|
+
end
|
140
|
+
|
141
|
+
it "#TrueFalse returns 'False'" do
|
142
|
+
expect(off.TrueFalse).to eq 'False'
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Semi::Variables::Path do
|
4
|
+
|
5
|
+
[
|
6
|
+
# Test string,
|
7
|
+
'/',
|
8
|
+
'/bin',
|
9
|
+
'/usr/local/bin/csh',
|
10
|
+
'~user',
|
11
|
+
'~/.bashrc',
|
12
|
+
'~looser/plan.txt',
|
13
|
+
'./test',
|
14
|
+
'../../usr/bin/foobar',
|
15
|
+
'.././.././test-file',
|
16
|
+
'/tmp/backup~',
|
17
|
+
'/home/user/.git/config',
|
18
|
+
'sub/directory/file.txt',
|
19
|
+
].each do |test|
|
20
|
+
it "stores '#{test}' correctly" do
|
21
|
+
expect(Semi::Variables::Path.new(test).value).to eq test
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Currently the regex used to identify paths allows almost
|
26
|
+
# any string.
|
27
|
+
#[
|
28
|
+
# 'foo.txt',
|
29
|
+
#].each do |test|
|
30
|
+
# it "rejects '#{test}'" do
|
31
|
+
# expect{Semi::Variables::Path.new(test)}.to raise_error(Semi::VariableError)
|
32
|
+
# end
|
33
|
+
#end
|
34
|
+
|
35
|
+
context "with relative paths" do
|
36
|
+
let (:path) {Semi::Variables::Path.new('../some/dir/file.txt')}
|
37
|
+
|
38
|
+
it "#path returns ../some/dir/" do
|
39
|
+
expect(path.path).to eq '../some/dir/'
|
40
|
+
end
|
41
|
+
|
42
|
+
it "#file returns file.text" do
|
43
|
+
expect(path.file).to eq 'file.txt'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context "with absolute paths" do
|
48
|
+
let (:path) {Semi::Variables::Path.new('/some/dir/file.txt')}
|
49
|
+
|
50
|
+
it "#path returns /some/dir/" do
|
51
|
+
expect(path.path).to eq '/some/dir/'
|
52
|
+
end
|
53
|
+
|
54
|
+
it "#file returns file.text" do
|
55
|
+
expect(path.file).to eq 'file.txt'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "with partial paths" do
|
60
|
+
let (:path) {Semi::Variables::Path.new('some/dir/file.txt')}
|
61
|
+
|
62
|
+
it "#path returns some/dir/" do
|
63
|
+
expect(path.path).to eq 'some/dir/'
|
64
|
+
end
|
65
|
+
|
66
|
+
it "#file returns file.text" do
|
67
|
+
expect(path.file).to eq 'file.txt'
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Semi::Variables::Url do
|
4
|
+
|
5
|
+
[
|
6
|
+
# Test string, pass?
|
7
|
+
['http://web.com', 'http://web.com'],
|
8
|
+
['http://web.com/', 'http://web.com/'],
|
9
|
+
['https://www.help.org', 'https://www.help.org'],
|
10
|
+
['ftp://ftp.org/foo', 'ftp://ftp.org/foo'],
|
11
|
+
['http://host.com:8080/', 'http://host.com:8080/'],
|
12
|
+
['http://www/', 'http://www/'],
|
13
|
+
['http://some.host.com/page.html', 'http://some.host.com/page.html'],
|
14
|
+
['http://a.com/page?key=val', 'http://a.com/page?key=val']
|
15
|
+
].each do |test|
|
16
|
+
it "set '#{test[0]}' as #{test[1]}" do
|
17
|
+
expect(Semi::Variables::Url.new(test[0]).value).to eq test[1]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
[
|
22
|
+
'htt://www.host.com',
|
23
|
+
'https:///foo.bar.com/',
|
24
|
+
'file:///some/file/path/doc.txt',
|
25
|
+
].each do |test|
|
26
|
+
it "rejects '#{test}'" do
|
27
|
+
expect{Semi::Variables::Url.new(test)}.to raise_error(Semi::VariableError)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
let (:url) {Semi::Variables::Url.new('https://www:994/short/path/file.name?q=foo&e=bar')}
|
32
|
+
|
33
|
+
it "#proto returns https" do
|
34
|
+
expect(url.proto).to eq 'https'
|
35
|
+
end
|
36
|
+
|
37
|
+
it "#host returns www" do
|
38
|
+
expect(url.host).to eq 'www'
|
39
|
+
end
|
40
|
+
|
41
|
+
it "#port returns 994" do
|
42
|
+
expect(url.port).to eq '994'
|
43
|
+
end
|
44
|
+
|
45
|
+
it "#path returns short/path" do
|
46
|
+
expect(url.path).to eq 'short/path'
|
47
|
+
end
|
48
|
+
|
49
|
+
it "#file returns file.name" do
|
50
|
+
expect(url.file).to eq 'file.name'
|
51
|
+
end
|
52
|
+
|
53
|
+
it "#params returns q=foo&e=bar" do
|
54
|
+
expect(url.params).to eq 'q=foo&e=bar'
|
55
|
+
end
|
56
|
+
|
57
|
+
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.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerard Hickey
|
@@ -91,6 +91,9 @@ files:
|
|
91
91
|
- lib/semi/variables/url.rb
|
92
92
|
- lib/semi/version.rb
|
93
93
|
- spec/semi_validator_spec.rb
|
94
|
+
- spec/semi_variables_boolean_spec.rb
|
95
|
+
- spec/semi_variables_path_spec.rb
|
96
|
+
- spec/semi_variables_url_spec.rb
|
94
97
|
- spec/spec_helper.rb
|
95
98
|
homepage: https://github.com/hickey/semi
|
96
99
|
licenses: []
|