pancake 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/pancake +96 -0
- data/lib/pancake.rb +5 -7
- data/lib/pancake/configuration.rb +2 -23
- data/lib/pancake/core_ext/object.rb +1 -1
- data/lib/pancake/defaults/configuration.rb +21 -1
- data/lib/pancake/generators.rb +0 -3
- data/lib/pancake/hooks/inheritable_inner_classes.rb +15 -2
- data/lib/pancake/master.rb +34 -1
- data/lib/pancake/mixins/render.rb +1 -2
- data/lib/pancake/mixins/stack_helper.rb +1 -1
- data/lib/pancake/router.rb +18 -63
- data/lib/pancake/stack/configuration.rb +3 -5
- data/lib/pancake/stack/router.rb +10 -33
- data/lib/pancake/stack/stack.rb +70 -50
- data/{spec/helpers → lib/pancake/test}/helpers.rb +3 -3
- data/lib/pancake/test/matchers.rb +20 -0
- data/lib/pancake/vendor/hashie/.document +5 -0
- data/lib/pancake/vendor/hashie/.gitignore +7 -0
- data/lib/pancake/vendor/hashie/Gemfile +11 -0
- data/lib/pancake/vendor/hashie/Gemfile.lock +25 -0
- data/lib/pancake/{generators/templates/short/%stack_name%/LICENSE.tt → vendor/hashie/LICENSE} +1 -1
- data/lib/pancake/vendor/hashie/README.rdoc +101 -0
- data/lib/pancake/{generators/templates/micro/%stack_name%/Rakefile.tt → vendor/hashie/Rakefile} +3 -13
- data/lib/pancake/vendor/hashie/VERSION +1 -0
- data/lib/pancake/vendor/hashie/hashie.gemspec +33 -0
- data/lib/pancake/vendor/hashie/lib/hashie.rb +5 -0
- data/lib/pancake/vendor/hashie/lib/hashie/clash.rb +86 -0
- data/lib/pancake/vendor/hashie/lib/hashie/dash.rb +108 -0
- data/lib/pancake/vendor/hashie/lib/hashie/hash.rb +22 -0
- data/lib/pancake/vendor/hashie/lib/hashie/hash_extensions.rb +49 -0
- data/lib/pancake/vendor/hashie/lib/hashie/mash.rb +148 -0
- data/lib/pancake/vendor/hashie/spec/hashie/clash_spec.rb +42 -0
- data/lib/pancake/vendor/hashie/spec/hashie/dash_spec.rb +103 -0
- data/lib/pancake/vendor/hashie/spec/hashie/hash_spec.rb +22 -0
- data/lib/pancake/vendor/hashie/spec/hashie/mash_spec.rb +135 -0
- data/lib/pancake/vendor/hashie/spec/spec.opts +2 -0
- data/lib/pancake/{generators/templates/short/%stack_name%/spec/spec_helper.rb.tt → vendor/hashie/spec/spec_helper.rb} +7 -7
- data/spec/pancake/configuration_spec.rb +1 -1
- data/spec/pancake/constants_spec.rb +1 -1
- data/spec/pancake/defaults/configuration_spec.rb +1 -1
- data/spec/pancake/hooks/on_inherit_spec.rb +13 -13
- data/spec/pancake/inheritance_spec.rb +22 -22
- data/spec/pancake/middleware_spec.rb +6 -5
- data/spec/pancake/middlewares/logger_spec.rb +1 -1
- data/spec/pancake/middlewares/static_spec.rb +1 -1
- data/spec/pancake/mime_types_spec.rb +1 -1
- data/spec/pancake/mixins/publish_spec.rb +24 -24
- data/spec/pancake/mixins/render/template_spec.rb +1 -1
- data/spec/pancake/mixins/render/view_context_spec.rb +1 -1
- data/spec/pancake/mixins/render_spec.rb +1 -1
- data/spec/pancake/mixins/request_helper_spec.rb +1 -1
- data/spec/pancake/mixins/stack_helper_spec.rb +3 -3
- data/spec/pancake/pancake_spec.rb +1 -1
- data/spec/pancake/paths_spec.rb +30 -30
- data/spec/pancake/stack/router_spec.rb +24 -62
- data/spec/pancake/stack/stack_configuration_spec.rb +1 -1
- data/spec/pancake/stack/stack_spec.rb +47 -4
- data/spec/spec_helper.rb +3 -3
- metadata +56 -128
- data/bin/pancake-gen +0 -30
- data/lib/pancake/bootloaders.rb +0 -187
- data/lib/pancake/generators/base.rb +0 -12
- data/lib/pancake/generators/micro_generator.rb +0 -17
- data/lib/pancake/generators/short_generator.rb +0 -18
- data/lib/pancake/generators/templates/common/dotgitignore +0 -22
- data/lib/pancake/generators/templates/common/dothtaccess +0 -17
- data/lib/pancake/generators/templates/micro/%stack_name%/%stack_name%.rb.tt +0 -8
- data/lib/pancake/generators/templates/micro/%stack_name%/config.ru.tt +0 -12
- data/lib/pancake/generators/templates/micro/%stack_name%/pancake_init.rb.tt +0 -1
- data/lib/pancake/generators/templates/micro/%stack_name%/public/.empty_directory +0 -0
- data/lib/pancake/generators/templates/micro/%stack_name%/tmp/.empty_directory +0 -0
- data/lib/pancake/generators/templates/micro/%stack_name%/views/root.html.haml +0 -1
- data/lib/pancake/generators/templates/short/%stack_name%/README.tt +0 -7
- data/lib/pancake/generators/templates/short/%stack_name%/Rakefile.tt +0 -56
- data/lib/pancake/generators/templates/short/%stack_name%/VERSION.tt +0 -1
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%.rb.tt +0 -12
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/%stack_name%.rb.tt +0 -6
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/config.ru.tt +0 -10
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/config/config.rb.tt +0 -23
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/config/environments/development.rb.tt +0 -15
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/config/environments/production.rb.tt +0 -16
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/config/environments/staging.rb.tt +0 -17
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/models/.empty_directory +0 -0
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/mounts/.empty_directory +0 -0
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/public/.empty_directory +0 -0
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/tasks/%stack_name%.rake.tt +0 -4
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/tmp/.empty_directory +0 -0
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/views/root.html.haml +0 -2
- data/lib/pancake/generators/templates/short/%stack_name%/pancake_init.rb.tt +0 -1
- data/lib/pancake/generators/templates/short/%stack_name%/spec/%stack_name%_spec.rb.tt +0 -11
- data/lib/pancake/stack/app.rb +0 -10
- data/lib/pancake/stack/bootloader.rb +0 -114
- data/lib/pancake/stack/middleware.rb +0 -0
- data/lib/pancake/stacks/short.rb +0 -3
- data/lib/pancake/stacks/short/bootloaders.rb +0 -5
- data/lib/pancake/stacks/short/controller.rb +0 -184
- data/lib/pancake/stacks/short/default/views/base.html.haml +0 -5
- data/lib/pancake/stacks/short/default/views/error.html.haml +0 -12
- data/lib/pancake/stacks/short/stack.rb +0 -207
- data/spec/helpers/matchers.rb +0 -25
- data/spec/pancake/bootloaders_spec.rb +0 -119
- data/spec/pancake/stack/app_spec.rb +0 -28
- data/spec/pancake/stack/bootloader_spec.rb +0 -41
- data/spec/pancake/stack/middleware_spec.rb +0 -0
- data/spec/pancake/stacks/short/controller_spec.rb +0 -442
- data/spec/pancake/stacks/short/middlewares_spec.rb +0 -22
- data/spec/pancake/stacks/short/router_spec.rb +0 -150
- data/spec/pancake/stacks/short/stack_spec.rb +0 -117
@@ -0,0 +1,42 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe Hashie::Clash do
|
4
|
+
before do
|
5
|
+
@c = Hashie::Clash.new
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'should be able to set an attribute via method_missing' do
|
9
|
+
@c.foo('bar')
|
10
|
+
@c[:foo].should == 'bar'
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should be able to set multiple attributes' do
|
14
|
+
@c.foo('bar').baz('wok')
|
15
|
+
@c.should == {:foo => 'bar', :baz => 'wok'}
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should convert multiple arguments into an array' do
|
19
|
+
@c.foo(1, 2, 3)
|
20
|
+
@c[:foo].should == [1,2,3]
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should be able to use bang notation to create a new Clash on a key' do
|
24
|
+
@c.foo!
|
25
|
+
@c[:foo].should be_kind_of(Hashie::Clash)
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should be able to chain onto the new Clash when using bang notation' do
|
29
|
+
@c.foo!.bar('abc').baz(123)
|
30
|
+
@c.should == {:foo => {:bar => 'abc', :baz => 123}}
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should be able to jump back up to the parent in the chain with #_end!' do
|
34
|
+
@c.foo!.bar('abc')._end!.baz(123)
|
35
|
+
@c.should == {:foo => {:bar => 'abc'}, :baz => 123}
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should merge rather than replace existing keys' do
|
39
|
+
@c.where(:abc => 'def').where(:hgi => 123)
|
40
|
+
@c.should == {:where => {:abc => 'def', :hgi => 123}}
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
class DashTest < Hashie::Dash
|
4
|
+
property :first_name
|
5
|
+
property :email
|
6
|
+
property :count, :default => 0
|
7
|
+
end
|
8
|
+
|
9
|
+
class Subclassed < DashTest
|
10
|
+
property :last_name
|
11
|
+
end
|
12
|
+
|
13
|
+
describe Hashie::Dash do
|
14
|
+
it 'should be a subclass of Hashie::Hash' do
|
15
|
+
(Hashie::Dash < Hash).should be_true
|
16
|
+
end
|
17
|
+
|
18
|
+
it '#inspect should be ok!' do
|
19
|
+
dash = DashTest.new
|
20
|
+
dash.email = "abd@abc.com"
|
21
|
+
dash.inspect.should == "<#DashTest count=0 email=\"abd@abc.com\" first_name=nil>"
|
22
|
+
end
|
23
|
+
|
24
|
+
describe ' creating properties' do
|
25
|
+
it 'should add the property to the list' do
|
26
|
+
DashTest.property :not_an_att
|
27
|
+
DashTest.properties.include?('not_an_att').should be_true
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should create a method for reading the property' do
|
31
|
+
DashTest.new.respond_to?(:first_name).should be_true
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should create a method for writing the property' do
|
35
|
+
DashTest.new.respond_to?(:first_name=).should be_true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'reading properties' do
|
40
|
+
it 'should raise an error when reading a non-existent property' do
|
41
|
+
lambda{@dash['abc']}.should raise_error(NoMethodError)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe ' writing to properties' do
|
46
|
+
before do
|
47
|
+
@dash = DashTest.new
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should not be able to write to a non-existent property using []=' do
|
51
|
+
lambda{@dash['abc'] = 123}.should raise_error(NoMethodError)
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'should be able to write to an existing property using []=' do
|
55
|
+
lambda{@dash['first_name'] = 'Bob'}.should_not raise_error
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should be able to read/write to an existing property using a method call' do
|
59
|
+
@dash.first_name = 'Franklin'
|
60
|
+
@dash.first_name.should == 'Franklin'
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe ' initializing with a Hash' do
|
65
|
+
it 'should not be able to initialize non-existent properties' do
|
66
|
+
lambda{DashTest.new(:bork => 'abc')}.should raise_error(NoMethodError)
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'should set properties that it is able to' do
|
70
|
+
DashTest.new(:first_name => 'Michael').first_name.should == 'Michael'
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe ' defaults' do
|
75
|
+
before do
|
76
|
+
@dash = DashTest.new
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'should return the default value for defaulted' do
|
80
|
+
DashTest.property :defaulted, :default => 'abc'
|
81
|
+
DashTest.new.defaulted.should == 'abc'
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe Subclassed do
|
87
|
+
it "should inherit all properties from DashTest" do
|
88
|
+
Subclassed.properties.size.should == 6
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should inherit all defaults from DashTest" do
|
92
|
+
Subclassed.defaults.size.should == 6
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should init without raising" do
|
96
|
+
lambda { Subclassed.new }.should_not raise_error
|
97
|
+
lambda { Subclassed.new(:first_name => 'Michael') }.should_not raise_error
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should share defaults from DashTest" do
|
101
|
+
Subclassed.new.count.should == 0
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe Hash do
|
4
|
+
it "should be convertible to a Hashie::Mash" do
|
5
|
+
mash = Hashie::Hash[:some => "hash"].to_mash
|
6
|
+
mash.is_a?(Hashie::Mash).should be_true
|
7
|
+
mash.some.should == "hash"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "#stringify_keys! should turn all keys into strings" do
|
11
|
+
hash = Hashie::Hash[:a => "hey", 123 => "bob"]
|
12
|
+
hash.stringify_keys!
|
13
|
+
hash.should == Hashie::Hash["a" => "hey", "123" => "bob"]
|
14
|
+
end
|
15
|
+
|
16
|
+
it "#stringify_keys should return a hash with stringified keys" do
|
17
|
+
hash = Hashie::Hash[:a => "hey", 123 => "bob"]
|
18
|
+
stringified_hash = hash.stringify_keys
|
19
|
+
hash.should == Hashie::Hash[:a => "hey", 123 => "bob"]
|
20
|
+
stringified_hash.should == Hashie::Hash["a" => "hey", "123" => "bob"]
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe Hashie::Mash do
|
4
|
+
before(:each) do
|
5
|
+
@mash = Hashie::Mash.new
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should inherit from hash" do
|
9
|
+
@mash.is_a?(Hash).should be_true
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should be able to set hash values through method= calls" do
|
13
|
+
@mash.test = "abc"
|
14
|
+
@mash["test"].should == "abc"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should be able to retrieve set values through method calls" do
|
18
|
+
@mash["test"] = "abc"
|
19
|
+
@mash.test.should == "abc"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should test for already set values when passed a ? method" do
|
23
|
+
@mash.test?.should be_false
|
24
|
+
@mash.test = "abc"
|
25
|
+
@mash.test?.should be_true
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should make all [] and []= into strings for consistency" do
|
29
|
+
@mash["abc"] = 123
|
30
|
+
@mash.key?('abc').should be_true
|
31
|
+
@mash["abc"].should == 123
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should have a to_s that is identical to its inspect" do
|
35
|
+
@mash.abc = 123
|
36
|
+
@mash.to_s.should == @mash.inspect
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should return nil instead of raising an error for attribute-esque method calls" do
|
40
|
+
@mash.abc.should be_nil
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should return a Hashie::Mash when passed a bang method to a non-existenct key" do
|
44
|
+
@mash.abc!.is_a?(Hashie::Mash).should be_true
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should return the existing value when passed a bang method for an existing key" do
|
48
|
+
@mash.name = "Bob"
|
49
|
+
@mash.name!.should == "Bob"
|
50
|
+
end
|
51
|
+
|
52
|
+
it "#initializing_reader should return a Hashie::Mash when passed a non-existent key" do
|
53
|
+
@mash.initializing_reader(:abc).is_a?(Hashie::Mash).should be_true
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should allow for multi-level assignment through bang methods" do
|
57
|
+
@mash.author!.name = "Michael Bleigh"
|
58
|
+
@mash.author.should == Hashie::Mash.new(:name => "Michael Bleigh")
|
59
|
+
@mash.author!.website!.url = "http://www.mbleigh.com/"
|
60
|
+
@mash.author.website.should == Hashie::Mash.new(:url => "http://www.mbleigh.com/")
|
61
|
+
end
|
62
|
+
|
63
|
+
it "#deep_update should recursively Hashie::Mash Hashie::Mashes and hashes together" do
|
64
|
+
@mash.first_name = "Michael"
|
65
|
+
@mash.last_name = "Bleigh"
|
66
|
+
@mash.details = Hashie::Hash[:email => "michael@asf.com"].to_mash
|
67
|
+
@mash.deep_update({:details => {:email => "michael@intridea.com"}})
|
68
|
+
@mash.details.email.should == "michael@intridea.com"
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should convert hash assignments into Hashie::Mashes" do
|
72
|
+
@mash.details = {:email => 'randy@asf.com', :address => {:state => 'TX'} }
|
73
|
+
@mash.details.email.should == 'randy@asf.com'
|
74
|
+
@mash.details.address.state.should == 'TX'
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should not convert the type of Hashie::Mashes childs to Hashie::Mash" do
|
78
|
+
class MyMash < Hashie::Mash
|
79
|
+
end
|
80
|
+
|
81
|
+
record = MyMash.new
|
82
|
+
record.son = MyMash.new
|
83
|
+
record.son.class.should == MyMash
|
84
|
+
end
|
85
|
+
|
86
|
+
context "#initialize" do
|
87
|
+
it "should convert an existing hash to a Hashie::Mash" do
|
88
|
+
converted = Hashie::Mash.new({:abc => 123, :name => "Bob"})
|
89
|
+
converted.abc.should == 123
|
90
|
+
converted.name.should == "Bob"
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should convert hashes recursively into Hashie::Mashes" do
|
94
|
+
converted = Hashie::Mash.new({:a => {:b => 1, :c => {:d => 23}}})
|
95
|
+
converted.a.is_a?(Hashie::Mash).should be_true
|
96
|
+
converted.a.b.should == 1
|
97
|
+
converted.a.c.d.should == 23
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should convert hashes in arrays into Hashie::Mashes" do
|
101
|
+
converted = Hashie::Mash.new({:a => [{:b => 12}, 23]})
|
102
|
+
converted.a.first.b.should == 12
|
103
|
+
converted.a.last.should == 23
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should convert an existing Hashie::Mash into a Hashie::Mash" do
|
107
|
+
initial = Hashie::Mash.new(:name => 'randy', :address => {:state => 'TX'})
|
108
|
+
copy = Hashie::Mash.new(initial)
|
109
|
+
initial.name.should == copy.name
|
110
|
+
initial.object_id.should_not == copy.object_id
|
111
|
+
copy.address.state.should == 'TX'
|
112
|
+
copy.address.state = 'MI'
|
113
|
+
initial.address.state.should == 'TX'
|
114
|
+
copy.address.object_id.should_not == initial.address.object_id
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should accept a default block" do
|
118
|
+
initial = Hashie::Mash.new { |h,i| h[i] = []}
|
119
|
+
initial.default_proc.should_not be_nil
|
120
|
+
initial.default.should be_nil
|
121
|
+
initial.test.should == []
|
122
|
+
initial.test?.should be_true
|
123
|
+
end
|
124
|
+
|
125
|
+
describe "to_json" do
|
126
|
+
|
127
|
+
it "should render to_json" do
|
128
|
+
@mash.foo = :bar
|
129
|
+
@mash.bar = {"homer" => "simpson"}
|
130
|
+
expected = {"foo" => "bar", "bar" => {"homer" => "simpson"}}
|
131
|
+
JSON.parse(@mash.to_json).should == expected
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
@@ -1,13 +1,13 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
3
|
-
require 'pancake'
|
4
|
-
|
1
|
+
require 'rubygems'
|
2
|
+
require 'json'
|
5
3
|
|
6
4
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
7
5
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
8
|
-
|
6
|
+
|
7
|
+
require 'hashie'
|
8
|
+
require 'spec'
|
9
|
+
require 'spec/autorun'
|
9
10
|
|
10
11
|
Spec::Runner.configure do |config|
|
11
|
-
|
12
|
-
config.include(Pancake::Test::Matchers)
|
12
|
+
|
13
13
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe "Pancake::Stack inheritance" do
|
4
4
|
describe "inheritance hooks" do
|
@@ -11,17 +11,17 @@ describe "Pancake::Stack inheritance" do
|
|
11
11
|
Pancake::Stack.on_inherit(&blk)
|
12
12
|
end
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
before(:each) do
|
16
16
|
$collector = []
|
17
17
|
clear_constants(:FooStack)
|
18
18
|
Pancake::Stack.on_inherit.clear
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
after(:each) do
|
22
22
|
clear_constants(:FooStack)
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
it "should be able to add inheritance hooks" do
|
26
26
|
Pancake::Stack.on_inherit do |base, parent|
|
27
27
|
$collector << base
|
@@ -29,32 +29,32 @@ describe "Pancake::Stack inheritance" do
|
|
29
29
|
class ::FooStack < Pancake::Stack; end
|
30
30
|
$collector.should == [FooStack]
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
it "should be able to add multiple inheritance hooks" do
|
34
34
|
Pancake::Stack.on_inherit{|b,p| $collector << b}
|
35
35
|
Pancake::Stack.on_inherit{|b,p| $collector << :foo}
|
36
|
-
|
36
|
+
|
37
37
|
class ::FooStack < Pancake::Stack
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
$collector.should == [FooStack, :foo]
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
describe "Inheriting Stacks" do
|
46
|
-
before(:all) do
|
46
|
+
before(:all) do
|
47
47
|
clear_constants(:FooStack, :BarStack)
|
48
48
|
end
|
49
|
-
|
49
|
+
|
50
50
|
before(:each) do
|
51
51
|
class ::FooStack < Pancake::Stack; end
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
after(:each) do
|
55
55
|
clear_constants(:FooStack, :BarStack)
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
58
|
describe "configuration" do
|
59
59
|
it "should inherit the configuration with a stack" do
|
60
60
|
class ::BarStack < ::FooStack; end
|
@@ -1,47 +1,47 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe "Pancake Inheritance" do
|
4
4
|
describe "on inherit hook" do
|
5
|
-
|
5
|
+
|
6
6
|
before(:each) do
|
7
7
|
clear_constants(:MyFoo, :OtherFoo, :FutherFoo, :SomeFoo, :DeeperFoo)
|
8
|
-
class ::MyFoo
|
8
|
+
class ::MyFoo
|
9
9
|
extend Pancake::Hooks::OnInherit
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
::MyFoo.on_inherit do |base, parent|
|
13
13
|
$inherited_capture << {:base => base, :parent => parent}
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
$inherited_capture = []
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
it "should provide on_inherit callbacks" do
|
20
20
|
class ::OtherFoo < MyFoo; end
|
21
21
|
$inherited_capture.should == [{:base => OtherFoo, :parent => MyFoo}]
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
it "should inherit multiple times" do
|
25
25
|
class ::OtherFoo < MyFoo; end
|
26
26
|
class ::FurtherFoo < OtherFoo; end
|
27
27
|
$inherited_capture.should == [{:base => OtherFoo, :parent => MyFoo}, {:base => FurtherFoo, :parent => OtherFoo}]
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
it "should allow for multiple callbacks" do
|
31
31
|
MyFoo.on_inherit{|base, parent| $inherited_capture << :second}
|
32
32
|
class ::OtherFoo < MyFoo; end
|
33
33
|
$inherited_capture.should == [{:base => OtherFoo, :parent => MyFoo}, :second]
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
it "should allow for multiple callbacks that are inherited" do
|
37
37
|
MyFoo.on_inherit{|base, parent| $inherited_capture << :second}
|
38
38
|
class ::OtherFoo < MyFoo; end
|
39
39
|
$inherited_capture = []
|
40
40
|
OtherFoo.on_inherit{|base, parent| $inherited_capture << :inherited}
|
41
41
|
class ::SomeFoo < OtherFoo; end
|
42
|
-
$inherited_capture.should == [{:base => SomeFoo, :parent => OtherFoo}, :second, :inherited]
|
42
|
+
$inherited_capture.should == [{:base => SomeFoo, :parent => OtherFoo}, :second, :inherited]
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
it "should not pollute the parent with the child inherited hooks" do
|
46
46
|
class ::OtherFoo < MyFoo; end
|
47
47
|
$inherited_capture = []
|
@@ -50,51 +50,51 @@ describe "Pancake Inheritance" do
|
|
50
50
|
$inherited_capture.should == [{:base => SomeFoo, :parent => MyFoo}]
|
51
51
|
end
|
52
52
|
end # "on inherit hook"
|
53
|
-
|
53
|
+
|
54
54
|
describe "inheritable inner classes" do
|
55
|
-
|
55
|
+
|
56
56
|
before(:each) do
|
57
57
|
clear_constants(:MyFoo, :OtherFoo, :InnerFoo, :SomeFoo, :DeeperFoo)
|
58
|
-
|
58
|
+
|
59
59
|
class ::MyFoo
|
60
60
|
inheritable_inner_classes :InnerFoo
|
61
61
|
class InnerFoo; end
|
62
62
|
end
|
63
63
|
end
|
64
|
-
|
64
|
+
|
65
65
|
it "should inherit the inner class along with the outer class" do
|
66
66
|
class ::OtherFoo < MyFoo; end
|
67
67
|
OtherFoo::InnerFoo.superclass.should equal(MyFoo::InnerFoo)
|
68
68
|
OtherFoo::InnerFoo.should_not equal(MyFoo::InnerFoo)
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
it "should inherit the inner class multiple times" do
|
72
72
|
class ::OtherFoo < MyFoo; end
|
73
73
|
class ::SomeFoo < OtherFoo; end
|
74
74
|
class ::DeeperFoo < SomeFoo; end
|
75
|
-
|
75
|
+
|
76
76
|
SomeFoo::InnerFoo.superclass.should equal(OtherFoo::InnerFoo)
|
77
77
|
SomeFoo::InnerFoo.should_not equal(OtherFoo::InnerFoo)
|
78
78
|
DeeperFoo::InnerFoo.superclass.should equal(SomeFoo::InnerFoo)
|
79
79
|
DeeperFoo::InnerFoo.should_not equal(OtherFoo::InnerFoo)
|
80
80
|
DeeperFoo::InnerFoo.superclass.should equal(SomeFoo::InnerFoo)
|
81
81
|
end
|
82
|
-
|
82
|
+
|
83
83
|
it "should allow additional inner classes to be declared without polluting the parent" do
|
84
84
|
class ::OtherFoo < MyFoo
|
85
85
|
inheritable_inner_classes :SomeDeepFoo
|
86
86
|
class SomeDeepFoo; end
|
87
87
|
end
|
88
|
-
|
88
|
+
|
89
89
|
class ::SomeFoo < MyFoo; end
|
90
90
|
class ::DeeperFoo < ::OtherFoo; end
|
91
|
-
|
91
|
+
|
92
92
|
SomeFoo::InnerFoo.should inherit_from(MyFoo::InnerFoo)
|
93
93
|
SomeFoo.const_defined?(:SomeDeepFoo).should be_false
|
94
|
-
|
94
|
+
|
95
95
|
DeeperFoo::InnerFoo.should inherit_from(OtherFoo::InnerFoo)
|
96
96
|
DeeperFoo::SomeDeepFoo.should inherit_from(OtherFoo::SomeDeepFoo)
|
97
97
|
end
|
98
98
|
|
99
99
|
end # "inheritable inner classes"
|
100
|
-
end
|
100
|
+
end
|