phenomenal 0.99.0 → 1.0.0
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/Rakefile +1 -7
- data/lib/phenomenal.rb +10 -1
- data/lib/phenomenal/adaptation.rb +6 -8
- data/lib/phenomenal/conflict_policies.rb +2 -1
- data/lib/phenomenal/context.rb +36 -31
- data/lib/phenomenal/dsl.rb +14 -9
- data/lib/phenomenal/feature.rb +1 -0
- data/lib/phenomenal/manager.rb +10 -12
- data/lib/phenomenal/proc.rb +2 -2
- data/lib/phenomenal/relationships/context_relationships.rb +2 -0
- data/lib/phenomenal/relationships/dsl.rb +1 -0
- data/lib/phenomenal/relationships/feature_relationships.rb +2 -2
- data/lib/phenomenal/relationships/implication.rb +10 -4
- data/lib/phenomenal/relationships/relationship.rb +13 -0
- data/lib/phenomenal/relationships/relationships_manager.rb +1 -1
- data/lib/phenomenal/relationships/relationships_store.rb +13 -7
- data/lib/phenomenal/relationships/requirement.rb +5 -0
- data/lib/phenomenal/relationships/suggestion.rb +14 -6
- data/lib/phenomenal/version.rb +1 -1
- data/lib/phenomenal/viewer/dsl.rb +15 -0
- data/lib/phenomenal/viewer/graphical.rb +136 -0
- data/lib/phenomenal/viewer/textual.rb +36 -0
- data/spec/context_spec.rb +93 -27
- data/spec/dsl_spec.rb +0 -39
- data/spec/integration/adaptation_spec.rb +127 -0
- data/spec/integration/combined_contexts_spec.rb +48 -0
- data/spec/integration/composition_spec.rb +62 -0
- data/spec/integration/conflict_policy_spec.rb +143 -0
- data/spec/integration/open_context.rb +48 -0
- data/spec/{behavior → integration}/relationships_spec.rb +0 -6
- data/spec/manager_spec.rb +30 -19
- data/spec/relationships/context_relationships_spec.rb +23 -3
- data/spec/relationships/dsl_spec.rb +9 -3
- data/spec/relationships/feature_relationships_spec.rb +22 -3
- data/spec/relationships/relationship_spec.rb +13 -1
- data/spec/relationships/relationships_manager_spec.rb +0 -11
- data/spec/relationships/relationships_store_spec.rb +31 -7
- data/spec/spec_helper.rb +1 -0
- data/spec/test_classes.rb +3 -0
- metadata +16 -13
- data/spec/behavior/adaptation_spec.rb +0 -5
- data/spec/behavior/combined_contexts_spec.rb +0 -5
- data/spec/behavior/composition_spec.rb +0 -5
- data/spec/behavior/conflict_policy_spec.rb +0 -5
- data/spec/behavior/open_context.rb +0 -5
@@ -0,0 +1,48 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "Open context facilities" do
|
4
|
+
before :each do
|
5
|
+
context(:quiet) do
|
6
|
+
adaptations_for Phone
|
7
|
+
adapt :advertise do |a_call|
|
8
|
+
"vibrator"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
context(:offHook) do
|
13
|
+
adaptations_for Phone
|
14
|
+
adapt :advertise do |a_call|
|
15
|
+
"call waiting signal"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
after :each do
|
21
|
+
force_forget_context(:screening)
|
22
|
+
force_forget_context(:test)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should be possible to open an existent context and add adaptations in it" do
|
26
|
+
phone = Phone.new
|
27
|
+
call = Call.new("Bob")
|
28
|
+
phone.receive(call)
|
29
|
+
|
30
|
+
activate_context(:quiet)
|
31
|
+
phen_context_active?(:quiet).should be_true
|
32
|
+
context :quiet do
|
33
|
+
remove_adaptation(Phone,:advertise,true)
|
34
|
+
end
|
35
|
+
|
36
|
+
phone.advertise(call).should=="ringtone"
|
37
|
+
|
38
|
+
context :quiet do
|
39
|
+
adaptations_for Phone
|
40
|
+
adapt :advertise {|a_call| "vibrator" }
|
41
|
+
end
|
42
|
+
|
43
|
+
phone.advertise(call).should=="vibrator"
|
44
|
+
deactivate_context(:quiet)
|
45
|
+
|
46
|
+
phone.advertise(call).should=="ringtone"
|
47
|
+
end
|
48
|
+
end
|
@@ -8,7 +8,6 @@ describe "Relationships" do
|
|
8
8
|
@context_names.each do |name|
|
9
9
|
@feature.context(name)
|
10
10
|
end
|
11
|
-
|
12
11
|
end
|
13
12
|
|
14
13
|
after :each do
|
@@ -76,10 +75,6 @@ describe "Relationships" do
|
|
76
75
|
phen_context_active?(:feature).should be_false
|
77
76
|
end
|
78
77
|
|
79
|
-
after do
|
80
|
-
@manager.default_context.deactivate
|
81
|
-
@manager.default_context.forget
|
82
|
-
end
|
83
78
|
it "should be possible to add requirements to the default context" do
|
84
79
|
requirements_for :a, :on=>[:b,:c,:d]
|
85
80
|
requirements_for :a, :on=>:e
|
@@ -166,7 +161,6 @@ describe "Relationships" do
|
|
166
161
|
expect {deactivate_context :a}.to_not raise_error
|
167
162
|
context(:a).active?.should be_false
|
168
163
|
context(:b).active?.should be_false
|
169
|
-
#TODO forget default
|
170
164
|
end
|
171
165
|
|
172
166
|
it "should be possible to add relationships on active features" do
|
data/spec/manager_spec.rb
CHANGED
@@ -14,31 +14,42 @@ describe Phenomenal::Manager do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
describe "#register_context" do
|
17
|
-
|
17
|
+
it "should save the context when they are defined" do
|
18
|
+
@manager.contexts[@context].should==@context
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should raise an error if we declare a context with a name already used" do
|
22
|
+
#expect{Phenomenal::Context.new(:test)}.to raise_error Phenomenal::Error
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should raise an error if we try to register a context twice" do
|
26
|
+
expect{@manager.register_context(@context)}.to raise_error Phenomenal::Error
|
27
|
+
end
|
18
28
|
end
|
19
29
|
|
20
30
|
describe "#unregister_context" do
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
pending "TODO"
|
31
|
+
it "should remove contexts from the manager" do
|
32
|
+
context = Phenomenal::Context.new(:context)
|
33
|
+
expect{@manager.unregister_context(context)}.to_not raise_error
|
34
|
+
@manager.contexts[context].should be_nil
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should allow to forget default context only when it is the only defined context" do
|
38
|
+
@manager.contexts.size.should==4
|
39
|
+
expect{@manager.unregister_context(@manager.default_context)}.to raise_error Phenomenal::Error
|
40
|
+
force_forget_context(@context)
|
41
|
+
force_forget_context(@context2)
|
42
|
+
@manager.contexts.size.should==1
|
43
|
+
expect{@manager.unregister_context(@manager.default_context)}.to_not raise_error
|
44
|
+
@context = Phenomenal::Context.new(:test)
|
45
|
+
@context2 = Phenomenal::Context.new(:test2)
|
46
|
+
end
|
38
47
|
end
|
39
48
|
|
40
49
|
describe "#change_conflict_policy" do
|
41
|
-
|
50
|
+
it "should be possible to change the conflict policy" do
|
51
|
+
@manager.should respond_to :change_conflict_policy
|
52
|
+
end
|
42
53
|
end
|
43
54
|
|
44
55
|
describe "#find_context" do
|
@@ -1,13 +1,33 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Phenomenal::ContextRelationships do
|
4
|
+
before :each do
|
5
|
+
@feature = Phenomenal::Feature.new :feature
|
6
|
+
@context = @feature.context(:context)
|
7
|
+
end
|
8
|
+
after :each do
|
9
|
+
force_forget_context(@feature)
|
10
|
+
force_forget_context(context(:context))
|
11
|
+
end
|
4
12
|
describe "#requires" do
|
5
|
-
|
13
|
+
it "should store the requirements in the parent feature" do
|
14
|
+
@context.requires :b
|
15
|
+
@feature.relationships.should have(1).item
|
16
|
+
@feature.relationships.first.is_a?(Phenomenal::Requirement).should be_true
|
17
|
+
end
|
6
18
|
end
|
7
19
|
describe "#implies" do
|
8
|
-
|
20
|
+
it "should store the implications in the parent feature" do
|
21
|
+
@context.implies :b
|
22
|
+
@feature.relationships.should have(1).item
|
23
|
+
@feature.relationships.first.is_a?(Phenomenal::Implication).should be_true
|
24
|
+
end
|
9
25
|
end
|
10
26
|
describe "#suggests" do
|
11
|
-
|
27
|
+
it "should store the suggestions in the parent feature" do
|
28
|
+
@context.suggests :b
|
29
|
+
@feature.relationships.should have(1).item
|
30
|
+
@feature.relationships.first.is_a?(Phenomenal::Suggestion).should be_true
|
31
|
+
end
|
12
32
|
end
|
13
33
|
end
|
@@ -2,12 +2,18 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe Phenomenal::DSL do
|
4
4
|
describe "#requirements_for" do
|
5
|
-
|
5
|
+
it "should exist in Kernel" do
|
6
|
+
Kernel.should respond_to :requirements_for
|
7
|
+
end
|
6
8
|
end
|
7
9
|
describe "#implications_for" do
|
8
|
-
|
10
|
+
it "should exist in Kernel" do
|
11
|
+
Kernel.should respond_to :implications_for
|
12
|
+
end
|
9
13
|
end
|
10
14
|
describe "#suggestions_for" do
|
11
|
-
|
15
|
+
it "should exist in Kernel" do
|
16
|
+
Kernel.should respond_to :suggestions_for
|
17
|
+
end
|
12
18
|
end
|
13
19
|
end
|
@@ -1,13 +1,32 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Phenomenal::FeatureRelationships do
|
4
|
+
before :each do
|
5
|
+
@feature = Phenomenal::Feature.new :feature
|
6
|
+
end
|
7
|
+
after :each do
|
8
|
+
force_forget_context(@feature)
|
9
|
+
end
|
10
|
+
|
4
11
|
describe "#requirements_for" do
|
5
|
-
|
12
|
+
it "should store the requirements" do
|
13
|
+
@feature.requirements_for :a,:on=>:b
|
14
|
+
@feature.relationships.should have(1).item
|
15
|
+
@feature.relationships.first.is_a?(Phenomenal::Requirement).should be_true
|
16
|
+
end
|
6
17
|
end
|
7
18
|
describe "#implications_for" do
|
8
|
-
|
19
|
+
it "should store the implications" do
|
20
|
+
@feature.implications_for :a,:on=>:b
|
21
|
+
@feature.relationships.should have(1).item
|
22
|
+
@feature.relationships.first.is_a?(Phenomenal::Implication).should be_true
|
23
|
+
end
|
9
24
|
end
|
10
25
|
describe "#suggestions_for" do
|
11
|
-
|
26
|
+
it "should store the suggestions" do
|
27
|
+
@feature.suggestions_for :a,:on=>:b
|
28
|
+
@feature.relationships.should have(1).item
|
29
|
+
@feature.relationships.first.is_a?(Phenomenal::Suggestion).should be_true
|
30
|
+
end
|
12
31
|
end
|
13
32
|
end
|
@@ -16,6 +16,8 @@ describe Phenomenal::Relationship do
|
|
16
16
|
a.should_not == d
|
17
17
|
e = Phenomenal::Relationship.new(:other_source,:target,nil)
|
18
18
|
a.should_not == e
|
19
|
+
e = Phenomenal::Relationship.new(:other_source,:target,:test)
|
20
|
+
a.should_not == e
|
19
21
|
end
|
20
22
|
|
21
23
|
it "should be false for relationships of different types" do
|
@@ -26,6 +28,16 @@ describe Phenomenal::Relationship do
|
|
26
28
|
end
|
27
29
|
|
28
30
|
describe "#refresh" do
|
29
|
-
|
31
|
+
it "should update the references of the source and the target contexts" do
|
32
|
+
a = Phenomenal::Implication.new(:source,:target,nil)
|
33
|
+
expect{a.refresh}.to_not raise_error
|
34
|
+
context :source
|
35
|
+
context :target
|
36
|
+
a.refresh
|
37
|
+
a.source.should==context(:source)
|
38
|
+
a.target.should==context(:target)
|
39
|
+
force_forget_context(:source)
|
40
|
+
force_forget_context(:target)
|
41
|
+
end
|
30
42
|
end
|
31
43
|
end
|
@@ -1,15 +1,4 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Phenomenal::RelationshipsManager do
|
4
|
-
describe "#activate_relationships" do
|
5
|
-
pending "TODO"
|
6
|
-
end
|
7
|
-
|
8
|
-
describe "#deactivate_relationships" do
|
9
|
-
pending "TODO"
|
10
|
-
end
|
11
|
-
|
12
|
-
describe "#update_relationships_references" do
|
13
|
-
pending "TODO"
|
14
|
-
end
|
15
4
|
end
|
@@ -1,19 +1,43 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Phenomenal::RelationshipsStore do
|
4
|
-
|
5
|
-
|
4
|
+
before :each do
|
5
|
+
@source = context :source
|
6
|
+
@target = context :target
|
7
|
+
@relationship = Phenomenal::Relationship.new(:source,:target,phen_default_context)
|
8
|
+
@relationship2 = Phenomenal::Relationship.new(:source2,:target2,phen_default_context)
|
9
|
+
@relationship12 = Phenomenal::Relationship.new(:source,:target2,phen_default_context)
|
10
|
+
@store = Phenomenal::RelationshipsStore.new
|
6
11
|
end
|
7
12
|
|
8
|
-
|
9
|
-
|
13
|
+
after :each do
|
14
|
+
force_forget_context(@source)
|
15
|
+
force_forget_context(@target)
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#add" do
|
19
|
+
it "should add the relationship to the store" do
|
20
|
+
@store.add(@relationship)
|
21
|
+
@store.include?(@relationship).should be_true
|
22
|
+
end
|
10
23
|
end
|
11
24
|
|
12
|
-
describe "#
|
13
|
-
|
25
|
+
describe "#remove" do
|
26
|
+
it "should remove the relationship from the store" do
|
27
|
+
@store.add(@relationship)
|
28
|
+
@store.remove(@relationship)
|
29
|
+
@store.include?(@relationship).should be_false
|
30
|
+
end
|
14
31
|
end
|
15
32
|
|
16
33
|
describe "#get_for" do
|
17
|
-
|
34
|
+
it "should return the relationships that concern the target" do
|
35
|
+
@store.add(@relationship)
|
36
|
+
@store.add(@relationship2)
|
37
|
+
@store.add(@relationship12)
|
38
|
+
@store.get_for(@source).should include(@relationship)
|
39
|
+
@store.get_for(@source).should include(@relationship12)
|
40
|
+
@store.get_for(@source).should_not include(@relationship2)
|
41
|
+
end
|
18
42
|
end
|
19
43
|
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/test_classes.rb
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: phenomenal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 1.0.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Loic Vigneron - Thibault Poncelet
|
@@ -36,6 +36,9 @@ files:
|
|
36
36
|
- lib/phenomenal/feature.rb
|
37
37
|
- lib/phenomenal/proc.rb
|
38
38
|
- lib/phenomenal/conflict_policies.rb
|
39
|
+
- lib/phenomenal/viewer/graphical.rb
|
40
|
+
- lib/phenomenal/viewer/textual.rb
|
41
|
+
- lib/phenomenal/viewer/dsl.rb
|
39
42
|
- lib/phenomenal/dsl.rb
|
40
43
|
- lib/phenomenal/version.rb
|
41
44
|
- lib/phenomenal/relationships/implication.rb
|
@@ -57,12 +60,6 @@ files:
|
|
57
60
|
- spec/spec_helper.rb
|
58
61
|
- spec/feature_spec.rb
|
59
62
|
- spec/context_spec.rb
|
60
|
-
- spec/behavior/composition_spec.rb
|
61
|
-
- spec/behavior/combined_contexts_spec.rb
|
62
|
-
- spec/behavior/adaptation_spec.rb
|
63
|
-
- spec/behavior/open_context.rb
|
64
|
-
- spec/behavior/conflict_policy_spec.rb
|
65
|
-
- spec/behavior/relationships_spec.rb
|
66
63
|
- spec/test_classes.rb
|
67
64
|
- spec/manager_spec.rb
|
68
65
|
- spec/adaptation_spec.rb
|
@@ -74,6 +71,12 @@ files:
|
|
74
71
|
- spec/relationships/relationships_manager_spec.rb
|
75
72
|
- spec/dsl_spec.rb
|
76
73
|
- spec/proc_spec.rb
|
74
|
+
- spec/integration/composition_spec.rb
|
75
|
+
- spec/integration/combined_contexts_spec.rb
|
76
|
+
- spec/integration/adaptation_spec.rb
|
77
|
+
- spec/integration/open_context.rb
|
78
|
+
- spec/integration/conflict_policy_spec.rb
|
79
|
+
- spec/integration/relationships_spec.rb
|
77
80
|
homepage: http://www.phenomenal-gem.com
|
78
81
|
licenses: []
|
79
82
|
|
@@ -105,12 +108,6 @@ test_files:
|
|
105
108
|
- spec/spec_helper.rb
|
106
109
|
- spec/feature_spec.rb
|
107
110
|
- spec/context_spec.rb
|
108
|
-
- spec/behavior/composition_spec.rb
|
109
|
-
- spec/behavior/combined_contexts_spec.rb
|
110
|
-
- spec/behavior/adaptation_spec.rb
|
111
|
-
- spec/behavior/open_context.rb
|
112
|
-
- spec/behavior/conflict_policy_spec.rb
|
113
|
-
- spec/behavior/relationships_spec.rb
|
114
111
|
- spec/test_classes.rb
|
115
112
|
- spec/manager_spec.rb
|
116
113
|
- spec/adaptation_spec.rb
|
@@ -122,3 +119,9 @@ test_files:
|
|
122
119
|
- spec/relationships/relationships_manager_spec.rb
|
123
120
|
- spec/dsl_spec.rb
|
124
121
|
- spec/proc_spec.rb
|
122
|
+
- spec/integration/composition_spec.rb
|
123
|
+
- spec/integration/combined_contexts_spec.rb
|
124
|
+
- spec/integration/adaptation_spec.rb
|
125
|
+
- spec/integration/open_context.rb
|
126
|
+
- spec/integration/conflict_policy_spec.rb
|
127
|
+
- spec/integration/relationships_spec.rb
|