rubuild-core 0.0.3
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.
- data/.autotest +23 -0
- data/History.txt +11 -0
- data/Manifest.txt +35 -0
- data/README.rdoc +43 -0
- data/Rakefile +10 -0
- data/bin/rubuild +18 -0
- data/examples/printargs +5 -0
- data/lib/rubuild.rb +14 -0
- data/lib/rubuild/build.rb +4 -0
- data/lib/rubuild/build/context.rb +78 -0
- data/lib/rubuild/build/dep.rb +359 -0
- data/lib/rubuild/build/factory.rb +30 -0
- data/lib/rubuild/build/simple.rb +3 -0
- data/lib/rubuild/build/simple/context.rb +90 -0
- data/lib/rubuild/build/simple/dep.rb +367 -0
- data/lib/rubuild/build/simple/factory.rb +17 -0
- data/lib/rubuild/env.rb +113 -0
- data/lib/rubuild/env/location.rb +105 -0
- data/lib/rubuild/env/provider.rb +51 -0
- data/lib/rubuild/env/requirer.rb +66 -0
- data/lib/rubuild/load.rb +3 -0
- data/lib/rubuild/load/info.rb +52 -0
- data/lib/rubuild/load/loader.rb +75 -0
- data/lib/rubuild/load/namespace.rb +117 -0
- data/lib/rubuild/options.rb +34 -0
- data/lib/rubuild/util.rb +11 -0
- data/test/test_dep.rb +176 -0
- data/test/test_env.rb +91 -0
- data/test/test_env_location.rb +68 -0
- data/test/test_env_provider.rb +45 -0
- data/test/test_env_requirer.rb +52 -0
- data/test/test_load_info.rb +63 -0
- data/test/test_load_loader.rb +119 -0
- data/test/test_load_namespace.rb +43 -0
- data/test/test_options.rb +32 -0
- metadata +159 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'rubuild'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
class TC_Env_Provider < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@rctx = Rubuild::Build::Simple::Factory.new
|
7
|
+
@env = Rubuild::Env.new(@rctx)
|
8
|
+
@ran = Hash.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def teardown
|
12
|
+
@rctx = nil
|
13
|
+
@env = nil
|
14
|
+
@ran = nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_provider
|
18
|
+
{ 'key1' => 'val1', 'key2' => 'val2' }.each_pair do |key, value|
|
19
|
+
loc = Rubuild::Env::Location.new(key, @rctx)
|
20
|
+
loc.set_data(value)
|
21
|
+
@env.provide(key, loc)
|
22
|
+
end
|
23
|
+
{ 'provide1' => 'key1', 'provide2' => 'key2' }.each_pair do
|
24
|
+
|prov_key, req_key|
|
25
|
+
Rubuild::Env::Provider.new(@env, prov_key).require(req_key).exec do
|
26
|
+
|provider, req|
|
27
|
+
provider.set(req + 'extended')
|
28
|
+
@ran[prov_key] = true
|
29
|
+
end
|
30
|
+
end
|
31
|
+
Rubuild::Env::Provider.new(@env, 'top').require_(%w[provide1 provide2]).exec do
|
32
|
+
|provider|
|
33
|
+
provider.set('top')
|
34
|
+
end
|
35
|
+
|
36
|
+
loc1 = Rubuild::Env::Location.new('loc1', @rctx)
|
37
|
+
@env.require('top', loc1)
|
38
|
+
ctx = @rctx.create_context
|
39
|
+
loc1.found_dep.load(ctx)
|
40
|
+
ctx.run
|
41
|
+
assert_equal('top', loc1.data)
|
42
|
+
assert(@ran['provide1'])
|
43
|
+
assert(@ran['provide2'])
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'rubuild'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
class TC_Env_Requirer < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@rctx = Rubuild::Build::Simple::Factory.new
|
7
|
+
@env = Rubuild::Env.new(@rctx)
|
8
|
+
end
|
9
|
+
|
10
|
+
def teardown
|
11
|
+
@rctx = nil
|
12
|
+
@env = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
def populate_env
|
16
|
+
{ 'key1' => 'val1', 'key2' => 'val2' }.each_pair do |key, value|
|
17
|
+
loc = Rubuild::Env::Location.new(key, @rctx)
|
18
|
+
loc.set_data(value)
|
19
|
+
@env.provide(key, loc)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_requirerHash
|
24
|
+
self.populate_env
|
25
|
+
req = Rubuild::Env::Requirer.new(@env, :req1 => 'key1', :req2 => 'key2')
|
26
|
+
bctx = @rctx.create_context
|
27
|
+
req.location.found_dep.load(bctx)
|
28
|
+
bctx.run
|
29
|
+
assert_equal('val1', req.location.data[:req1])
|
30
|
+
assert_equal('val2', req.location.data[:req2])
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_requirerArray
|
34
|
+
self.populate_env
|
35
|
+
req = Rubuild::Env::Requirer.new(@env, ['key1', 'key2'])
|
36
|
+
bctx = @rctx.create_context
|
37
|
+
req.location.found_dep.load(bctx)
|
38
|
+
bctx.run
|
39
|
+
assert_equal('val1', req.location.data[0])
|
40
|
+
assert_equal('val2', req.location.data[1])
|
41
|
+
assert_equal(2, req.location.data.size)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_requirerString
|
45
|
+
self.populate_env
|
46
|
+
req = Rubuild::Env::Requirer.new(@env, 'key1')
|
47
|
+
bctx = @rctx.create_context
|
48
|
+
req.location.found_dep.load(bctx)
|
49
|
+
bctx.run
|
50
|
+
assert_equal('val1', req.location.data)
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'rubuild'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
class TC_Info < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
build_factory = Rubuild::Build::Simple::Factory.new
|
7
|
+
@env = Rubuild::Env.new(build_factory)
|
8
|
+
@info = Rubuild::Load::Info.new(@env, 'info', 'info')
|
9
|
+
end
|
10
|
+
def teardown
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_initialization
|
14
|
+
assert_same(@info.env, @env)
|
15
|
+
assert_equal(@info.location.name, 'info')
|
16
|
+
assert_equal(@info.path, 'info')
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_foundDepLoadWorks
|
20
|
+
rctx = @env.build_factory.create_context
|
21
|
+
@info.location.found_dep.load(rctx)
|
22
|
+
rctx.run
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_provideCreatesProvider
|
26
|
+
provider = @info.provide(':provide')
|
27
|
+
assert(Rubuild::Env::Provider === provider)
|
28
|
+
end
|
29
|
+
|
30
|
+
def provideRequired
|
31
|
+
l = Rubuild::Env::Location.new('require', @env.build_factory)
|
32
|
+
l.set_data('required')
|
33
|
+
@env.provide('require', l)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_requireCreatesRequirer
|
37
|
+
self.provideRequired
|
38
|
+
requirer = @info.require('require')
|
39
|
+
assert(Rubuild::Env::Requirer === requirer)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_require!
|
43
|
+
self.provideRequired
|
44
|
+
@info.require!('require') do |required|
|
45
|
+
l = Rubuild::Env::Location.new('provide', @env.build_factory)
|
46
|
+
l.set_data(required)
|
47
|
+
@env.provide('provide', l)
|
48
|
+
end
|
49
|
+
rctx = @env.build_factory.create_context
|
50
|
+
@info.location.found_dep.load(rctx)
|
51
|
+
rctx.run
|
52
|
+
assert(@env.has_provider?('provide'))
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_withMeansInstanceEval
|
56
|
+
self.provideRequired
|
57
|
+
@info.with do
|
58
|
+
self.provide('foo').exec do |provider|
|
59
|
+
provider.set('foo')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'rubuild'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
class TC_Loader < Test::Unit::TestCase
|
5
|
+
TEST_EMPTY = <<T_END
|
6
|
+
# empty
|
7
|
+
T_END
|
8
|
+
TEST_PROVIDE = <<T_END
|
9
|
+
p = self.rubuild_info.provide(':key')
|
10
|
+
p.exec do
|
11
|
+
p.set('foo')
|
12
|
+
end
|
13
|
+
T_END
|
14
|
+
|
15
|
+
TESTS = {
|
16
|
+
'empty' => TEST_EMPTY,
|
17
|
+
'provide' => TEST_PROVIDE,
|
18
|
+
}
|
19
|
+
|
20
|
+
def setup
|
21
|
+
build_factory = Rubuild::Build::Simple::Factory.new
|
22
|
+
@env = Rubuild::Env.new(build_factory)
|
23
|
+
@loader = Rubuild::Load::Loader.new(Rubuild::Load::NameSpace::Factory.new)
|
24
|
+
@incdir = 'test_rubuild_base_loader'
|
25
|
+
Dir.mkdir(@incdir)
|
26
|
+
TESTS.each_pair do |fname, contents|
|
27
|
+
File.open("#{@incdir}/#{fname}", 'w') do |f|
|
28
|
+
f.write(contents)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
def teardown
|
33
|
+
@env = nil
|
34
|
+
TESTS.keys.each do |fname|
|
35
|
+
File.unlink("#{@incdir}/#{fname}")
|
36
|
+
end
|
37
|
+
Dir.rmdir(@incdir)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_initialization
|
41
|
+
assert(Rubuild::Load::NameSpace::Factory === @loader.ns_factory)
|
42
|
+
assert_equal(@loader.inc_paths, [])
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_errorInitialization
|
46
|
+
error = Rubuild::Load::Loader::Error.new(@loader, 'message')
|
47
|
+
assert_same(error.loader, @loader)
|
48
|
+
assert_equal(error.message, 'message')
|
49
|
+
end
|
50
|
+
def test_errorUnprovisionedInitialization
|
51
|
+
error = Rubuild::Load::Loader::Error::Unprovisioned.new(@loader, :findFile)
|
52
|
+
assert_same(error.loader, @loader)
|
53
|
+
assert_same(error.operation, :findFile)
|
54
|
+
assert_equal(error.message, 'findFile method called prior to provision.')
|
55
|
+
end
|
56
|
+
|
57
|
+
def incTestPath
|
58
|
+
@loader.inc_paths << @incdir
|
59
|
+
end
|
60
|
+
def provision
|
61
|
+
@loader.provision(@env, 'load/rb')
|
62
|
+
end
|
63
|
+
def test_provisionCreatesProvider
|
64
|
+
self.provision
|
65
|
+
assert(@env.has_provider?('load/rb'))
|
66
|
+
end
|
67
|
+
def test_provisionMeansFrozen
|
68
|
+
self.provision
|
69
|
+
assert(@loader.frozen?)
|
70
|
+
begin
|
71
|
+
@loader.inc_paths << 'foo'
|
72
|
+
rescue
|
73
|
+
assert(true)
|
74
|
+
else
|
75
|
+
fail("no exception raised")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
def test_provisionProviderIsLoader
|
79
|
+
self.provision
|
80
|
+
req = Rubuild::Env::Location.new('location', @env.build_factory)
|
81
|
+
@env.require('load/rb', req)
|
82
|
+
bctx = @env.build_factory.create_context
|
83
|
+
req.found_dep.load(bctx)
|
84
|
+
bctx.run
|
85
|
+
assert_same(req.data, @loader)
|
86
|
+
end
|
87
|
+
def test_findWithoutProvisionRaisesUnprovisionedError
|
88
|
+
self.incTestPath
|
89
|
+
assert_raises(Rubuild::Load::Loader::Error::Unprovisioned) do
|
90
|
+
@loader.findFile('empty')
|
91
|
+
end
|
92
|
+
end
|
93
|
+
def test_findsEmpty
|
94
|
+
self.incTestPath
|
95
|
+
self.provision
|
96
|
+
assert_equal(
|
97
|
+
File.expand_path(@loader.findFile('empty')),
|
98
|
+
File.expand_path("#{@incdir}/empty"))
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_loadsProvide
|
102
|
+
self.incTestPath
|
103
|
+
self.provision
|
104
|
+
loc = @loader.loadFile(@env, 'provide')
|
105
|
+
rctx = @env.build_factory.create_context
|
106
|
+
loc.found_dep.load(rctx)
|
107
|
+
rctx.run
|
108
|
+
assert(@env.has_provider?('provide:key'))
|
109
|
+
end
|
110
|
+
def test_loadsString
|
111
|
+
self.incTestPath
|
112
|
+
self.provision
|
113
|
+
loc = @loader.loadString(@env, TEST_PROVIDE, 'provide')
|
114
|
+
rctx = @env.build_factory.create_context
|
115
|
+
loc.found_dep.load(rctx)
|
116
|
+
rctx.run
|
117
|
+
assert(@env.has_provider?('provide:key'))
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'rubuild'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
class TC_NameSpace < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@namespace_factory = Rubuild::Load::NameSpace::Factory.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
@ns = nil
|
11
|
+
end
|
12
|
+
|
13
|
+
def createNs
|
14
|
+
@ns = @namespace_factory.create
|
15
|
+
end
|
16
|
+
def test_createReturnsContext
|
17
|
+
self.createNs
|
18
|
+
assert_same(@ns.superclass, Rubuild::Load::NameSpace::Context)
|
19
|
+
end
|
20
|
+
def test_contextHasRubuildInfo
|
21
|
+
self.createNs
|
22
|
+
assert_nothing_raised do
|
23
|
+
@ns.rubuild_info = true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
def test_rubuildInfoIsAccessibleInNamespace
|
27
|
+
self.createNs
|
28
|
+
@ns.rubuild_info = Array.new
|
29
|
+
@ns.instance_eval do
|
30
|
+
self.rubuild_info << self
|
31
|
+
end
|
32
|
+
assert_equal(@ns.rubuild_info, [ @ns ])
|
33
|
+
end
|
34
|
+
def test_cannotDefineInstanceMethods
|
35
|
+
self.createNs
|
36
|
+
assert_raises(Rubuild::Load::NameSpace::Context::Error::InstanceMethod) do
|
37
|
+
@ns.class_eval do
|
38
|
+
def foo
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'rubuild'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
class TC_Options < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
end
|
7
|
+
def teardown
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_defaults
|
11
|
+
opts = Rubuild::Options.new(%w{})
|
12
|
+
assert_equal([], opts.inc_paths)
|
13
|
+
assert_equal('Rutop', opts.file)
|
14
|
+
assert_equal([], opts.args_left)
|
15
|
+
end
|
16
|
+
def test_withOneIncPath
|
17
|
+
opts = Rubuild::Options.new(%w{-I foo})
|
18
|
+
assert_equal(['foo'], opts.inc_paths)
|
19
|
+
end
|
20
|
+
def test_withMultipleIncPaths
|
21
|
+
opts = Rubuild::Options.new(%w{-I foo -I bar})
|
22
|
+
assert_equal(['foo', 'bar'], opts.inc_paths)
|
23
|
+
end
|
24
|
+
def test_givenFile
|
25
|
+
opts = Rubuild::Options.new(%w{-f foo})
|
26
|
+
assert_equal('foo', opts.file)
|
27
|
+
end
|
28
|
+
def test_argsLeft
|
29
|
+
opts = Rubuild::Options.new(%w{-- a b})
|
30
|
+
assert_equal(['a', 'b'], opts.args_left)
|
31
|
+
end
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,159 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rubuild-core
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 25
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Aidan Cully
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-01-01 00:00:00 -05:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: safer
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 19
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 3
|
33
|
+
- 0
|
34
|
+
version: 0.3.0
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: rubyforge
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 7
|
46
|
+
segments:
|
47
|
+
- 2
|
48
|
+
- 0
|
49
|
+
- 4
|
50
|
+
version: 2.0.4
|
51
|
+
type: :development
|
52
|
+
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: hoe
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 19
|
62
|
+
segments:
|
63
|
+
- 2
|
64
|
+
- 6
|
65
|
+
- 2
|
66
|
+
version: 2.6.2
|
67
|
+
type: :development
|
68
|
+
version_requirements: *id003
|
69
|
+
description: ""
|
70
|
+
email:
|
71
|
+
- aidan@panix.com
|
72
|
+
executables:
|
73
|
+
- rubuild
|
74
|
+
extensions: []
|
75
|
+
|
76
|
+
extra_rdoc_files:
|
77
|
+
- History.txt
|
78
|
+
- Manifest.txt
|
79
|
+
files:
|
80
|
+
- .autotest
|
81
|
+
- History.txt
|
82
|
+
- Manifest.txt
|
83
|
+
- Rakefile
|
84
|
+
- README.rdoc
|
85
|
+
- bin/rubuild
|
86
|
+
- examples/printargs
|
87
|
+
- lib/rubuild.rb
|
88
|
+
- lib/rubuild/build.rb
|
89
|
+
- lib/rubuild/build/context.rb
|
90
|
+
- lib/rubuild/build/dep.rb
|
91
|
+
- lib/rubuild/build/factory.rb
|
92
|
+
- lib/rubuild/build/simple.rb
|
93
|
+
- lib/rubuild/build/simple/context.rb
|
94
|
+
- lib/rubuild/build/simple/dep.rb
|
95
|
+
- lib/rubuild/build/simple/factory.rb
|
96
|
+
- lib/rubuild/env.rb
|
97
|
+
- lib/rubuild/env/location.rb
|
98
|
+
- lib/rubuild/env/provider.rb
|
99
|
+
- lib/rubuild/env/requirer.rb
|
100
|
+
- lib/rubuild/load.rb
|
101
|
+
- lib/rubuild/load/info.rb
|
102
|
+
- lib/rubuild/load/loader.rb
|
103
|
+
- lib/rubuild/load/namespace.rb
|
104
|
+
- lib/rubuild/options.rb
|
105
|
+
- lib/rubuild/util.rb
|
106
|
+
- test/test_dep.rb
|
107
|
+
- test/test_env.rb
|
108
|
+
- test/test_env_location.rb
|
109
|
+
- test/test_env_provider.rb
|
110
|
+
- test/test_env_requirer.rb
|
111
|
+
- test/test_load_info.rb
|
112
|
+
- test/test_load_loader.rb
|
113
|
+
- test/test_load_namespace.rb
|
114
|
+
- test/test_options.rb
|
115
|
+
has_rdoc: true
|
116
|
+
homepage: http://rubuild.rubyforge.org
|
117
|
+
licenses: []
|
118
|
+
|
119
|
+
post_install_message:
|
120
|
+
rdoc_options:
|
121
|
+
- --main
|
122
|
+
- README.rdoc
|
123
|
+
require_paths:
|
124
|
+
- lib
|
125
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
126
|
+
none: false
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
hash: 3
|
131
|
+
segments:
|
132
|
+
- 0
|
133
|
+
version: "0"
|
134
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
135
|
+
none: false
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
hash: 3
|
140
|
+
segments:
|
141
|
+
- 0
|
142
|
+
version: "0"
|
143
|
+
requirements: []
|
144
|
+
|
145
|
+
rubyforge_project: rubuild
|
146
|
+
rubygems_version: 1.3.7
|
147
|
+
signing_key:
|
148
|
+
specification_version: 3
|
149
|
+
summary: ""
|
150
|
+
test_files:
|
151
|
+
- test/test_dep.rb
|
152
|
+
- test/test_env.rb
|
153
|
+
- test/test_env_location.rb
|
154
|
+
- test/test_env_provider.rb
|
155
|
+
- test/test_env_requirer.rb
|
156
|
+
- test/test_load_info.rb
|
157
|
+
- test/test_load_loader.rb
|
158
|
+
- test/test_load_namespace.rb
|
159
|
+
- test/test_options.rb
|