phenomenal 1.1.1 → 1.2.1

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 (34) hide show
  1. data/README.md +15 -3
  2. data/lib/phenomenal.rb +19 -19
  3. data/lib/phenomenal/{adaptation.rb → context/adaptation.rb} +45 -16
  4. data/lib/phenomenal/{context.rb → context/context.rb} +15 -106
  5. data/lib/phenomenal/context/context_creation.rb +68 -0
  6. data/lib/phenomenal/{feature.rb → context/feature.rb} +0 -0
  7. data/lib/phenomenal/dsl.rb +20 -16
  8. data/lib/phenomenal/error.rb +2 -0
  9. data/lib/phenomenal/manager/{adaptations_management.rb → adaptation_management.rb} +10 -10
  10. data/lib/phenomenal/manager/conflict_policies.rb +5 -4
  11. data/lib/phenomenal/manager/{contexts_management.rb → context_management.rb} +15 -14
  12. data/lib/phenomenal/manager/manager.rb +6 -6
  13. data/lib/phenomenal/{relationships → relationship}/context_relationships.rb +0 -0
  14. data/lib/phenomenal/{relationships → relationship}/dsl.rb +3 -3
  15. data/lib/phenomenal/{relationships → relationship}/feature_relationships.rb +1 -1
  16. data/lib/phenomenal/{relationships → relationship}/implication.rb +0 -0
  17. data/lib/phenomenal/{relationships → relationship}/relationship.rb +0 -0
  18. data/lib/phenomenal/{relationships/relationships_manager.rb → relationship/relationship_manager.rb} +3 -5
  19. data/lib/phenomenal/{relationships/relationships_store.rb → relationship/relationship_store.rb} +1 -1
  20. data/lib/phenomenal/{relationships → relationship}/requirement.rb +1 -1
  21. data/lib/phenomenal/{relationships → relationship}/suggestion.rb +0 -0
  22. data/lib/phenomenal/version.rb +1 -1
  23. data/lib/phenomenal/viewer/graphical.rb +7 -7
  24. data/lib/phenomenal/viewer/textual.rb +1 -1
  25. data/spec/context_spec.rb +8 -8
  26. data/spec/dsl_spec.rb +2 -2
  27. data/spec/integration/adaptation_spec.rb +4 -3
  28. data/spec/integration/conflict_policy_spec.rb +3 -3
  29. data/spec/integration/relationships_spec.rb +6 -6
  30. data/spec/manager_spec.rb +3 -3
  31. data/spec/relationships/relationships_manager_spec.rb +1 -1
  32. data/spec/relationships/relationships_store_spec.rb +5 -5
  33. metadata +18 -17
  34. data/lib/phenomenal/logger.rb +0 -34
data/README.md CHANGED
@@ -4,6 +4,18 @@ Phenomenal Gem is a context-oriented framework implemented in Ruby that allows c
4
4
 
5
5
  See www.phenomenal-gem.com for more details
6
6
 
7
- Architecture
8
- ===
9
- ![architecture](http://www.phenomenal-gem.com/assets/project/phenomenal_use_diagram.png)
7
+ ## Contributions
8
+ If you want to contribute, please:
9
+
10
+ * Fork the project.
11
+ * Make your feature addition or bug fix.
12
+ * Add tests for it. This is *very* important.
13
+ * Send a pull request on Github with a clear description.
14
+
15
+ Tests are executed with
16
+
17
+ rake
18
+
19
+ ## Copyright
20
+
21
+ Copyright (c) 2011-2012 Loïc Vigneron - Thibault Poncelet. See LICENSE for details.
data/lib/phenomenal.rb CHANGED
@@ -2,26 +2,28 @@
2
2
  module Phenomenal
3
3
  module Viewer end
4
4
  end
5
- #Relationships
6
- require_relative "./phenomenal/relationships/context_relationships.rb"
7
- require_relative "./phenomenal/relationships/feature_relationships.rb"
8
- require_relative "./phenomenal/relationships/relationships_store.rb"
9
- require_relative "./phenomenal/relationships/relationships_manager.rb"
10
- require_relative "./phenomenal/relationships/relationship.rb"
11
- require_relative "./phenomenal/relationships/requirement.rb"
12
- require_relative "./phenomenal/relationships/implication.rb"
13
- require_relative "./phenomenal/relationships/suggestion.rb"
5
+ #Error
6
+ require_relative "./phenomenal/error.rb"
14
7
 
15
- # Core
16
- require_relative "./phenomenal/adaptation.rb"
8
+ #Relationships
9
+ require_relative "./phenomenal/relationship/context_relationships.rb"
10
+ require_relative "./phenomenal/relationship/feature_relationships.rb"
11
+ require_relative "./phenomenal/relationship/relationship_store.rb"
12
+ require_relative "./phenomenal/relationship/relationship_manager.rb"
13
+ require_relative "./phenomenal/relationship/relationship.rb"
14
+ require_relative "./phenomenal/relationship/requirement.rb"
15
+ require_relative "./phenomenal/relationship/implication.rb"
16
+ require_relative "./phenomenal/relationship/suggestion.rb"
17
17
 
18
- require_relative "./phenomenal/context.rb"
19
- require_relative "./phenomenal/feature.rb"
20
- require_relative "./phenomenal/logger.rb"
18
+ # Context
19
+ require_relative "./phenomenal/context/adaptation.rb"
20
+ require_relative "./phenomenal/context/context_creation.rb"
21
+ require_relative "./phenomenal/context/context.rb"
22
+ require_relative "./phenomenal/context/feature.rb"
21
23
 
22
24
  #Manager
23
- require_relative "./phenomenal/manager/adaptations_management.rb"
24
- require_relative "./phenomenal/manager/contexts_management.rb"
25
+ require_relative "./phenomenal/manager/adaptation_management.rb"
26
+ require_relative "./phenomenal/manager/context_management.rb"
25
27
  require_relative "./phenomenal/manager/conflict_policies.rb"
26
28
  require_relative "./phenomenal/manager/manager.rb"
27
29
 
@@ -30,8 +32,6 @@ require_relative "./phenomenal/viewer/graphical.rb"
30
32
  require_relative "./phenomenal/viewer/textual.rb"
31
33
 
32
34
  # DSL
33
- require_relative "./phenomenal/relationships/dsl.rb"
35
+ require_relative "./phenomenal/relationship/dsl.rb"
34
36
  require_relative "./phenomenal/viewer/dsl.rb"
35
37
  require_relative "./phenomenal/dsl.rb"
36
-
37
-
@@ -32,23 +32,15 @@ class Phenomenal::Adaptation
32
32
  klass.define_singleton_method(method_name,implementation)
33
33
  end
34
34
  end
35
-
36
- # IMPROVE try to find a better implementation
35
+
37
36
  # Bind the implementation corresponding to this adaptation to 'instance' when
38
37
  # instance_adaptation or to implementation class when class method
39
38
  def bind(instance,*args,&block)
40
- if instance_adaptation?
41
- if implementation.class==Proc
42
- instance.instance_exec(*args,block,&implementation)
43
- else
44
- implementation.bind(instance).call(*args,&block)
45
- end
39
+ target = instance_adaptation? ? instance : klass
40
+ if implementation.is_a?(Proc)
41
+ bind_proc(target,*args,&block)
46
42
  else
47
- if implementation.class==Proc
48
- klass.instance_exec(*args,block,&implementation)
49
- else
50
- implementation.call(*args,&block)
51
- end
43
+ bind_method(target,*args,&block)
52
44
  end
53
45
  end
54
46
 
@@ -65,13 +57,50 @@ class Phenomenal::Adaptation
65
57
  end
66
58
 
67
59
  private
60
+ def bind_proc(target,*args,&block)
61
+ args.push(block)
62
+ target.instance_exec(*args,&implementation)
63
+ end
64
+
65
+ def bind_method(target,*args,&block)
66
+ if instance_adaptation?
67
+ implementation.bind(target).call(*args,&block)
68
+ else
69
+ implementation.call(*args,&block)
70
+ end
71
+ end
72
+
68
73
  def check_validity
69
- if klass.instance_methods.include?(method_name) && !instance_adaptation? ||
70
- !klass.instance_methods.include?(method_name) && instance_adaptation?
71
- Phenomenal::Logger.instance.error(
74
+ method = get_original_method
75
+ if method.arity != implementation.arity
76
+ raise(Phenomenal::Error,
77
+ "Illegal adaptation for context #{context},the adaptation "+
78
+ "have to keep the original method arity for method: " +
79
+ "#{klass.name}.#{method_name}: (#{method.arity} instead of " +
80
+ "#{implementation.arity})."
81
+ )
82
+ elsif klass.instance_methods.include?(method_name) ^ instance_adaptation?
83
+ raise(Phenomenal::Error,
72
84
  "Illegal adaptation for context: #{context}" +
73
85
  " for #{klass.name}.#{method_name}, type mismatch"
74
86
  )
75
87
  end
76
88
  end
89
+
90
+ def get_original_method
91
+ begin
92
+ if instance_adaptation?
93
+ method = klass.instance_method(method_name)
94
+ else
95
+ method = klass.method(method_name)
96
+ end
97
+ rescue NameError
98
+ raise(Phenomenal::Error,
99
+ "Illegal adaptation for context #{context},a method with "+
100
+ "name: #{method_name} should exist in class #{klass.name} to "+
101
+ "be adapted."
102
+ )
103
+ end
104
+ method
105
+ end
77
106
  end
@@ -1,82 +1,13 @@
1
1
  # Represents a first class context
2
2
  class Phenomenal::Context
3
+ extend Phenomenal::ContextCreation
3
4
  include Phenomenal::ContextRelationships
5
+
4
6
  @@total_activations = 0
5
7
 
6
8
  attr_accessor :activation_age, :activation_frequency, :adaptations,
7
9
  :activation_count, :parent, :forgotten
8
- attr_reader :manager,:name
9
-
10
- # Class metods
11
- class << self
12
- def create(context,*contexts,nested,closest_feature,&block)
13
- manager = Phenomenal::Manager.instance
14
- contexts.insert(0,context)
15
- if contexts.length==1
16
- context = find_or_create_simple_context(manager,context)
17
- else #Combined contexts
18
- context = find_or_create_combined_context(manager,contexts,nested,closest_feature)
19
- end
20
- context.add_adaptations(&block)
21
- context
22
- end
23
-
24
- private
25
- def find_or_create_simple_context(manager,context)
26
- if !manager.context_defined?(context)
27
- self.new(context)
28
- else
29
- context = manager.find_context(context)
30
- if !context.instance_of?(self)
31
- Phenomenal::Logger.instance.error(
32
- "Only #{self.name} can be used with this keyword."
33
- )
34
- end
35
- context
36
- end
37
- end
38
-
39
- def find_or_create_combined_context(manager,contexts,nested,closest_feature)
40
- if !manager.context_defined?(*contexts) # New combined context
41
- context = create_combined_context(manager,contexts,nested,closest_feature)
42
- else
43
- context = manager.find_context(*contexts)
44
- if !context.instance_of?(self)
45
- Phenomenal::Logger.instance.error(
46
- "Only #{self.name} can be used with this keyword."
47
- )
48
- end
49
- end
50
- context
51
- end
52
-
53
- def create_combined_context(manager,contexts,nested,closest_feature)
54
- context = self.new
55
- context.parent=closest_feature # Set parent
56
- instances = Array.new
57
- first = contexts.first
58
- contexts.each do |c|
59
- # Use the object instance if already available
60
- # otherwise create it
61
- if manager.context_defined?(c)
62
- c = manager.find_context(c)
63
- if !nested && c!=first && !c.instance_of?(self)
64
- Phenomenal::Logger.instance.error(
65
- "Only #{self.name} can be used with this keyword."
66
- )
67
- end
68
- else
69
- c = self.new(c)
70
- end
71
- instances.push(c)
72
- manager.shared_contexts[c]= Array.new if !manager.shared_contexts[c]
73
- manager.shared_contexts[c].push(context)
74
- end
75
- manager.combined_contexts[context] = instances
76
- context
77
- end
78
- end
79
-
10
+ attr_reader :manager,:name
80
11
  # Instance methods
81
12
  def initialize(name=nil, manager=nil)
82
13
  @manager = manager || Phenomenal::Manager.instance
@@ -95,7 +26,7 @@ class Phenomenal::Context
95
26
  # TODO handle relationships references
96
27
  def forget
97
28
  if active?
98
- Phenomenal::Logger.instance.error(
29
+ raise(Phenomenal::Error,
99
30
  "Active context cannot be forgotten"
100
31
  )
101
32
  else
@@ -108,40 +39,18 @@ class Phenomenal::Context
108
39
  # Return the adaptation just created
109
40
  def add_adaptation(klass, method_name,instance,umeth=nil, &implementation)
110
41
  if klass.nil? # Not defined class
111
- Phenomenal::Logger.instance.error(
42
+ raise(Phenomenal::Error,
112
43
  "The class to be adapted wasn't specified. Don't forget to use 'adaptations_for(Klass)' before adapting a method"
113
44
  )
114
45
  end
115
- if umeth
116
- implementation = umeth
117
- end
118
46
  if adaptations.find{ |i| i.concern?(klass,method_name,instance) }
119
- Phenomenal::Logger.instance.error(
47
+ raise(Phenomenal::Error,
120
48
  "Illegal duplicated adaptation in context: #{self} for " +
121
49
  "#{klass.name}:#{method_name}."
122
50
  )
123
51
  else
124
- if klass.instance_methods.include?(method_name) && instance
125
- method = klass.instance_method(method_name)
126
- elsif klass.methods.include?(method_name) && !instance
127
- method = klass.method(method_name)
128
- else
129
- Phenomenal::Logger.instance.error(
130
- "Illegal adaptation for context #{self},a method with "+
131
- "name: #{method_name} should exist in class #{klass.name} to "+
132
- "be adapted."
133
- )
134
- end
135
- if method.arity != implementation.arity
136
- Phenomenal::Logger.instance.error(
137
- "Illegal adaptation for context #{self},the adaptation "+
138
- "have to keep the original method arity for method: " +
139
- "#{klass.name}.#{method_name}: (#{method.arity} instead of " +
140
- "#{implementation.arity})."
141
- )
142
- end
143
52
  adaptation = Phenomenal::Adaptation.new(
144
- self, klass, method_name,instance, implementation
53
+ self, klass, method_name,instance, umeth||implementation
145
54
  )
146
55
  adaptations.push(adaptation)
147
56
  manager.register_adaptation(adaptation)
@@ -152,14 +61,14 @@ class Phenomenal::Context
152
61
  # Catch nested context calls and transform them in nested contexts creation
153
62
  def context(context,*contexts,&block)
154
63
  check_validity
155
- Phenomenal::Context.create(self,context,*contexts,true,self,&block)
64
+ Phenomenal::Context.create(true,self,self,context,*contexts,&block)
156
65
  end
157
66
  alias_method :phen_context,:context
158
67
 
159
68
  # Catch nested feature calls and transform them in nested contexts creation
160
69
  def feature(feature,*features, &block)
161
70
  check_validity
162
- Phenomenal::Feature.create(self,feature,*features,true,self,&block)
71
+ Phenomenal::Feature.create(true,self,self,feature,*features,&block)
163
72
  end
164
73
  alias_method :phen_feature,:feature
165
74
 
@@ -189,7 +98,7 @@ class Phenomenal::Context
189
98
  adaptation_index =
190
99
  adaptations.find_index{ |i| i.concern?(klass, method_name,instance) }
191
100
  if !adaptation_index
192
- Phenomenal::Logger.instance.error(
101
+ raise(Phenomenal::Error,
193
102
  "Illegal deleting of an inexistent adaptation in context: " +
194
103
  "#{self} for #{klass.name}.#{method_name})."
195
104
  )
@@ -210,7 +119,7 @@ class Phenomenal::Context
210
119
  end
211
120
 
212
121
  # Deactivate the context
213
- def deactivate(caller_context=nil)
122
+ def deactivate
214
123
  check_validity
215
124
  was_active = active?
216
125
  if self.activation_count>0
@@ -269,7 +178,7 @@ class Phenomenal::Context
269
178
  p=p.parent
270
179
  end
271
180
  if p.nil?
272
- manager.default_context
181
+ manager.default_feature
273
182
  else
274
183
  p
275
184
  end
@@ -279,8 +188,8 @@ class Phenomenal::Context
279
188
  def to_s
280
189
  if name
281
190
  name.to_s
282
- elsif self==manager.default_context
283
- "Default context"
191
+ elsif self==manager.default_feature
192
+ "Default feature"
284
193
  elsif manager.combined_contexts[self]
285
194
  "#{manager.combined_contexts[self].flatten}"
286
195
  else
@@ -291,7 +200,7 @@ class Phenomenal::Context
291
200
  private
292
201
  def check_validity
293
202
  if forgotten
294
- Phenomenal::Logger.instance.error(
203
+ raise(Phenomenal::Error,
295
204
  "Action not allowed anymore when context has been forgotten."
296
205
  )
297
206
  end
@@ -0,0 +1,68 @@
1
+ module Phenomenal::ContextCreation
2
+ def create(nested,closest_feature,context,*contexts,&block)
3
+ manager = Phenomenal::Manager.instance
4
+ contexts.insert(0,context)
5
+ if contexts.length==1
6
+ context = find_or_create_simple_context(manager,context)
7
+ else #Combined contexts
8
+ context = find_or_create_combined_context(manager,contexts,nested,closest_feature)
9
+ end
10
+ context.add_adaptations(&block)
11
+ context
12
+ end
13
+
14
+ private
15
+ def find_or_create_simple_context(manager,context)
16
+ if !manager.context_defined?(context)
17
+ self.new(context)
18
+ else
19
+ context = manager.find_context(context)
20
+ if !context.instance_of?(self)
21
+ raise(Phenomenal::Error,
22
+ "Only #{self.name} can be used with this keyword."
23
+ )
24
+ end
25
+ context
26
+ end
27
+ end
28
+
29
+ def find_or_create_combined_context(manager,contexts,nested,closest_feature)
30
+ if !manager.context_defined?(*contexts) # New combined context
31
+ context = create_combined_context(manager,contexts,nested,closest_feature)
32
+ else
33
+ context = manager.find_context(*contexts)
34
+ if !context.instance_of?(self)
35
+ raise(Phenomenal::Error,
36
+ "Only #{self.name} can be used with this keyword."
37
+ )
38
+ end
39
+ end
40
+ context
41
+ end
42
+
43
+ def create_combined_context(manager,contexts,nested,closest_feature)
44
+ context = self.new
45
+ context.parent=closest_feature # Set parent
46
+ instances = Array.new
47
+ first = contexts.first
48
+ contexts.each do |c|
49
+ # Use the object instance if already available
50
+ # otherwise create it
51
+ if manager.context_defined?(c)
52
+ c = manager.find_context(c)
53
+ if !nested && c!=first && !c.instance_of?(self)
54
+ raise(Phenomenal::Error,
55
+ "Only #{self.name} can be used with this keyword."
56
+ )
57
+ end
58
+ else
59
+ c = self.new(c)
60
+ end
61
+ instances.push(c)
62
+ manager.shared_contexts[c]= Array.new if !manager.shared_contexts[c]
63
+ manager.shared_contexts[c].push(context)
64
+ end
65
+ manager.combined_contexts[context] = instances
66
+ context
67
+ end
68
+ end
File without changes
@@ -5,13 +5,13 @@ module Phenomenal::DSL
5
5
  klass.class_eval do
6
6
  # Define context with adaptations
7
7
  def phen_context(context,*contexts,&block)
8
- Phenomenal::Context.create(context,*contexts,false,nil,&block)
8
+ Phenomenal::Context.create(false,nil,context,*contexts,&block)
9
9
  end
10
10
  Phenomenal::DSL.phen_alias(:context,klass)
11
11
 
12
12
  # Define context with adaptations
13
13
  def phen_feature(context,*contexts,&block)
14
- Phenomenal::Feature.create(context,*contexts,false,nil,&block)
14
+ Phenomenal::Feature.create(false,nil,context,*contexts,&block)
15
15
  end
16
16
  Phenomenal::DSL.phen_alias(:feature,klass)
17
17
 
@@ -48,21 +48,13 @@ module Phenomenal::DSL
48
48
 
49
49
  # Activate Context
50
50
  def phen_activate_context(context,*contexts)
51
- contexts=[] if contexts.nil?
52
- contexts.push(context)
53
- contexts.each do |c|
54
- Phenomenal::Manager.instance.find_context(c).activate
55
- end
51
+ Phenomenal::DSL.phen_switch_context_state(true,context,*contexts)
56
52
  end
57
53
  Phenomenal::DSL.phen_alias(:activate_context,klass)
58
54
 
59
55
  # Deactivate Context
60
56
  def phen_deactivate_context(context,*contexts)
61
- contexts=[] if contexts.nil?
62
- contexts.push(context)
63
- contexts.each do |c|
64
- Phenomenal::Manager.instance.find_context(c).deactivate
65
- end
57
+ Phenomenal::DSL.phen_switch_context_state(false,context,*contexts)
66
58
  end
67
59
  Phenomenal::DSL.phen_alias(:deactivate_context,klass)
68
60
 
@@ -76,9 +68,9 @@ module Phenomenal::DSL
76
68
  Phenomenal::Manager.instance.find_context(context).information
77
69
  end
78
70
 
79
- # Default Context
80
- def phen_default_context
81
- Phenomenal::Manager.instance.default_context
71
+ # Default Feature
72
+ def phen_default_feature
73
+ Phenomenal::Manager.instance.default_feature
82
74
  end
83
75
 
84
76
  # Defined context registered in the manager
@@ -104,9 +96,21 @@ module Phenomenal::DSL
104
96
  end
105
97
 
106
98
  private
99
+ def self.phen_switch_context_state(activate,context,*contexts)
100
+ contexts=[] if contexts.nil?
101
+ contexts.push(context)
102
+ contexts.each do |c|
103
+ if activate
104
+ Phenomenal::Manager.instance.find_context(c).activate
105
+ else
106
+ Phenomenal::Manager.instance.find_context(c).deactivate
107
+ end
108
+ end
109
+ end
110
+
107
111
  def self.phen_alias(method,klass)
108
112
  if Kernel.respond_to? method
109
- Phenomenal::Logger.instance.warn(
113
+ raise(Phenomenal::Error,
110
114
  "The Phenomenal DSL keyword #{method} wasn't defined, use"+
111
115
  " phen_#{method} instead"
112
116
  )
@@ -0,0 +1,2 @@
1
+ class Phenomenal::Error < StandardError
2
+ end
@@ -1,12 +1,12 @@
1
- module Phenomenal::AdaptationsManagement
1
+ module Phenomenal::AdaptationManagement
2
2
  attr_accessor :active_adaptations, :deployed_adaptations
3
3
 
4
4
  # Register a new adaptation for a registered context
5
5
  def register_adaptation(adaptation)
6
- default_adaptation = default_context.adaptations.find do|i|
6
+ default_adaptation = default_feature.adaptations.find do|i|
7
7
  i.concern?(adaptation.klass,adaptation.method_name,adaptation.instance_adaptation?)
8
8
  end
9
- if adaptation.context!=default_context && !default_adaptation
9
+ if adaptation.context!=default_feature && !default_adaptation
10
10
  save_default_adaptation(adaptation.klass, adaptation.method_name,adaptation.instance_adaptation?)
11
11
  end
12
12
  activate_adaptation(adaptation) if adaptation.context.active?
@@ -22,8 +22,8 @@ module Phenomenal::AdaptationsManagement
22
22
  calling_adaptation = find_adaptation(calling_stack)
23
23
  # IMPROVE Problems will appears if proceed called in a file where
24
24
  # adaptations are defined but not in one of them=> how to check?
25
- # IMPROVE Problems will also appears if two adaptations are defined on the same
26
- # line using the ';' some check needed at add_adaptation ?
25
+ # IMPROVE Problems will also appears if two adaptations are defined on the
26
+ # same line using the ';' some check needed at add_adaptation ?
27
27
  adaptations_stack = sorted_adaptations_for(calling_adaptation.klass,
28
28
  calling_adaptation.method_name,calling_adaptation.instance_adaptation?)
29
29
  calling_adaptation_index = adaptations_stack.find_index(calling_adaptation)
@@ -54,7 +54,7 @@ module Phenomenal::AdaptationsManagement
54
54
  # conflict policy
55
55
  def redeploy_adaptation(klass, method_name,instance)
56
56
  to_deploy = resolve_conflict(klass,method_name,instance)
57
- # Do nothing when to_deploy==nil to break at default context deactivation
57
+ # Do nothing when to_deploy==nil to break at default feature deactivation
58
58
  if !deployed_adaptations.include?(to_deploy) && to_deploy!=nil
59
59
  deploy_adaptation(to_deploy)
60
60
  end
@@ -79,7 +79,7 @@ module Phenomenal::AdaptationsManagement
79
79
  else
80
80
  method = klass.method(method_name)
81
81
  end
82
- adaptation = default_context.add_adaptation(klass,method_name,instance,method)
82
+ adaptation = default_feature.add_adaptation(klass,method_name,instance,method)
83
83
  end
84
84
 
85
85
  # Return the adaptation that math the calling_stack, on the basis of the
@@ -96,7 +96,7 @@ module Phenomenal::AdaptationsManagement
96
96
  end
97
97
 
98
98
  if match==nil
99
- Phenomenal::Logger.instance.error(
99
+ raise(Phenomenal::Error,
100
100
  "Inexistant adaptation for proceed call at #{call_file}:#{call_line}"
101
101
  )
102
102
  end
@@ -114,7 +114,7 @@ module Phenomenal::AdaptationsManagement
114
114
 
115
115
  # Gets the relevants adaptations for a file in DESC order of line number
116
116
  def relevant_adaptations(call_file)
117
- relevants = active_adaptations.select{ |i| i.src_file == call_file }
117
+ relevants = active_adaptations.find_all{ |i| i.src_file == call_file }
118
118
  # Sort by src_line DESC order
119
119
  relevants.sort!{ |a,b| b.src_line <=> a.src_line }
120
120
  end
@@ -128,7 +128,7 @@ module Phenomenal::AdaptationsManagement
128
128
  # conflict policy
129
129
  def sorted_adaptations_for(klass,method_name,instance)
130
130
  relevants =
131
- active_adaptations.find_all { |i| i.concern?(klass, method_name,instance) }
131
+ active_adaptations.find_all{ |i| i.concern?(klass, method_name,instance) }
132
132
  relevants.sort!{|a,b| conflict_policy(a.context,b.context)}
133
133
  end
134
134
  end
@@ -2,13 +2,14 @@
2
2
  module Phenomenal::ConflictPolicies
3
3
  # Prefer not default adaptation, error if two not default ones
4
4
  def no_resolution_conflict_policy(context1,context2)
5
- if context1==default_context()
5
+ if context1==default_feature()
6
6
  1
7
- elsif context2==default_context()
7
+ elsif context2==default_feature()
8
8
  -1
9
9
  else #Fail if two non default adaptations
10
- Phenomenal::Logger.instance.error(
11
- "Illegal duplicate adapation between contexts #{context1} and #{context2} "
10
+ raise(Phenomenal::Error,
11
+ "Illegal duplicate adapation between contexts #{context1}"+
12
+ "and #{context2} "
12
13
  )
13
14
  end
14
15
  end
@@ -1,15 +1,15 @@
1
- module Phenomenal::ContextsManagement
2
- attr_accessor :contexts, :default_context, :combined_contexts, :shared_contexts
1
+ module Phenomenal::ContextManagement
2
+ attr_accessor :contexts, :default_feature, :combined_contexts,:shared_contexts
3
3
 
4
4
  # Register a new context
5
5
  def register_context(context)
6
6
  if context_defined?(context)
7
- Phenomenal::Logger.instance.error(
7
+ raise(Phenomenal::Error,
8
8
  "The context #{context} is already registered"
9
9
  )
10
10
  end
11
11
  if context.name && context_defined?(context.name)
12
- Phenomenal::Logger.instance.error(
12
+ raise(Phenomenal::Error,
13
13
  "There is already a context with name: #{context.name}." +
14
14
  " If you want to have named context it has to be a globally unique name"
15
15
  )
@@ -22,15 +22,15 @@ module Phenomenal::ContextsManagement
22
22
 
23
23
  # Unregister a context (forget)
24
24
  def unregister_context(context)
25
- if context==default_context && contexts.size>1
26
- Phenomenal::Logger.instance.error(
27
- "Default context can only be forgotten when alone"
25
+ if context==default_feature && contexts.size>1
26
+ raise(Phenomenal::Error,
27
+ "Default feature can only be forgotten when alone"
28
28
  )
29
29
  else
30
30
  contexts.delete(context)
31
31
  unregister_combined_contexts(context)
32
- # Restore default context
33
- init_default() if context==default_context
32
+ # Restore default feature
33
+ init_default() if context==default_feature
34
34
  end
35
35
  end
36
36
 
@@ -75,8 +75,9 @@ module Phenomenal::ContextsManagement
75
75
  end
76
76
  end
77
77
 
78
- # Check wether context 'context' (or combined context) exist in the context manager
79
- # Context can be either the context name or the context instance itself
78
+ # Check wether context 'context' (or combined context) exist in the context
79
+ # manager. Context can be either the context name or the context instance
80
+ # itself.
80
81
  # Return the context if found, or nil otherwise
81
82
  def context_defined?(context, *contexts)
82
83
  c=nil
@@ -134,7 +135,7 @@ module Phenomenal::ContextsManagement
134
135
  if find
135
136
  find
136
137
  else
137
- Phenomenal::Logger.instance.error(
138
+ raise(Phenomenal::Error,
138
139
  "Unknown context #{context}"
139
140
  )
140
141
  end
@@ -157,13 +158,13 @@ module Phenomenal::ContextsManagement
157
158
  end
158
159
  end
159
160
  if list.length==0
160
- Phenomenal::Logger.instance.error(
161
+ raise(Phenomenal::Error,
161
162
  "Unknown combined context #{contexts}"
162
163
  )
163
164
  elsif list.length==1
164
165
  return list.first
165
166
  else
166
- Phenomenal::Logger.instance.error(
167
+ raise(Phenomenal::Error,
167
168
  "Multiple definition of combined context #{contexts}"
168
169
  )
169
170
  end
@@ -3,17 +3,17 @@ require 'singleton'
3
3
  class Phenomenal::Manager
4
4
  include Singleton
5
5
  include Phenomenal::ConflictPolicies
6
- include Phenomenal::AdaptationsManagement
7
- include Phenomenal::ContextsManagement
6
+ include Phenomenal::AdaptationManagement
7
+ include Phenomenal::ContextManagement
8
8
 
9
9
  attr_accessor :rmanager
10
10
 
11
11
  # PRIVATE METHODS
12
12
  private
13
- # Set the default context
13
+ # Set the default feature
14
14
  def init_default
15
- self.default_context= Phenomenal::Feature.new(nil,self)
16
- self.default_context.activate
15
+ self.default_feature = Phenomenal::Feature.new(nil,self)
16
+ self.default_feature.activate
17
17
  end
18
18
 
19
19
  # Private constructor because this is a singleton object
@@ -23,7 +23,7 @@ class Phenomenal::Manager
23
23
  @active_adaptations = Array.new
24
24
  @combined_contexts = Hash.new
25
25
  @shared_contexts = Hash.new
26
- @rmanager = Phenomenal::RelationshipsManager.instance
26
+ @rmanager = Phenomenal::RelationshipManager.instance
27
27
  init_default()
28
28
  end
29
29
  end
@@ -4,19 +4,19 @@ module Phenomenal::DSL
4
4
  klass.class_eval do
5
5
  # Requirements
6
6
  def phen_requirements_for(source,targets)
7
- Phenomenal::Manager.instance.default_context.requirements_for(source,targets)
7
+ Phenomenal::Manager.instance.default_feature.requirements_for(source,targets)
8
8
  end
9
9
  Phenomenal::DSL.phen_alias(:requirements_for,klass)
10
10
 
11
11
  # Implications
12
12
  def phen_implications_for(source,targets)
13
- Phenomenal::Manager.instance.default_context.implications_for(source,targets)
13
+ Phenomenal::Manager.instance.default_feature.implications_for(source,targets)
14
14
  end
15
15
  Phenomenal::DSL.phen_alias(:implications_for,klass)
16
16
 
17
17
  # Suggestions
18
18
  def phen_suggestions_for(source,targets)
19
- Phenomenal::Manager.instance.default_context.suggestions_for(source,targets)
19
+ Phenomenal::Manager.instance.default_feature.suggestions_for(source,targets)
20
20
  end
21
21
  Phenomenal::DSL.phen_alias(:suggestions_for,klass)
22
22
 
@@ -27,7 +27,7 @@ module Phenomenal::FeatureRelationships
27
27
  def add_relationship(source,targets,type)
28
28
  targets[:on]=Array.new.push(targets[:on]) if !targets[:on].is_a?(Array)
29
29
  if targets[:on].nil?
30
- Phenomenal::Logger.instance.error(
30
+ raise(Phenomenal::Error,
31
31
  "Invalid relationship, missing target context"
32
32
  )
33
33
  end
@@ -1,6 +1,6 @@
1
1
  require 'singleton'
2
2
  # This class manage the different relatiohsips in the system between contexts
3
- class Phenomenal::RelationshipsManager
3
+ class Phenomenal::RelationshipManager
4
4
  include Singleton
5
5
 
6
6
  attr_accessor :relationships
@@ -41,10 +41,8 @@ class Phenomenal::RelationshipsManager
41
41
  relationships.add(relationship)
42
42
  end
43
43
  rescue Phenomenal::Error => m
44
+ # Unable to activate the feature #{feature} \n #{m}
44
45
  feature.deactivate
45
- Phenomenal::Logger.instance.debug(
46
- "Unable to activate the feature #{feature} \n #{m}"
47
- )
48
46
  end
49
47
  end
50
48
 
@@ -58,6 +56,6 @@ class Phenomenal::RelationshipsManager
58
56
  end
59
57
 
60
58
  def initialize
61
- @relationships = Phenomenal::RelationshipsStore.new
59
+ @relationships = Phenomenal::RelationshipStore.new
62
60
  end
63
61
  end
@@ -1,6 +1,6 @@
1
1
  # Define the class where all the actives relationships are
2
2
  # efficiently stored
3
- class Phenomenal::RelationshipsStore
3
+ class Phenomenal::RelationshipStore
4
4
  attr_accessor :sources, :targets
5
5
 
6
6
  def initialize
@@ -23,7 +23,7 @@ class Phenomenal::Requirement < Phenomenal::Relationship
23
23
  private
24
24
  def check_requirement
25
25
  if source.active? && !target.active?
26
- Phenomenal::Logger.instance.error(
26
+ raise(Phenomenal::Error,
27
27
  "Requirement of #{target} for #{source} is not satisfied"
28
28
  )
29
29
  end
@@ -1,3 +1,3 @@
1
1
  module Phenomenal
2
- VERSION = "1.1.1"
2
+ VERSION = "1.2.1"
3
3
  end
@@ -13,14 +13,14 @@ class Phenomenal::Viewer::Graphical
13
13
 
14
14
  def initialize(destination_file)
15
15
  if !@@graphviz
16
- Phenomenal::Logger.instance.error(
16
+ raise(Phenomenal::Error,
17
17
  "The 'ruby-graphviz' gem isn't available. Please install it to generate graphic visualisations\n"+
18
18
  " Otherwise use the text version: phen_textual_view"
19
19
  )
20
20
  end
21
21
 
22
22
  @manager=Phenomenal::Manager.instance
23
- @rmanager=Phenomenal::RelationshipsManager.instance
23
+ @rmanager=Phenomenal::RelationshipManager.instance
24
24
  @destination_file=destination_file
25
25
  @main_graph=nil
26
26
  @feature_nodes={}
@@ -82,7 +82,7 @@ class Phenomenal::Viewer::Graphical
82
82
  def graph_container(relationship)
83
83
  s_parent_feature=relationship.source.parent_feature
84
84
  t_parent_feature=relationship.target.parent_feature
85
- if s_parent_feature==t_parent_feature && s_parent_feature!=manager.default_context
85
+ if s_parent_feature==t_parent_feature && s_parent_feature!=manager.default_feature
86
86
  feature_nodes[relationship.source.parent_feature]
87
87
  else
88
88
  main_graph
@@ -91,7 +91,7 @@ class Phenomenal::Viewer::Graphical
91
91
 
92
92
  def set_edge(context,edge,relationship)
93
93
  # Define edge label
94
- if context!=manager.default_context
94
+ if context!=manager.default_feature
95
95
  edge[:label]=context.to_s
96
96
  end
97
97
  # Define edge color
@@ -106,15 +106,15 @@ class Phenomenal::Viewer::Graphical
106
106
  elsif relationship.is_a?(Phenomenal::Requirement)
107
107
  edge[:arrowhead]="inv"
108
108
  else
109
- Phenomenal::Logger.instance.error(
109
+ raise(Phenomenal::Error,
110
110
  "This relationship hasn't been defined yet in the graphical viewer"
111
111
  )
112
112
  end
113
113
  end
114
114
 
115
115
  def add_node_for(context)
116
- # The default context is the first to be added to the main graph
117
- if feature_nodes[context.parent_feature].nil? && context==manager.default_context
116
+ # The default feature is the first to be added to the main graph
117
+ if feature_nodes[context.parent_feature].nil? && context==manager.default_feature
118
118
  current_graph=main_graph
119
119
  # Always add the parent_feature before the contexts inside
120
120
  elsif feature_nodes[context.parent_feature].nil?
@@ -4,7 +4,7 @@ class Phenomenal::Viewer::Textual
4
4
 
5
5
  def initialize()
6
6
  @manager=Phenomenal::Manager.instance
7
- @rmanager=Phenomenal::RelationshipsManager.instance
7
+ @rmanager=Phenomenal::RelationshipManager.instance
8
8
  end
9
9
 
10
10
  def generate()
data/spec/context_spec.rb CHANGED
@@ -40,8 +40,8 @@ describe Phenomenal::Context do
40
40
  force_forget_context(context)
41
41
  end
42
42
 
43
- it "should be anonymous if it is the default context" do
44
- Phenomenal::Manager.instance.default_context.name.should be_nil
43
+ it "should be anonymous if it is the default feature" do
44
+ Phenomenal::Manager.instance.default_feature.name.should be_nil
45
45
  end
46
46
  end
47
47
 
@@ -65,11 +65,11 @@ describe Phenomenal::Context do
65
65
  end
66
66
 
67
67
  describe "#add_adaptation" do
68
- it "should save the default behavior in the default context" do
68
+ it "should save the default behavior in the default feature" do
69
69
  @context.add_adaptation(TestString, :size,true) do
70
70
  42
71
71
  end
72
- a = phen_default_context.adaptations.find{|a| a.concern?(TestString,:size,true)}
72
+ a = phen_default_feature.adaptations.find{|a| a.concern?(TestString,:size,true)}
73
73
  a.bind(TestString.new("1234")).should==4
74
74
  end
75
75
 
@@ -261,8 +261,8 @@ describe Phenomenal::Context do
261
261
  @context.anonymous?.should be_false
262
262
  end
263
263
 
264
- it "should be true for the default context" do
265
- Phenomenal::Manager.instance.default_context.anonymous?.should be_true
264
+ it "should be true for the default feature" do
265
+ Phenomenal::Manager.instance.default_feature.anonymous?.should be_true
266
266
  end
267
267
 
268
268
  it "should be true when the context has no name" do
@@ -278,7 +278,7 @@ describe Phenomenal::Context do
278
278
  end
279
279
  it "should have a matching :name field" do
280
280
  @context.information[:name].should==:test
281
- default = Phenomenal::Manager.instance.default_context
281
+ default = Phenomenal::Manager.instance.default_feature
282
282
  default.information[:name].should be_nil
283
283
  end
284
284
  it "should have a matching :adaptation field" do
@@ -314,7 +314,7 @@ describe Phenomenal::Context do
314
314
  describe "#parent_feature" do
315
315
  it "should be the default feature parent for simple contexts" do
316
316
  c = context :b
317
- c.parent_feature.should be Phenomenal::Manager.instance.default_context
317
+ c.parent_feature.should be Phenomenal::Manager.instance.default_feature
318
318
  c.forget
319
319
  end
320
320
 
data/spec/dsl_spec.rb CHANGED
@@ -106,9 +106,9 @@ describe Phenomenal::DSL do
106
106
  end
107
107
  end
108
108
 
109
- describe "#phen_default_context" do
109
+ describe "#phen_default_feature" do
110
110
  it "should exist in Kernel" do
111
- Kernel.should respond_to :phen_default_context
111
+ Kernel.should respond_to :phen_default_feature
112
112
  end
113
113
  end
114
114
 
@@ -40,7 +40,6 @@ describe "Simple adaptations" do
40
40
  @klass_inst_var+1
41
41
  end
42
42
  end
43
-
44
43
  end
45
44
 
46
45
  after :each do
@@ -108,12 +107,14 @@ describe "Simple adaptations" do
108
107
 
109
108
  it "sould be possible to access class variables" do
110
109
  TestClass.klass_var_access.should==1
111
- activate_context(:test_2)
112
-
110
+
113
111
  pending "Adaptations doesn't have access to class variables, seems to be a Ruby bug"
112
+ activate_context(:test_2)
113
+ t.instance_klass_var_access.should==2
114
114
  TestClass.klass_var_access.should==2
115
115
 
116
116
  deactivate_context(:test_2)
117
+ t.instance_klass_var_access.should==1
117
118
  TestClass.klass_var_access.should==1
118
119
  end
119
120
 
@@ -34,14 +34,14 @@ describe "Conflict policies" do
34
34
  it "should set the age of the context such that the most recent one has the smaller age" do
35
35
  phen_change_conflict_policy { |a,b| age_conflict_policy(a,b) }
36
36
 
37
- phen_context_active?(phen_default_context).should be_true
37
+ phen_context_active?(phen_default_feature).should be_true
38
38
  phen_context_active?(:screening).should be_false
39
39
  phen_context_active?(:quiet).should be_false
40
40
 
41
41
  phen_activate_context(:screening)
42
42
 
43
43
  (phen_context_information(:screening)[:age] <
44
- phen_context_information(phen_default_context)[:age]).should be_true,
44
+ phen_context_information(phen_default_feature)[:age]).should be_true,
45
45
  "screening context has been activated more recently than default"
46
46
 
47
47
  phen_activate_context(:quiet)
@@ -49,7 +49,7 @@ describe "Conflict policies" do
49
49
  phen_context_information(:screening)[:age]).should be_true
50
50
  "quiet context has been activated more recently than screening"
51
51
  (phen_context_information(:screening)[:age] <
52
- phen_context_information(phen_default_context)[:age]).should be_true,
52
+ phen_context_information(phen_default_feature)[:age]).should be_true,
53
53
  "quiet context has still been activated more recently than default"
54
54
  phen_deactivate_context(:quiet)
55
55
  phen_deactivate_context(:screening)
@@ -15,8 +15,8 @@ describe "Relationships" do
15
15
  @context_names.each do |name|
16
16
  force_forget_context(name)
17
17
  end
18
- @manager.default_context.deactivate
19
- @manager.default_context.forget
18
+ @manager.default_feature.deactivate
19
+ @manager.default_feature.forget
20
20
  end
21
21
 
22
22
  describe Phenomenal::Feature do
@@ -75,10 +75,10 @@ describe "Relationships" do
75
75
  phen_context_active?(:feature).should be_false
76
76
  end
77
77
 
78
- it "should be possible to add requirements to the default context" do
78
+ it "should be possible to add requirements to the default feature" do
79
79
  requirements_for :a, :on=>[:b,:c,:d]
80
80
  requirements_for :a, :on=>:e
81
- @manager.default_context.relationships.should have(4).items
81
+ @manager.default_feature.relationships.should have(4).items
82
82
  end
83
83
 
84
84
  it "should be possible to put requirements in the nested contexts" do
@@ -152,7 +152,7 @@ describe "Relationships" do
152
152
  describe "Suggestions" do
153
153
  it "should be working on the default feature" do
154
154
  suggestions_for :a,:on=>:b
155
- @manager.default_context.relationships.should have(1).items
155
+ @manager.default_feature.relationships.should have(1).items
156
156
  context(:a).active?.should be_false
157
157
  context(:b).active?.should be_false
158
158
  expect {activate_context :a}.to_not raise_error
@@ -168,7 +168,7 @@ describe "Relationships" do
168
168
  context(:b).active?.should be_false
169
169
  expect {activate_context :a}.to_not raise_error
170
170
  suggestions_for :a,:on=>:b
171
- @manager.default_context.relationships.should have(1).items
171
+ @manager.default_feature.relationships.should have(1).items
172
172
  context(:a).active?.should be_true
173
173
  context(:b).active?.should be_true
174
174
  expect {deactivate_context :a}.to_not raise_error
data/spec/manager_spec.rb CHANGED
@@ -34,13 +34,13 @@ describe Phenomenal::Manager do
34
34
  @manager.contexts[context].should be_nil
35
35
  end
36
36
 
37
- it "should allow to forget default context only when it is the only defined context" do
37
+ it "should allow to forget default feature only when it is the only defined context" do
38
38
  @manager.contexts.size.should==4
39
- expect{@manager.unregister_context(@manager.default_context)}.to raise_error Phenomenal::Error
39
+ expect{@manager.unregister_context(@manager.default_feature)}.to raise_error Phenomenal::Error
40
40
  force_forget_context(@context)
41
41
  force_forget_context(@context2)
42
42
  @manager.contexts.size.should==1
43
- expect{@manager.unregister_context(@manager.default_context)}.to_not raise_error
43
+ expect{@manager.unregister_context(@manager.default_feature)}.to_not raise_error
44
44
  @context = Phenomenal::Context.new(:test)
45
45
  @context2 = Phenomenal::Context.new(:test2)
46
46
  end
@@ -1,4 +1,4 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Phenomenal::RelationshipsManager do
3
+ describe Phenomenal::RelationshipManager do
4
4
  end
@@ -1,13 +1,13 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Phenomenal::RelationshipsStore do
3
+ describe Phenomenal::RelationshipStore do
4
4
  before :each do
5
5
  @source = context :source
6
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
7
+ @relationship = Phenomenal::Relationship.new(:source,:target,phen_default_feature)
8
+ @relationship2 = Phenomenal::Relationship.new(:source2,:target2,phen_default_feature)
9
+ @relationship12 = Phenomenal::Relationship.new(:source,:target2,phen_default_feature)
10
+ @store = Phenomenal::RelationshipStore.new
11
11
  end
12
12
 
13
13
  after :each do
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: phenomenal
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.1.1
5
+ version: 1.2.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Loic Vigneron - Thibault Poncelet
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-05-09 00:00:00 Z
13
+ date: 2012-05-31 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
@@ -32,28 +32,29 @@ extensions: []
32
32
  extra_rdoc_files: []
33
33
 
34
34
  files:
35
- - lib/phenomenal/feature.rb
35
+ - lib/phenomenal/error.rb
36
36
  - lib/phenomenal/viewer/graphical.rb
37
37
  - lib/phenomenal/viewer/textual.rb
38
38
  - lib/phenomenal/viewer/dsl.rb
39
39
  - lib/phenomenal/dsl.rb
40
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
50
- - lib/phenomenal/context.rb
41
+ - lib/phenomenal/relationship/implication.rb
42
+ - lib/phenomenal/relationship/relationship.rb
43
+ - lib/phenomenal/relationship/relationship_store.rb
44
+ - lib/phenomenal/relationship/requirement.rb
45
+ - lib/phenomenal/relationship/dsl.rb
46
+ - lib/phenomenal/relationship/relationship_manager.rb
47
+ - lib/phenomenal/relationship/context_relationships.rb
48
+ - lib/phenomenal/relationship/suggestion.rb
49
+ - lib/phenomenal/relationship/feature_relationships.rb
51
50
  - lib/phenomenal/manager/manager.rb
51
+ - lib/phenomenal/manager/adaptation_management.rb
52
52
  - lib/phenomenal/manager/conflict_policies.rb
53
- - lib/phenomenal/manager/adaptations_management.rb
54
- - lib/phenomenal/manager/contexts_management.rb
55
- - lib/phenomenal/logger.rb
56
- - lib/phenomenal/adaptation.rb
53
+ - lib/phenomenal/manager/context_management.rb
54
+ - lib/phenomenal/context/feature.rb
55
+ - lib/phenomenal/context/context.rb
56
+ - lib/phenomenal/context/context_creation.rb
57
+ - lib/phenomenal/context/adaptation.rb
57
58
  - lib/phenomenal.rb
58
59
  - LICENSE
59
60
  - Rakefile
@@ -1,34 +0,0 @@
1
- require 'logger'
2
- require 'singleton'
3
-
4
- class Phenomenal::Error < StandardError; end
5
-
6
- class Phenomenal::Logger
7
- attr_accessor :logger
8
- include Singleton
9
-
10
- def info(msg)
11
- logger.info(msg)
12
- end
13
-
14
- def debug(msg)
15
- logger.debug(msg)
16
- end
17
-
18
- def warn(msg)
19
- logger.warn(msg)
20
- end
21
-
22
- def error(msg)
23
- raise(Phenomenal::Error, msg)
24
- end
25
-
26
- private
27
- def initialize
28
- self.logger = Logger.new(STDOUT)
29
- self.logger.level = Logger::DEBUG
30
- self.logger.datetime_format = "%Y-%m-%d - %H:%M:%S"
31
- end
32
- end
33
-
34
-