phenomenal 0.11.11.24.4 → 0.99.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.
Files changed (51) hide show
  1. data/LICENSE +1 -1
  2. data/README +3 -4
  3. data/Rakefile +3 -0
  4. data/lib/phenomenal.rb +15 -2
  5. data/lib/phenomenal/adaptation.rb +22 -12
  6. data/lib/phenomenal/context.rb +127 -134
  7. data/lib/phenomenal/dsl.rb +41 -14
  8. data/lib/phenomenal/feature.rb +8 -0
  9. data/lib/phenomenal/logger.rb +0 -1
  10. data/lib/phenomenal/manager.rb +117 -35
  11. data/lib/phenomenal/relationships/context_relationships.rb +22 -0
  12. data/lib/phenomenal/relationships/dsl.rb +18 -0
  13. data/lib/phenomenal/relationships/feature_relationships.rb +42 -0
  14. data/lib/phenomenal/relationships/implication.rb +35 -0
  15. data/lib/phenomenal/relationships/relationship.rb +42 -0
  16. data/lib/phenomenal/relationships/relationships_manager.rb +63 -0
  17. data/lib/phenomenal/relationships/relationships_store.rb +73 -0
  18. data/lib/phenomenal/relationships/requirement.rb +26 -0
  19. data/lib/phenomenal/relationships/suggestion.rb +41 -0
  20. data/lib/phenomenal/version.rb +3 -0
  21. data/spec/adaptation_spec.rb +64 -0
  22. data/spec/behavior/adaptation_spec.rb +5 -0
  23. data/spec/behavior/combined_contexts_spec.rb +5 -0
  24. data/spec/behavior/composition_spec.rb +5 -0
  25. data/spec/behavior/conflict_policy_spec.rb +5 -0
  26. data/spec/behavior/open_context.rb +5 -0
  27. data/spec/behavior/relationships_spec.rb +249 -0
  28. data/spec/context_spec.rb +268 -0
  29. data/spec/dsl_spec.rb +181 -0
  30. data/spec/feature_spec.rb +5 -0
  31. data/spec/manager_spec.rb +84 -0
  32. data/spec/proc_spec.rb +20 -0
  33. data/spec/relationships/context_relationships_spec.rb +13 -0
  34. data/spec/relationships/dsl_spec.rb +13 -0
  35. data/spec/relationships/feature_relationships_spec.rb +13 -0
  36. data/spec/relationships/relationship_spec.rb +31 -0
  37. data/spec/relationships/relationships_manager_spec.rb +15 -0
  38. data/spec/relationships/relationships_store_spec.rb +19 -0
  39. data/spec/spec_helper.rb +18 -0
  40. data/{test → spec}/test_classes.rb +3 -0
  41. metadata +69 -24
  42. data/demo.rb +0 -24
  43. data/demo_age.rb +0 -89
  44. data/demo_dsl.rb +0 -28
  45. data/phenomenal-0.11.11.24.3.gem +0 -0
  46. data/phenomenal.gemspec +0 -15
  47. data/test/test_cop_adaptation.rb +0 -168
  48. data/test/test_cop_composition.rb +0 -84
  49. data/test/test_cop_conflictpolicy.rb +0 -177
  50. data/test/test_cop_infrastructure.rb +0 -129
  51. data/test_declaration.rb +0 -18
@@ -0,0 +1,84 @@
1
+ require "spec_helper"
2
+
3
+ describe Phenomenal::Manager do
4
+ before :each do
5
+ @context = Phenomenal::Context.new(:test)
6
+ @context2 = Phenomenal::Context.new(:test2)
7
+ @combined = context :test,:test2
8
+ @manager = Phenomenal::Manager.instance
9
+ end
10
+
11
+ after :each do
12
+ force_forget_context(@context)
13
+ force_forget_context(@context2)
14
+ end
15
+
16
+ describe "#register_context" do
17
+ pending "TODO"
18
+ end
19
+
20
+ describe "#unregister_context" do
21
+ pending "TODO"
22
+ end
23
+
24
+ describe "#register_adaptation" do
25
+ pending "unregister_adaptation"
26
+ end
27
+
28
+ describe "#activate_context" do
29
+ pending "TODO"
30
+ end
31
+
32
+ describe "#deactivate_context" do
33
+ pending "TODO"
34
+ end
35
+
36
+ describe "#proceed" do
37
+ pending "TODO"
38
+ end
39
+
40
+ describe "#change_conflict_policy" do
41
+ pending "TODO"
42
+ end
43
+
44
+ describe "#find_context" do
45
+ it "should return the simple context with the name passed as parameter" do
46
+ @manager.find_context(:test).should==@context
47
+ end
48
+
49
+ it "should raise an error if the context wasn't found" do
50
+ expect {@manager.find_context(:unknown)}.to raise_error Phenomenal::Error
51
+ end
52
+
53
+ it "should return the context immediatly if the argument is a context an is known by the manager" do
54
+ @manager.find_context(@context).should==@context
55
+ end
56
+
57
+ it "should return the combined context matching the list of names passed as parameters" do
58
+ @manager.find_context(:test,:test2).should==@combined
59
+ end
60
+ end
61
+
62
+ describe "#context_defined?" do
63
+ it "should return the context if the context exist" do
64
+ @manager.context_defined?(:test).should==@context
65
+ end
66
+
67
+ it "should return nil if the context doesn't exist" do
68
+ context = Phenomenal::Context.new(:context)
69
+ @manager.context_defined?(:context).should==context
70
+ context.forget
71
+ @manager.context_defined?(:context).should be_nil
72
+ @manager.context_defined?(:unknown).should be_nil
73
+ end
74
+
75
+ it "should work with context references" do
76
+ @manager.context_defined?(@context).should==@context
77
+ end
78
+
79
+ it "should work with combined contexts" do
80
+ @manager.context_defined?(:test,:test2).should==@combined
81
+ @manager.context_defined?(:test,:unknown).should be_nil
82
+ end
83
+ end
84
+ end
data/spec/proc_spec.rb ADDED
@@ -0,0 +1,20 @@
1
+ require "spec_helper"
2
+
3
+ describe Proc do
4
+ describe "#phenomenal_bind" do
5
+ it "should be possible to bind proc as instance methods" do
6
+ p = Proc.new{"Proc"}
7
+ p.should respond_to :phenomenal_bind
8
+ o = BasicObject.new
9
+ p.phenomenal_bind(o).call.should == "Proc"
10
+ end
11
+ end
12
+
13
+ describe "#phenomenal_class_bind" do
14
+ it "should be possible to bind proc as class methods" do
15
+ p = Proc.new{"Proc"}
16
+ p.should respond_to :phenomenal_class_bind
17
+ p.phenomenal_bind(BasicObject).call.should == "Proc"
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ describe Phenomenal::ContextRelationships do
4
+ describe "#requires" do
5
+ pending "TODO"
6
+ end
7
+ describe "#implies" do
8
+ pending "TODO"
9
+ end
10
+ describe "#suggests" do
11
+ pending "TODO"
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ describe Phenomenal::DSL do
4
+ describe "#requirements_for" do
5
+ pending "TODO"
6
+ end
7
+ describe "#implications_for" do
8
+ pending "TODO"
9
+ end
10
+ describe "#suggestions_for" do
11
+ pending "TODO"
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ describe Phenomenal::FeatureRelationships do
4
+ describe "#requirements_for" do
5
+ pending "TODO"
6
+ end
7
+ describe "#implications_for" do
8
+ pending "TODO"
9
+ end
10
+ describe "#suggestions_for" do
11
+ pending "TODO"
12
+ end
13
+ end
@@ -0,0 +1,31 @@
1
+ require "spec_helper"
2
+
3
+ describe Phenomenal::Relationship do
4
+ describe "#==" do
5
+ it "should be true for two relationships with the same source and target" do
6
+ a = Phenomenal::Relationship.new(:source,:target,nil)
7
+ b = Phenomenal::Relationship.new(:source,:target,nil)
8
+ a.should == b
9
+ end
10
+
11
+ it "should be false for relationships concerning different contexts" do
12
+ a = Phenomenal::Relationship.new(:source,:target,nil)
13
+ c = Phenomenal::Relationship.new(:source,:other_target,nil)
14
+ a.should_not == c
15
+ d = Phenomenal::Relationship.new(:other_source,:other_target,nil)
16
+ a.should_not == d
17
+ e = Phenomenal::Relationship.new(:other_source,:target,nil)
18
+ a.should_not == e
19
+ end
20
+
21
+ it "should be false for relationships of different types" do
22
+ a = Phenomenal::Implication.new(:source,:target,nil)
23
+ b = Phenomenal::Requirement.new(:source,:target,nil)
24
+ a.should_not == b
25
+ end
26
+ end
27
+
28
+ describe "#refresh" do
29
+ pending "TODO"
30
+ end
31
+ end
@@ -0,0 +1,15 @@
1
+ require "spec_helper"
2
+
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
+ end
@@ -0,0 +1,19 @@
1
+ require "spec_helper"
2
+
3
+ describe Phenomenal::RelationshipsStore do
4
+ describe "#add" do
5
+ pending "TODO"
6
+ end
7
+
8
+ describe "#remove" do
9
+ pending "TODO"
10
+ end
11
+
12
+ describe "#update_references" do
13
+ pending "TODO"
14
+ end
15
+
16
+ describe "#get_for" do
17
+ pending "TODO"
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ require 'rspec'
2
+ require "phenomenal"
3
+
4
+ RSpec.configure do |config|
5
+ config.color_enabled = true
6
+ config.formatter = 'progress'
7
+ end
8
+
9
+ def force_forget_context(context)
10
+ while phen_context_active?(context) do
11
+ phen_deactivate_context(context)
12
+ end
13
+ phen_forget_context(context)
14
+ end
15
+
16
+ def define_test_classes
17
+ load "test_classes.rb"
18
+ end
@@ -1,4 +1,7 @@
1
1
  # Define the test classes
2
+ class TestString < String
3
+ end
4
+
2
5
  class TestClass < String
3
6
  @klass_inst_var = 2
4
7
  @@klass_var = 1
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: phenomenal
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.11.11.24.4
5
+ version: 0.99.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Loic Vigneron - Thibault Poncelet
@@ -11,10 +11,20 @@ bindir: bin
11
11
  cert_chain: []
12
12
 
13
13
  date: 2011-11-24 00:00:00 Z
14
- dependencies: []
15
-
16
- description: A context oriented programing framework for ruby
17
- email: thibault.poncelet@student.uclouvain.be - loic.vigneron@student.uclouvain.be
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rspec
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: "2.5"
24
+ type: :development
25
+ version_requirements: *id001
26
+ description: A context oriented programming framework for Ruby
27
+ email: team@phenomenal-gem.com
18
28
  executables: []
19
29
 
20
30
  extensions: []
@@ -22,28 +32,48 @@ extensions: []
22
32
  extra_rdoc_files: []
23
33
 
24
34
  files:
25
- - test/test_cop_conflictpolicy.rb
26
- - test/test_cop_infrastructure.rb
27
- - test/test_classes.rb
28
- - test/test_cop_composition.rb
29
- - test/test_cop_adaptation.rb
30
- - README
31
- - phenomenal.gemspec
32
- - phenomenal-0.11.11.24.3.gem
33
- - LICENSE
34
- - test_declaration.rb
35
- - demo_dsl.rb
36
- - demo_age.rb
37
- - demo.rb
38
35
  - lib/phenomenal/manager.rb
36
+ - lib/phenomenal/feature.rb
39
37
  - lib/phenomenal/proc.rb
40
38
  - lib/phenomenal/conflict_policies.rb
41
39
  - lib/phenomenal/dsl.rb
40
+ - lib/phenomenal/version.rb
41
+ - lib/phenomenal/relationships/implication.rb
42
+ - lib/phenomenal/relationships/relationships_store.rb
43
+ - lib/phenomenal/relationships/relationship.rb
44
+ - lib/phenomenal/relationships/requirement.rb
45
+ - lib/phenomenal/relationships/dsl.rb
46
+ - lib/phenomenal/relationships/relationships_manager.rb
47
+ - lib/phenomenal/relationships/context_relationships.rb
48
+ - lib/phenomenal/relationships/suggestion.rb
49
+ - lib/phenomenal/relationships/feature_relationships.rb
42
50
  - lib/phenomenal/context.rb
43
51
  - lib/phenomenal/logger.rb
44
52
  - lib/phenomenal/adaptation.rb
45
53
  - lib/phenomenal.rb
54
+ - LICENSE
46
55
  - Rakefile
56
+ - README
57
+ - spec/spec_helper.rb
58
+ - spec/feature_spec.rb
59
+ - 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
+ - spec/test_classes.rb
67
+ - spec/manager_spec.rb
68
+ - spec/adaptation_spec.rb
69
+ - spec/relationships/relationships_store_spec.rb
70
+ - spec/relationships/relationship_spec.rb
71
+ - spec/relationships/feature_relationships_spec.rb
72
+ - spec/relationships/dsl_spec.rb
73
+ - spec/relationships/context_relationships_spec.rb
74
+ - spec/relationships/relationships_manager_spec.rb
75
+ - spec/dsl_spec.rb
76
+ - spec/proc_spec.rb
47
77
  homepage: http://www.phenomenal-gem.com
48
78
  licenses: []
49
79
 
@@ -70,10 +100,25 @@ rubyforge_project:
70
100
  rubygems_version: 1.8.11
71
101
  signing_key:
72
102
  specification_version: 3
73
- summary: A context oriented programing framework for ruby
103
+ summary: A context oriented programming framework for Ruby
74
104
  test_files:
75
- - test/test_cop_conflictpolicy.rb
76
- - test/test_cop_infrastructure.rb
77
- - test/test_classes.rb
78
- - test/test_cop_composition.rb
79
- - test/test_cop_adaptation.rb
105
+ - spec/spec_helper.rb
106
+ - spec/feature_spec.rb
107
+ - 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
+ - spec/test_classes.rb
115
+ - spec/manager_spec.rb
116
+ - spec/adaptation_spec.rb
117
+ - spec/relationships/relationships_store_spec.rb
118
+ - spec/relationships/relationship_spec.rb
119
+ - spec/relationships/feature_relationships_spec.rb
120
+ - spec/relationships/dsl_spec.rb
121
+ - spec/relationships/context_relationships_spec.rb
122
+ - spec/relationships/relationships_manager_spec.rb
123
+ - spec/dsl_spec.rb
124
+ - spec/proc_spec.rb
data/demo.rb DELETED
@@ -1,24 +0,0 @@
1
- require_relative 'lib/phenomenal.rb'
2
- class Foo
3
- def initialize
4
- @inst_var = "bar"
5
- end
6
- def print
7
- "Base: " +@inst_var
8
- end
9
- end
10
-
11
- pnml_define_context(:demo)
12
- pnml_add_adaptation(:demo, Foo, :print) do
13
- pnml_proceed + " adaptation: "+ @inst_var
14
- end
15
-
16
- f = Foo.new
17
- puts f.print
18
-
19
- pnml_activate_context(:demo)
20
- puts f.print
21
-
22
- pnml_deactivate_context(:demo)
23
- puts f.print
24
-
data/demo_age.rb DELETED
@@ -1,89 +0,0 @@
1
- require_relative "./lib/phenomenal.rb"
2
-
3
- pnml_change_conflict_policy { |a,b| age_conflict_policy(a,b) }
4
-
5
- class Plop
6
- @@klass_var = "PPPP"
7
- @klass_inst_var = "xD"
8
- attr_accessor :test
9
-
10
- def initialize
11
- @test = ">BOR<"
12
- end
13
-
14
- def print(arg)
15
- "0 -> Test: #{self.test} default Plop.print(arg): ARG: #{arg.to_s}"
16
- end
17
-
18
- def self.plop(arg)
19
- "SELF 0 #{arg} KlassVar: #{@@klass_var} INSTKLS #{@klass_inst_var}"
20
- end
21
- end
22
-
23
- pnml_define_context(:level1)
24
-
25
- pnml_add_adaptation(:level1,Plop,:print) do |arg|
26
- pnml_proceed(arg) + "\n" + "1 -> level1 ARG1: #{arg.to_s}"
27
- end
28
-
29
- pnml_add_adaptation(:level1,Plop,:plop) do |arg|
30
- pnml_proceed(arg) + "\n" + "1 -> SELF level1 ARG1: #{arg.to_s} INSTKLS #{@kls_var}"
31
- end
32
-
33
- pnml_define_context(:level2)
34
-
35
- pnml_add_adaptation(:level2,Plop,:print) do |arg|
36
- pnml_proceed(arg) + "\n" + "2 -> level2 ARG2: #{arg.to_s}"
37
- end
38
-
39
- pnml_add_adaptation(:level2,Plop,:plop) do |arg|
40
- pnml_proceed(arg) + "\n" + "2 -> SELF level2 ARG2: #{arg.to_s} INSTKLS #{@kls_inst_var}"
41
- end
42
-
43
- pnml_define_context(:level3)
44
-
45
- pnml_add_adaptation(:level3,Plop,:print) do |arg|
46
- pnml_proceed(arg) + "\n" + "3 -> level3 ARG3: #{arg.to_s}"
47
- end
48
-
49
- pnml_define_context(:level4)
50
-
51
- pnml_add_adaptation(:level4,Plop,:print) do |arg|
52
- pnml_proceed(arg) + "\n" + "4 -> TEST4: #{@test} level4 ARG4: #{arg.to_s}"
53
- end
54
-
55
- p = Plop.new
56
-
57
- puts "=============> LEVEL 0 <===============\n"+
58
- p.print("foo")+
59
- "\n======================================="
60
-
61
- pnml_activate_context(:level1)
62
- puts "=============> LEVEL 1 <===============\n"+
63
- p.print("foo1")+
64
- "\n======================================="
65
-
66
- pnml_activate_context(:level2)
67
- puts "=============> LEVEL 2 <===============\n"+
68
- p.print("foo2")+
69
- "\n======================================="
70
-
71
- pnml_activate_context(:level3)
72
- puts "=============> LEVEL 3 <===============\n"+
73
- p.print("foo3")+
74
- "\n======================================="
75
- p.test=">BAR<"
76
- pnml_activate_context(:level4)
77
- puts "=============> LEVEL 4 <===============\n"+
78
- p.print("foo4")+
79
- "\n======================================="
80
-
81
- pnml_deactivate_context(:level3)
82
- puts "=============> LEVEL 4 -3 <===============\n"+
83
- p.print("foo4-2")+
84
- "\n======================================="
85
-
86
- puts "\n\n========> LEVEL 4 -3 KLASS METH<===========\n"+
87
- Plop.plop(">KLASS_METH_ARG<") +
88
- "\n======================================="
89
-