gator 0.0.21.pre → 0.0.22.pre
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/Gemfile +3 -1
- data/Rakefile +3 -6
- data/VERSION +1 -1
- data/bin/gator +2 -3
- data/gator.gemspec +52 -30
- data/lib/gator.rb +6 -8
- data/lib/gator/core.rb +19 -0
- data/lib/gator/core/application/application.rb +41 -0
- data/lib/gator/core/application/application_configuration.rb +11 -0
- data/lib/gator/core/command/act_as_command.rb +40 -0
- data/lib/gator/core/command/act_as_command_collection.rb +63 -0
- data/lib/gator/core/command/command.rb +20 -0
- data/lib/gator/{task.rb → core/command/task.rb} +1 -4
- data/lib/gator/core/configuration/act_as_configuration.rb +30 -0
- data/lib/gator/core/configuration/configuration.rb +5 -0
- data/lib/gator/core/io/paths.rb +21 -0
- data/lib/gator/core/io/project_file_locator.rb +28 -0
- data/lib/gator/core/io/ruby_file_loader.rb +21 -0
- data/lib/gator/core/io/sandbox.rb +9 -0
- data/lib/gator/{project.rb → core/project/layout.rb} +3 -44
- data/lib/gator/core/project/project.rb +21 -0
- data/lib/gator/plugins/generators.rb +5 -0
- data/lib/gator/{generators/generator.rb → plugins/generators/act_as_template_generator.rb} +1 -5
- data/lib/gator/{commands/generate.rb → plugins/generators/generate_command.rb} +1 -1
- data/lib/gator/plugins/generators/generator.rb +6 -0
- data/lib/gator/plugins/scaffolding.rb +4 -0
- data/lib/gator/plugins/scaffolding/scaffold_command.rb +62 -0
- data/lib/gator/plugins/scaffolding/scaffolding_file_utils.rb +58 -0
- data/rake/jeweler.rb +17 -0
- data/rake/jeweler_prerelease_tasks.rb +50 -0
- data/rake/pre_release_gemspec.rb +80 -0
- data/rake/pre_release_to_git.rb +59 -0
- data/spec/core/application/application_configuration_spec.rb +21 -0
- data/spec/core/application/application_spec.rb +15 -0
- data/spec/core/command/command_spec.rb +117 -0
- data/spec/core/command/task_spec.rb +95 -0
- data/spec/core/configuration/configuration_spec.rb +55 -0
- data/spec/core/io/paths_spec.rb +44 -0
- data/spec/core/io/sandbox_spec.rb +11 -0
- data/spec/core/project/layout_spec.rb +64 -0
- data/spec/core/project/project_spec.rb +51 -0
- data/spec/fixtures/empty_gator_project/gator.rb +4 -0
- data/spec/fixtures/no_gator_file/.empty_directory +0 -0
- data/spec/plugins/scaffolding/scaffold_command_spec.rb +75 -0
- data/spec/spec_helper.rb +14 -9
- metadata +65 -36
- data/lib/gator/command.rb +0 -109
- data/lib/gator/commands.rb +0 -5
- data/lib/gator/commands/project.rb +0 -87
- data/lib/gator/config.rb +0 -23
- data/lib/gator/generators.rb +0 -1
- data/lib/gator/runner.rb +0 -21
- data/lib/gator/util.rb +0 -91
- data/spec/command_spec.rb +0 -84
- data/spec/config_spec.rb +0 -14
- data/spec/project_spec.rb +0 -15
- data/spec/runner_spec.rb +0 -9
- data/spec/task_spec.rb +0 -8
- data/spec/util_spec.rb +0 -60
@@ -0,0 +1,59 @@
|
|
1
|
+
class Jeweler
|
2
|
+
module Commands
|
3
|
+
class PreReleaseToGit
|
4
|
+
attr_accessor :gemspec, :version, :repo, :output, :gemspec_helper, :base_dir
|
5
|
+
|
6
|
+
def initialize(attributes = {})
|
7
|
+
self.output = $stdout
|
8
|
+
|
9
|
+
attributes.each_pair do |key, value|
|
10
|
+
send("#{key}=", value)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def run
|
15
|
+
unless clean_staging_area?
|
16
|
+
system "git status"
|
17
|
+
raise "Unclean staging area! Be sure to commit or .gitignore everything first. See `git status` above."
|
18
|
+
end
|
19
|
+
|
20
|
+
repo.checkout('develop')
|
21
|
+
repo.push
|
22
|
+
|
23
|
+
if release_not_tagged?
|
24
|
+
output.puts "Tagging #{release_tag}"
|
25
|
+
repo.add_tag(release_tag)
|
26
|
+
|
27
|
+
output.puts "Pushing #{release_tag} to origin"
|
28
|
+
repo.push('origin', release_tag)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def clean_staging_area?
|
33
|
+
`git ls-files --deleted --modified --others --exclude-standard` == ""
|
34
|
+
end
|
35
|
+
|
36
|
+
def release_tag
|
37
|
+
"v#{version}"
|
38
|
+
end
|
39
|
+
|
40
|
+
def release_not_tagged?
|
41
|
+
tag = repo.tag(release_tag) rescue nil
|
42
|
+
tag.nil?
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.build_for(jeweler)
|
46
|
+
command = self.new
|
47
|
+
|
48
|
+
command.base_dir = jeweler.base_dir
|
49
|
+
command.gemspec = jeweler.gemspec
|
50
|
+
command.version = jeweler.version
|
51
|
+
command.repo = jeweler.repo
|
52
|
+
command.output = jeweler.output
|
53
|
+
command.gemspec_helper = jeweler.gemspec_helper
|
54
|
+
|
55
|
+
command
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Gator::ApplicationConfiguration do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@app_config = Gator::ApplicationConfiguration.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should have a project configuration" do
|
10
|
+
@app_config.project.should be_a_kind_of Gator::Project
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should have an environment configuration" do
|
14
|
+
@app_config.environment.should be_a_kind_of Gator::Configuration
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should have an env shortcut to environment" do
|
18
|
+
@app_config.env.should equal @app_config.environment
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Gator::Application do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@app = Gator::Application.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should print the correct version" do
|
10
|
+
version = File.read( File.dirname(__FILE__) + '/../../../VERSION' )
|
11
|
+
@app.should_receive(:say).with(version)
|
12
|
+
@app.version
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Gator::Command do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
|
7
|
+
class CommandA < Gator::Command
|
8
|
+
define :command => "CommandA", :short => "CA",
|
9
|
+
:usage => "CommandA is useless", :description => "CommandA doesn't need a description"
|
10
|
+
end
|
11
|
+
|
12
|
+
class CommandB < Gator::Command
|
13
|
+
define :command => "CommandB", :short => "CB",
|
14
|
+
:usage => "CommandB is useless", :description => "CommandB doesn't need a description"
|
15
|
+
end
|
16
|
+
|
17
|
+
class CommandC < Gator::Command
|
18
|
+
define :command => "CommandC", :short => "CC",
|
19
|
+
:usage => "CommandC is useless", :description => "CommandC doesn't need a description"
|
20
|
+
end
|
21
|
+
|
22
|
+
class CommandD < Gator::Command
|
23
|
+
define :command => "CommandD", :short => "CD",
|
24
|
+
:usage => "CommandD is useless", :description => "CommandD doesn't need a description"
|
25
|
+
end
|
26
|
+
|
27
|
+
CommandA << CommandB
|
28
|
+
CommandA << CommandC
|
29
|
+
CommandC << CommandD
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
after :all do
|
34
|
+
|
35
|
+
remove_const CommandA
|
36
|
+
puts "commandA: #{CommandA}"
|
37
|
+
remove_const CommandB
|
38
|
+
remove_const CommandC
|
39
|
+
remove_const CommandD
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
describe "ClassMethods" do
|
45
|
+
|
46
|
+
it "should provide the correct subcommands" do
|
47
|
+
CommandA.get_subcommand("CommandB").should equal CommandB
|
48
|
+
CommandA.get_subcommand("CommandC").should equal CommandC
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should provide the correct nested subcommands" do
|
52
|
+
CommandA.get_subcommand("CommandC", "CommandD").should equal CommandD
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should return nil if a command cannot be found" do
|
56
|
+
CommandA.get_subcommand("CommandZ").should_not be
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should resolve the correct subcommand on a parent" do
|
60
|
+
CommandB.resolve_subcommand(["CommandA"]).should == CommandA
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should resolve the correct nested subcommand on a parent" do
|
64
|
+
CommandD.resolve_subcommand(["CommandA", "CommandB"]).should == CommandB
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should fall back to CommandB" do
|
68
|
+
CommandC.resolve_subcommand(["CommandA", "CommandD"], ["CommandA", "CommandB"]).should == CommandB
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should return nil if a command cannot be resolved" do
|
72
|
+
CommandC.resolve_subcommand("d").should == nil
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "InstanceMethods" do
|
78
|
+
|
79
|
+
before :each do
|
80
|
+
@command_a = CommandA.new
|
81
|
+
@command_b = CommandB.new
|
82
|
+
@command_c = CommandC.new
|
83
|
+
@command_d = CommandD.new
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should provide the correct subcommands" do
|
87
|
+
@command_a.get_subcommand("CommandB").should equal CommandB
|
88
|
+
@command_a.get_subcommand("CommandC").should equal CommandC
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should provide the correct nested subcommands" do
|
92
|
+
@command_a.get_subcommand("CommandC", "CommandD").should equal CommandD
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should return nil if a command cannot be found" do
|
96
|
+
@command_a.get_subcommand("CommandZ").should_not be
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should resolve the correct subcommand on a parent" do
|
100
|
+
@command_a.resolve_subcommand(["CommandA"]).should == CommandA
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should resolve the correct nested subcommand on a parent" do
|
104
|
+
@command_d.resolve_subcommand(["CommandA", "CommandB"]).should == CommandB
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should fall back to CommandB" do
|
108
|
+
@command_c.resolve_subcommand(["CommandA", "CommandD"], ["CommandA", "CommandB"]).should == CommandB
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should return nil if a command cannot be resolved" do
|
112
|
+
@command_c.resolve_subcommand("d").should == nil
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Gator::Task do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
|
7
|
+
class TaskWithoutParent < Gator::Task
|
8
|
+
define :command => "TaskWithoutParent", :short => "TWOP",
|
9
|
+
:usage => "TaskWithoutParent is useless", :description => "TaskWithoutParent doesn't need a description"
|
10
|
+
end
|
11
|
+
|
12
|
+
class TaskWithParent < Gator::Task
|
13
|
+
define :command => "TaskWithParent", :short => "TWP",
|
14
|
+
:usage => "TaskWithParent is useless", :description => "TaskWithParent doesn't need a description"
|
15
|
+
end
|
16
|
+
|
17
|
+
class TaskContainer < Gator::Command
|
18
|
+
define :command => "TaskContainer", :short => "TC",
|
19
|
+
:usage => "TaskContainer is useless", :description => "TaskContainer doesn't need a description"
|
20
|
+
|
21
|
+
register_subcommand TaskWithParent
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
after :all do
|
27
|
+
remove_const TaskWithoutParent
|
28
|
+
remove_const TaskWithParent
|
29
|
+
remove_const TaskContainer
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "ClassMethods" do
|
33
|
+
|
34
|
+
it "should return the correct definition" do
|
35
|
+
TaskWithoutParent.definition[:command].should == "TaskWithoutParent"
|
36
|
+
TaskWithoutParent.definition[:short].should == "TWOP"
|
37
|
+
TaskWithoutParent.definition[:usage].should == "TaskWithoutParent is useless"
|
38
|
+
TaskWithoutParent.definition[:description].should == "TaskWithoutParent doesn't need a description"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should return the correct parent command" do
|
42
|
+
TaskWithParent.parent.should equal TaskContainer
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should return nil when it does not have a parent command" do
|
46
|
+
TaskWithoutParent.parent.should_not be
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "InstanceMethods" do
|
52
|
+
|
53
|
+
before :each do
|
54
|
+
@task_with_parent = TaskWithParent.new
|
55
|
+
@task_without_parent = TaskWithoutParent.new
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should return the correct definition" do
|
59
|
+
@task_without_parent.definition[:command].should == "TaskWithoutParent"
|
60
|
+
@task_without_parent.definition[:short].should == "TWOP"
|
61
|
+
@task_without_parent.definition[:usage].should == "TaskWithoutParent is useless"
|
62
|
+
@task_without_parent.definition[:description].should == "TaskWithoutParent doesn't need a description"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should return the correct parent command" do
|
66
|
+
@task_with_parent.parent.should equal TaskContainer
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should return nil when it does not have a parent command" do
|
70
|
+
@task_without_parent.parent.should_not be
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should return nil for requests to subcommands" do
|
74
|
+
@task_with_parent.get_subcommand.should_not be
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should return nil for requests to resolve subcommands when it does not have a parent" do
|
78
|
+
@task_without_parent.resolve_subcommand("test").should_not be
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should return nil for requests to resolve subcommands with a wrong command name" do
|
82
|
+
@task_with_parent.resolve_subcommand("TaskContainer_").should_not be
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should return the parent task for requests with the parents command name" do
|
86
|
+
@task_with_parent.resolve_subcommand( [@task_with_parent.parent.definition[:command]] ).should equal @task_with_parent.parent
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should return its class for requests with the its command name" do
|
90
|
+
@task_with_parent.resolve_subcommand( [@task_with_parent.definition[:command]] ).should equal @task_with_parent.class
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Gator::Configuration do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
class ConcreteConfiguration < Gator::Configuration
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
after :all do
|
11
|
+
remove_const ConcreteConfiguration
|
12
|
+
end
|
13
|
+
|
14
|
+
before :each do
|
15
|
+
@configuration = ConcreteConfiguration.new
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should add a property getter" do
|
19
|
+
@configuration.add_configuration :my_prop
|
20
|
+
@configuration.should respond_to "my_prop"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should add a property setter" do
|
24
|
+
@configuration.add_configuration :my_prop
|
25
|
+
@configuration.should respond_to "my_prop="
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should set and get a property via its setter" do
|
29
|
+
a = {}
|
30
|
+
@configuration.add_configuration :a
|
31
|
+
@configuration.a= a
|
32
|
+
@configuration.a.should eql(a)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should add a value" do
|
36
|
+
a = {}
|
37
|
+
@configuration.add_configuration :my_prop, a
|
38
|
+
@configuration.my_prop.should eql(a)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should yield around a property" do
|
42
|
+
a = {}
|
43
|
+
@configuration.add_configuration :my_prop, a
|
44
|
+
@configuration.my_prop do |property|
|
45
|
+
property.should eql(a)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should add a getter with a value" do
|
50
|
+
a = {}
|
51
|
+
@configuration.add_getter :my_getter, a
|
52
|
+
@configuration.my_getter.should equal a
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
|
4
|
+
describe Gator::Paths do
|
5
|
+
|
6
|
+
before :all do
|
7
|
+
@original_pwd = Dir.pwd
|
8
|
+
@empty_project = File.expand_path(File.dirname(__FILE__) + '/../../fixtures/empty_gator_project')
|
9
|
+
@not_a_project = File.expand_path(File.dirname(__FILE__) + '/../../fixtures/no_gator_file')
|
10
|
+
end
|
11
|
+
|
12
|
+
after :all do
|
13
|
+
Dir.chdir @original_pwd
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should point to the correct gator home in the users directory" do
|
17
|
+
Gator::Paths.gator_home.should == File.join(Thor::Util.user_home,".gator")
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should point to the correct project base directory" do
|
21
|
+
Dir.chdir @empty_project
|
22
|
+
Gator::Paths.project_home.should == @empty_project
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should point to the correct environment file" do
|
26
|
+
Gator::Paths.env_file == File.join( Gator::Paths.gator_home, "environment.rb" )
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should return nil for project base directory when not in a project directory" do
|
30
|
+
Dir.chdir @not_a_project
|
31
|
+
Gator::Paths.project_home.should_not be
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should point to the correct project file" do
|
35
|
+
Dir.chdir @empty_project
|
36
|
+
Gator::Paths.project_file.should == File.join(@empty_project,"gator.rb")
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should return nil for project file when not in a project directory" do
|
40
|
+
Dir.chdir @not_a_project
|
41
|
+
Gator::Paths.project_file.should_not be
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
|
4
|
+
describe Gator::Sandbox do
|
5
|
+
|
6
|
+
it "should add a getter for a value" do
|
7
|
+
Gator::Sandbox.add_getter :my_getter, "MyValue"
|
8
|
+
Gator::Sandbox.my_getter.should == "MyValue"
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Gator::Layout do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@layout = Gator::Layout.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should expand empty to itself' do
|
10
|
+
@layout.expand.should eql('')
|
11
|
+
@layout.expand('').should eql('')
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should expand array of symbols' do
|
15
|
+
@layout.expand(:foo, :bar).should eql('foo/bar')
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should expand array of names' do
|
19
|
+
@layout.expand('foo', 'bar').should eql('foo/bar')
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should map symbol to path' do
|
23
|
+
@layout[:foo] = 'baz'
|
24
|
+
@layout.expand(:foo, :bar).should eql('baz/bar')
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should map symbols to path' do
|
28
|
+
@layout[:foo, :bar] = 'none'
|
29
|
+
@layout.expand(:foo, :bar).should eql('none')
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should map strings to path' do
|
33
|
+
@layout[:foo, "bar"] = 'none'
|
34
|
+
@layout.expand(:foo, :bar).should eql('none')
|
35
|
+
@layout.expand(:foo, 'bar').should eql('none')
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should ignore nil elements' do
|
39
|
+
@layout[:foo, :bar] = 'none'
|
40
|
+
@layout.expand(:foo, nil, :bar).should eql('none')
|
41
|
+
@layout.expand(nil, :foo).should eql('foo')
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should return nil if path not mapped' do
|
45
|
+
@layout[:foo].should be_nil
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should return path from symbol' do
|
49
|
+
@layout[:foo] = 'path'
|
50
|
+
@layout[:foo].should eql('path')
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'should return path from symbol' do
|
54
|
+
@layout[:foo, :bar] = 'path'
|
55
|
+
@layout[:foo, :bar].should eql('path')
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should do eager mapping' do
|
59
|
+
@layout[:one] = 'none'
|
60
|
+
@layout[:one, :two] = '1..2'
|
61
|
+
@layout.expand(:one, :two, :three).should eql('1..2/three')
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|