schizo 0.1.3 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +3 -6
- data/CHANGELOG +6 -3
- data/README.rdoc +13 -0
- data/lib/schizo/facade/class_builder.rb +5 -1
- data/lib/schizo/facade/object_builder.rb +7 -3
- data/lib/schizo/version.rb +1 -1
- data/spec/facade/class_builder_spec.rb +30 -0
- data/spec/facade/class_spec.rb +22 -0
- data/spec/facade/object_builder_spec.rb +19 -0
- data/spec/facade/object_spec.rb +27 -0
- data/spec/nested_spec.rb +1 -1
- metadata +4 -4
data/.travis.yml
CHANGED
data/CHANGELOG
CHANGED
@@ -1,11 +1,14 @@
|
|
1
|
+
0.2.0
|
2
|
+
* Support for ActiveSupport::Concern
|
3
|
+
|
1
4
|
0.1.3
|
2
5
|
* Specify multiple roles as argument list to #as (andriytyurnikov)
|
3
6
|
|
4
7
|
0.1.2
|
5
|
-
|
8
|
+
* Allow roles to be namespaced
|
6
9
|
|
7
10
|
0.1.1
|
8
|
-
|
11
|
+
* Updated gemspec info
|
9
12
|
|
10
13
|
0.1.0
|
11
|
-
|
14
|
+
* Initial release
|
data/README.rdoc
CHANGED
@@ -162,6 +162,19 @@ Alternatively...
|
|
162
162
|
end
|
163
163
|
end
|
164
164
|
|
165
|
+
== ActiveSupport::Concern
|
166
|
+
|
167
|
+
You can use <tt>ActiveSupport::Concern</tt> instead of <tt>Schizo::Role</tt>
|
168
|
+
|
169
|
+
module Baz
|
170
|
+
extend ActiveSupport::Concern
|
171
|
+
def something; end
|
172
|
+
end
|
173
|
+
|
174
|
+
foo = Foo.new
|
175
|
+
baz = foo.as(Baz)
|
176
|
+
baz.something
|
177
|
+
|
165
178
|
== Documentation
|
166
179
|
|
167
180
|
{\http://doc.stochasticbytes.com/schizo/index.html}[http://doc.stochasticbytes.com/schizo/index.html]
|
@@ -19,7 +19,11 @@ module Schizo
|
|
19
19
|
container_module.const_get(class_name)
|
20
20
|
else
|
21
21
|
klass = Class.new(base){ include Base }
|
22
|
-
|
22
|
+
if defined?(ActiveSupport::Concern) and role.is_a?(ActiveSupport::Concern)
|
23
|
+
klass.send :include, role
|
24
|
+
elsif role.is_a?(Schizo::Role)
|
25
|
+
klass.class_eval(&role.extended_block) if role.extended_block
|
26
|
+
end
|
23
27
|
container_module.const_set(class_name, klass)
|
24
28
|
end
|
25
29
|
end
|
@@ -35,11 +35,15 @@ module Schizo
|
|
35
35
|
# its role into facade we're building.
|
36
36
|
previous_facade = object
|
37
37
|
while previous_facade.respond_to?(:dci)
|
38
|
-
|
38
|
+
if previous_facade.dci.role.is_a?(Schizo::Role)
|
39
|
+
facade.extend(previous_facade.dci.role)
|
40
|
+
end
|
39
41
|
previous_facade = previous_facade.dci.object
|
40
42
|
end
|
41
|
-
|
42
|
-
|
43
|
+
|
44
|
+
if role.is_a?(Schizo::Role)
|
45
|
+
facade.extend(role)
|
46
|
+
end
|
43
47
|
Schizo::Facade.copy_instance_variables(object, facade)
|
44
48
|
end
|
45
49
|
end
|
data/lib/schizo/version.rb
CHANGED
@@ -21,17 +21,38 @@ module Schizo
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
let(:concern) do
|
25
|
+
Module.new do
|
26
|
+
extend ActiveSupport::Concern
|
27
|
+
included do
|
28
|
+
@test_concern_var = 1
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
24
33
|
let(:builder) do
|
25
34
|
ClassBuilder.new(base, role)
|
26
35
|
end
|
27
36
|
|
37
|
+
let(:builder_concern) do
|
38
|
+
ClassBuilder.new(base, concern)
|
39
|
+
end
|
40
|
+
|
28
41
|
it "works with namespaced roles" do
|
29
42
|
role.module_eval do
|
30
43
|
def self.name
|
31
44
|
"Namespaced::Role"
|
32
45
|
end
|
33
46
|
end
|
47
|
+
|
48
|
+
concern.module_eval do
|
49
|
+
def self.name
|
50
|
+
"Namespaced::Concern"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
34
54
|
builder.product.to_s.should == "Schizo::Facades::Foo::Namespaced::Role"
|
55
|
+
builder_concern.product.to_s.should == "Schizo::Facades::Foo::Namespaced::Concern"
|
35
56
|
end
|
36
57
|
|
37
58
|
context "#initialize" do
|
@@ -39,6 +60,9 @@ module Schizo
|
|
39
60
|
it "sets base and role" do
|
40
61
|
builder.base.should == base
|
41
62
|
builder.role.should == role
|
63
|
+
|
64
|
+
builder_concern.base.should == base
|
65
|
+
builder_concern.role.should == concern
|
42
66
|
end
|
43
67
|
|
44
68
|
end
|
@@ -51,6 +75,12 @@ module Schizo
|
|
51
75
|
facade.ancestors.should include(base)
|
52
76
|
facade.ancestors.should include(Base)
|
53
77
|
end
|
78
|
+
|
79
|
+
builder_concern.product.tap do |facade|
|
80
|
+
facade.should be_a(Class)
|
81
|
+
facade.ancestors.should include(base)
|
82
|
+
facade.ancestors.should include(Base)
|
83
|
+
end
|
54
84
|
end
|
55
85
|
|
56
86
|
end
|
data/spec/facade/class_spec.rb
CHANGED
@@ -20,6 +20,19 @@ module Schizo
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
+
let(:concern) do
|
24
|
+
Module.new do
|
25
|
+
extend ActiveSupport::Concern
|
26
|
+
included do
|
27
|
+
@test_concern_var = 1
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
let(:concern_builder) do
|
33
|
+
ClassBuilder.new(base, concern)
|
34
|
+
end
|
35
|
+
|
23
36
|
let(:builder) do
|
24
37
|
ClassBuilder.new(base, role)
|
25
38
|
end
|
@@ -28,26 +41,35 @@ module Schizo
|
|
28
41
|
builder.product
|
29
42
|
end
|
30
43
|
|
44
|
+
let(:concern_facade) do
|
45
|
+
concern_builder.product
|
46
|
+
end
|
47
|
+
|
31
48
|
it "has the same #name as its superclass" do
|
32
49
|
facade.name.should == "Foo"
|
50
|
+
concern_facade.name.should == "Foo"
|
33
51
|
base.name.should == "Foo"
|
34
52
|
end
|
35
53
|
|
36
54
|
it "#initialize has arity == 2" do
|
37
55
|
base.instance_method(:initialize).arity.should < 2
|
38
56
|
facade.instance_method(:initialize).arity.should == 2
|
57
|
+
concern_facade.instance_method(:initialize).arity.should == 2
|
39
58
|
end
|
40
59
|
|
41
60
|
it "has class evaled the extended block of the role" do
|
42
61
|
facade.should be_instance_variable_defined(:@test_var)
|
62
|
+
concern_facade.should be_instance_variable_defined(:@test_concern_var)
|
43
63
|
end
|
44
64
|
|
45
65
|
it "is defined in Schizo::Facades" do
|
46
66
|
facade.should == Schizo::Facades.const_get(base.name).const_get("AnonRole#{role.object_id}")
|
67
|
+
concern_facade.should == Schizo::Facades.const_get(base.name).const_get("AnonRole#{concern.object_id}")
|
47
68
|
end
|
48
69
|
|
49
70
|
it "is a singleton" do
|
50
71
|
facade.object_id.should == ClassBuilder.new(base, role).product.object_id
|
72
|
+
concern_facade.object_id.should == ClassBuilder.new(base, concern).product.object_id
|
51
73
|
end
|
52
74
|
|
53
75
|
end
|
@@ -19,6 +19,15 @@ module Schizo
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
let(:concern) do
|
23
|
+
Module.new do
|
24
|
+
extend ActiveSupport::Concern
|
25
|
+
def bar(v)
|
26
|
+
@bar = v
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
22
31
|
let(:object) do
|
23
32
|
base.new
|
24
33
|
end
|
@@ -27,11 +36,18 @@ module Schizo
|
|
27
36
|
ObjectBuilder.new(object, role)
|
28
37
|
end
|
29
38
|
|
39
|
+
let(:concern_builder) do
|
40
|
+
ObjectBuilder.new(object, concern)
|
41
|
+
end
|
42
|
+
|
30
43
|
context "#initialize" do
|
31
44
|
|
32
45
|
it "sets object and role" do
|
33
46
|
builder.object.should == object
|
34
47
|
builder.role.should == role
|
48
|
+
|
49
|
+
concern_builder.object.should == object
|
50
|
+
concern_builder.role.should == concern
|
35
51
|
end
|
36
52
|
|
37
53
|
end
|
@@ -41,6 +57,9 @@ module Schizo
|
|
41
57
|
it "returns a facade object" do
|
42
58
|
builder.product.should be_a(base)
|
43
59
|
builder.product.should be_instance_of(base)
|
60
|
+
|
61
|
+
concern_builder.product.should be_a(base)
|
62
|
+
concern_builder.product.should be_instance_of(base)
|
44
63
|
end
|
45
64
|
|
46
65
|
end
|
data/spec/facade/object_spec.rb
CHANGED
@@ -19,6 +19,15 @@ module Schizo
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
let(:concern) do
|
23
|
+
Module.new do
|
24
|
+
extend ActiveSupport::Concern
|
25
|
+
def baz(v)
|
26
|
+
@baz = v
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
22
31
|
let(:object) do
|
23
32
|
base.new
|
24
33
|
end
|
@@ -27,22 +36,35 @@ module Schizo
|
|
27
36
|
ObjectBuilder.new(object, role)
|
28
37
|
end
|
29
38
|
|
39
|
+
let(:concern_builder) do
|
40
|
+
ObjectBuilder.new(object, concern)
|
41
|
+
end
|
42
|
+
|
30
43
|
let(:facade) do
|
31
44
|
builder.product
|
32
45
|
end
|
33
46
|
|
47
|
+
let(:concern_facade) do
|
48
|
+
concern_builder.product
|
49
|
+
end
|
50
|
+
|
34
51
|
it "is not the same as the original object" do
|
35
52
|
facade.should_not == object
|
53
|
+
concern_facade.should_not == object
|
36
54
|
end
|
37
55
|
|
38
56
|
it "responds to methods defined in its role" do
|
39
57
|
facade.should respond_to(:bar)
|
58
|
+
concern_facade.should respond_to(:baz)
|
40
59
|
end
|
41
60
|
|
42
61
|
it "calling methods should not affect original object" do
|
43
62
|
facade.bar("test")
|
44
63
|
facade.instance_variable_get(:@bar).should == "test"
|
64
|
+
concern_facade.baz("test")
|
65
|
+
concern_facade.instance_variable_get(:@baz).should == "test"
|
45
66
|
object.instance_variable_get(:@bar).should be_nil
|
67
|
+
object.instance_variable_get(:@baz).should be_nil
|
46
68
|
end
|
47
69
|
|
48
70
|
context "#actualize" do
|
@@ -50,14 +72,19 @@ module Schizo
|
|
50
72
|
before(:all) do
|
51
73
|
facade.bar("blah")
|
52
74
|
facade.actualize
|
75
|
+
|
76
|
+
concern_facade.baz("blah")
|
77
|
+
concern_facade.actualize
|
53
78
|
end
|
54
79
|
|
55
80
|
it "returns the original object" do
|
56
81
|
facade.actualize.should == object
|
82
|
+
concern_facade.actualize.should == object
|
57
83
|
end
|
58
84
|
|
59
85
|
it "sets instance variables in the original object" do
|
60
86
|
object.instance_variable_get(:@bar).should == "blah"
|
87
|
+
object.instance_variable_get(:@baz).should == "blah"
|
61
88
|
end
|
62
89
|
|
63
90
|
it "does not set any internal dci instance variables" do
|
data/spec/nested_spec.rb
CHANGED
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: schizo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.2.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Christopher J. Bottaro
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-10-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
prerelease: false
|
@@ -153,7 +153,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
153
153
|
- !ruby/object:Gem::Version
|
154
154
|
segments:
|
155
155
|
- 0
|
156
|
-
hash: -
|
156
|
+
hash: -1275366458980579646
|
157
157
|
version: '0'
|
158
158
|
none: false
|
159
159
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
@@ -162,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
162
162
|
- !ruby/object:Gem::Version
|
163
163
|
segments:
|
164
164
|
- 0
|
165
|
-
hash: -
|
165
|
+
hash: -1275366458980579646
|
166
166
|
version: '0'
|
167
167
|
none: false
|
168
168
|
requirements: []
|