cascading-configuration-setting 1.1.5 → 1.1.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,18 +7,18 @@ end
7
7
 
8
8
  module CascadingConfiguration
9
9
  module Setting
10
- module Accessors
10
+ module ConfigurationAccessors
11
11
  end
12
- module ClassInstance
12
+ module Interface
13
13
  end
14
14
  module ObjectInstance
15
15
  end
16
- module ModuleInstance
16
+ module ModuleInclusionExtensionSupport
17
17
  end
18
18
  end
19
19
  end
20
20
 
21
21
  require_relative 'cascading-configuration-setting/CascadingConfiguration/Setting.rb'
22
- require_relative 'cascading-configuration-setting/CascadingConfiguration/Setting/Accessors.rb'
23
- require_relative 'cascading-configuration-setting/CascadingConfiguration/Setting/ClassInstance.rb'
24
- require_relative 'cascading-configuration-setting/CascadingConfiguration/Setting/ModuleInstance.rb'
22
+ require_relative 'cascading-configuration-setting/CascadingConfiguration/Setting/ConfigurationAccessors.rb'
23
+ require_relative 'cascading-configuration-setting/CascadingConfiguration/Setting/Interface.rb'
24
+ require_relative 'cascading-configuration-setting/CascadingConfiguration/Setting/ModuleInclusionExtensionSupport.rb'
@@ -5,6 +5,25 @@ module CascadingConfiguration::Setting
5
5
 
6
6
  include CascadingConfiguration::Variable
7
7
 
8
+ ##########################
9
+ # self.append_features #
10
+ ##########################
11
+
12
+ def self.append_features( class_or_module )
13
+ CascadingConfiguration::Variable.define_accessor_instance_support( class_or_module )
14
+ CascadingConfiguration::Variable.define_accessor_module_support( class_or_module )
15
+ super
16
+ end
17
+
18
+ ########################
19
+ # self.extend_object #
20
+ ########################
21
+
22
+ def self.extend_object( class_or_module )
23
+ CascadingConfiguration::Variable.define_accessor_module_support( class_or_module )
24
+ super
25
+ end
26
+
8
27
  ###################
9
28
  # self.included #
10
29
  ###################
@@ -12,11 +31,22 @@ module CascadingConfiguration::Setting
12
31
  def self.included( class_or_module )
13
32
  module_self = self
14
33
  class_or_module.instance_eval do
15
- extend module_self
16
- extend module_self::ClassInstance
17
- extend module_self::Accessors
18
- # module support
19
- extend CascadingConfiguration::Setting::ModuleInstance unless is_a?( Class )
34
+ extend module_self
35
+ extend module_self::Interface
36
+ extend module_self::ConfigurationAccessors
37
+ extend module_self::ModuleInclusionExtensionSupport unless is_a?( Class )
38
+ end
39
+ end
40
+
41
+ ###################
42
+ # self.extended #
43
+ ###################
44
+
45
+ def self.extended( class_or_module )
46
+ module_self = self
47
+ class_or_module.instance_eval do
48
+ extend module_self::Interface
49
+ extend module_self::ConfigurationAccessors
20
50
  end
21
51
  end
22
52
 
@@ -28,10 +58,9 @@ module CascadingConfiguration::Setting
28
58
 
29
59
  configuration = nil
30
60
 
31
- klass = ( is_a?( Module ) ? self : self.class )
32
- configuration_variable = klass::AccessorSupportModule.cascading_variable_name( configuration_name )
61
+ configuration_variable = accessor_module_support.cascading_variable_name( configuration_name )
33
62
 
34
- ancestors_to_Object.each do |this_ancestor|
63
+ ancestor_configuration_chain.each do |this_ancestor|
35
64
  if this_ancestor.instance_variable_defined?( configuration_variable )
36
65
  # if our instance defines this configuration, use its setting
37
66
  configuration = this_ancestor.instance_variable_get( configuration_variable )
@@ -0,0 +1,98 @@
1
+
2
+ module CascadingConfiguration::Setting::ConfigurationAccessors
3
+
4
+ extend CascadingConfiguration::InternalModuleStub
5
+
6
+ #############################
7
+ # define_cascading_setter #
8
+ #############################
9
+
10
+ def define_cascading_setter( configuration_name )
11
+ configuration_setter_name = ( configuration_name.to_s + '=' ).to_s
12
+ [ accessor_instance_support, accessor_module_support ].compact.each do |accessor_support_module|
13
+ accessor_support_module.module_eval do
14
+ define_method( configuration_setter_name ) do |value|
15
+ # configuration setter returns setting variable (variable from self), which is now the ID of value
16
+ return instance_variable_set( accessor_support_module.cascading_variable_name( configuration_name ), value )
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ #############################
23
+ # define_cascading_getter #
24
+ #############################
25
+
26
+ def define_cascading_getter( configuration_name )
27
+ configuration_getter_name = configuration_name
28
+ module_self = self
29
+ [ accessor_instance_support, accessor_module_support ].compact.each do |accessor_support_module|
30
+ accessor_support_module.module_eval do
31
+ define_method( configuration_getter_name ) do
32
+ # configuration getter returns current setting value (taken from first superclass with setting)
33
+ # that means first variable that has been set
34
+ return get_configuration_searching_upward( configuration_name )
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ #######################################
41
+ # define_class_configuration_setter #
42
+ #######################################
43
+
44
+ def define_class_configuration_setter( configuration_name )
45
+ configuration_setter_name = ( configuration_name.to_s + '=' ).to_s
46
+ accessor_module_support.module_eval do
47
+ define_method( configuration_setter_name ) do |value|
48
+ # configuration setter returns setting variable (variable from self), which is now the ID of value
49
+ return instance_variable_set( accessor_support_module.cascading_variable_name( configuration_name ), value )
50
+ end
51
+ end
52
+ end
53
+
54
+ #######################################
55
+ # define_class_configuration_getter #
56
+ #######################################
57
+
58
+ def define_class_configuration_getter( configuration_name )
59
+ configuration_getter_name = configuration_name
60
+ accessor_module_support.module_eval do
61
+ define_method( configuration_getter_name ) do
62
+ # configuration getter returns current setting value (taken from first superclass with setting)
63
+ # that means first variable that has been set
64
+ return get_configuration_searching_upward( configuration_name )
65
+ end
66
+ end
67
+ end
68
+
69
+ #######################################
70
+ # define_local_configuration_setter #
71
+ #######################################
72
+
73
+ def define_local_configuration_setter( configuration_name )
74
+ configuration_setter_name = ( configuration_name.to_s + '=' ).to_s
75
+ accessor_instance_support.module_eval do
76
+ define_method( configuration_setter_name ) do |value|
77
+ # configuration setter returns setting variable (variable from self), which is now the ID of value
78
+ return instance_variable_set( accessor_support_module.cascading_variable_name( configuration_name ), value )
79
+ end
80
+ end
81
+ end
82
+
83
+ #######################################
84
+ # define_local_configuration_getter #
85
+ #######################################
86
+
87
+ def define_local_configuration_getter( configuration_name )
88
+ configuration_getter_name = configuration_name
89
+ accessor_instance_support.module_eval do
90
+ define_method( configuration_getter_name ) do
91
+ # configuration getter returns current setting value (taken from first superclass with setting)
92
+ # that means first variable that has been set
93
+ return get_configuration_searching_upward( configuration_name )
94
+ end
95
+ end
96
+ end
97
+
98
+ end
@@ -0,0 +1,51 @@
1
+
2
+ module CascadingConfiguration::Setting::Interface
3
+
4
+ extend CascadingConfiguration::InternalModuleStub
5
+
6
+ ########################
7
+ # attr_configuration #
8
+ ########################
9
+
10
+ # defines configuration in class or module
11
+ # configuration cascades downward to instance including all classes or modules in-between
12
+ def attr_configuration( *property_names )
13
+ property_names.each do |this_property_name|
14
+ # define configuration setter
15
+ define_cascading_setter( this_property_name )
16
+ # define configuration getter
17
+ define_cascading_getter( this_property_name )
18
+ end
19
+ end
20
+
21
+ ##############################
22
+ # attr_class_configuration #
23
+ ##############################
24
+
25
+ # defines configuration in class or module
26
+ # configuration cascades downward to last class or module
27
+ def attr_class_configuration( *property_names )
28
+ property_names.each do |this_property_name|
29
+ # define configuration setter
30
+ define_class_configuration_setter( this_property_name )
31
+ # define configuration getter
32
+ define_class_configuration_getter( this_property_name )
33
+ end
34
+ end
35
+
36
+ ##############################
37
+ # attr_local_configuration #
38
+ ##############################
39
+
40
+ # defines configuration in present class or module context
41
+ # configuration does not cascade
42
+ def attr_local_configuration( *property_names )
43
+ property_names.each do |this_property_name|
44
+ # define configuration setter
45
+ define_local_configuration_setter( this_property_name )
46
+ # define configuration getter
47
+ define_local_configuration_getter( this_property_name )
48
+ end
49
+ end
50
+
51
+ end
@@ -0,0 +1,39 @@
1
+
2
+ module CascadingConfiguration::Setting::ModuleInclusionExtensionSupport
3
+
4
+ extend CascadingConfiguration::InternalModuleStub
5
+
6
+ ##############
7
+ # included #
8
+ ##############
9
+
10
+ def included( class_or_module )
11
+ super if defined?( super )
12
+ # CascadingConfiguration::Setting
13
+ module_self = self
14
+ class_or_module.instance_eval do
15
+ # include accessors defined for instances
16
+ include module_self.accessor_instance_support
17
+ # extend accessors defined for modules (and classes, which are modules)
18
+ extend module_self.accessor_module_support
19
+ extend CascadingConfiguration::Setting
20
+ extend CascadingConfiguration::Setting::ModuleInclusionExtensionSupport unless is_a?( Class )
21
+ end
22
+ end
23
+
24
+ ##############
25
+ # extended #
26
+ ##############
27
+
28
+ def extended( class_or_module )
29
+ super if defined?( super )
30
+ # CascadingConfiguration::Setting
31
+ module_self = self
32
+ class_or_module.instance_eval do
33
+ extend module_self.accessor_module_support
34
+ extend CascadingConfiguration::Variable::EigenclassConfigurationChain
35
+ extend CascadingConfiguration::Setting
36
+ end
37
+ end
38
+
39
+ end
@@ -1,7 +1,7 @@
1
1
 
2
2
  require_relative '../../../lib/cascading-configuration-setting.rb'
3
3
 
4
- describe CascadingConfiguration::Setting::Accessors do
4
+ describe CascadingConfiguration::Setting::ConfigurationAccessors do
5
5
 
6
6
  #############################
7
7
  # define_cascading_setter #
@@ -8,51 +8,123 @@ describe CascadingConfiguration::Setting do
8
8
  ########################
9
9
 
10
10
  it 'can define a configuration setting, which is the primary interface' do
11
- module CascadingConfiguration::Setting::MockModule
12
- include CascadingConfiguration::Setting
13
- attr_configuration :some_other_configuration
14
- self.some_other_configuration = :our_setting_value
15
- some_other_configuration.should == :our_setting_value
16
- end
17
- module CascadingConfiguration::Setting::MockModule2
18
- include CascadingConfiguration::Setting::MockModule
19
- self.some_other_configuration = :another_value
20
- some_other_configuration.should == :another_value
11
+
12
+ # extending a module or class works like a finalizer for the cascading configuration
13
+ # if the configuration is re-opened at a later point (including or extending a lower ancestor)
14
+ # then the configuration will still cascade upward
15
+ # this permits ancestors in the heirarchy to skip out on configurations
16
+ # upward cascade can be frozen at any point using :freeze!, which will prevent further upward lookup
17
+
18
+ # possibilities:
19
+ # * module extended with setting
20
+ module CascadingConfiguration::Setting::MockModuleExtended
21
+ extend CascadingConfiguration::Setting
22
+ # => singleton gets attr_configuration and configurations
23
+ respond_to?( :attr_configuration ).should == true
24
+ attr_configuration :some_configuration
25
+ respond_to?( :some_configuration ).should == true
26
+ self.some_configuration = :our_setting_value
27
+ some_configuration.should == :our_setting_value
28
+ instance_methods.include?( :some_configuration ).should == false
29
+ # => including modules and classes get nothing
30
+ module SubmoduleIncluding
31
+ include CascadingConfiguration::Setting::MockModuleExtended
32
+ instance_methods.include?( :some_configuration ).should == false
33
+ respond_to?( :some_configuration ).should == false
34
+ end
35
+ # => extending modules and classes get nothing
36
+ module SubmoduleExtending
37
+ extend CascadingConfiguration::Setting::MockModuleExtended
38
+ instance_methods.include?( :some_configuration ).should == false
39
+ respond_to?( :some_configuration ).should == false
40
+ end
41
+ # => instances of including and extending classes get nothing
42
+ class ClassIncluding
43
+ include CascadingConfiguration::Setting::MockModuleExtended
44
+ instance_methods.include?( :some_configuration ).should == false
45
+ respond_to?( :some_configuration ).should == false
46
+ end
47
+ class ClassExtending
48
+ extend CascadingConfiguration::Setting::MockModuleExtended
49
+ instance_methods.include?( :some_configuration ).should == false
50
+ respond_to?( :some_configuration ).should == false
51
+ end
21
52
  end
22
- module CascadingConfiguration::Setting::MockModule3
23
- include CascadingConfiguration::Setting::MockModule2
24
- some_other_configuration.should == :another_value
53
+
54
+ # * module included with setting
55
+ module CascadingConfiguration::Setting::MockModuleIncluded
56
+ include CascadingConfiguration::Setting
57
+ # => singleton gets attr_configuration and configurations
58
+ respond_to?( :attr_configuration ).should == true
59
+ attr_configuration :some_configuration
60
+ respond_to?( :some_configuration ).should == true
61
+ self.some_configuration = :our_setting_value
62
+ some_configuration.should == :our_setting_value
63
+ instance_methods.include?( :some_configuration ).should == true
64
+ # => including modules and classes get attr_configuration and configurations
65
+ module SubmoduleIncluding
66
+ include CascadingConfiguration::Setting::MockModuleIncluded
67
+ instance_methods.include?( :some_configuration ).should == true
68
+ respond_to?( :some_configuration ).should == true
69
+ some_configuration.should == :our_setting_value
70
+ self.some_configuration = :another_configuration
71
+ some_configuration.should == :another_configuration
72
+ end
73
+ # => extending modules and classes get attr_configuration and configurations
74
+ module SubmoduleExtending
75
+ extend CascadingConfiguration::Setting::MockModuleIncluded
76
+ # if we're extended then we want to use the eigenclass ancestor chain
77
+ # - the first ancestor will be the extending module
78
+ # - the rest of the ancestors will be the extending module's include chain
79
+ respond_to?( :some_configuration ).should == true
80
+ some_configuration.should == :our_setting_value
81
+ self.some_configuration = :some_other_configuration
82
+ some_configuration.should == :some_other_configuration
83
+ instance_methods.include?( :some_configuration ).should == false
84
+ end
85
+ # => instances of including classes get configurations
86
+ class ClassIncluding
87
+ include CascadingConfiguration::Setting::MockModuleIncluded
88
+ instance_methods.include?( :some_configuration ).should == true
89
+ respond_to?( :some_configuration ).should == true
90
+ some_configuration.should == :our_setting_value
91
+ self.some_configuration = :another_configuration
92
+ some_configuration.should == :another_configuration
93
+ end
94
+ setting_class_including_instance = ClassIncluding.new
95
+ setting_class_including_instance.respond_to?( :some_configuration ).should == true
96
+ setting_class_including_instance.some_configuration.should == :another_configuration
97
+ self.some_configuration = :our_setting_value
98
+ some_configuration.should == :our_setting_value
99
+ # => instances of extending classes get nothing
100
+ class ClassExtending
101
+ extend CascadingConfiguration::Setting::MockModuleIncluded
102
+ respond_to?( :some_configuration ).should == true
103
+ some_configuration.should == :our_setting_value
104
+ self.some_configuration = :some_other_configuration
105
+ some_configuration.should == :some_other_configuration
106
+ instance_methods.include?( :some_configuration ).should == false
107
+ end
108
+ setting_class_including_instance = ClassExtending.new
109
+ setting_class_including_instance.respond_to?( :some_configuration ).should == false
25
110
  end
111
+
26
112
  class CascadingConfiguration::Setting::MockClass
27
- include CascadingConfiguration::Setting::MockModule3
28
- some_other_configuration.should == :another_value
29
- self.some_other_configuration = :our_setting_value
113
+ include CascadingConfiguration::Setting::MockModuleIncluded::SubmoduleIncluding
114
+ some_configuration.should == :another_configuration
115
+ self.some_configuration = :our_setting_value
116
+ some_configuration.should == :our_setting_value
30
117
  end
31
118
  class CascadingConfiguration::Setting::MockClassSub1 < CascadingConfiguration::Setting::MockClass
32
- some_other_configuration.should == :our_setting_value
33
- self.some_other_configuration = :our_other_setting_value
34
- some_other_configuration.should == :our_other_setting_value
119
+ some_configuration.should == :our_setting_value
120
+ self.some_configuration = :our_other_setting_value
121
+ some_configuration.should == :our_other_setting_value
35
122
  end
36
123
  class CascadingConfiguration::Setting::MockClassSub2 < CascadingConfiguration::Setting::MockClassSub1
37
- some_other_configuration.should == :our_other_setting_value
38
- self.some_other_configuration = :a_third_setting_value
39
- some_other_configuration.should == :a_third_setting_value
124
+ some_configuration.should == :our_other_setting_value
125
+ self.some_configuration = :a_third_setting_value
126
+ some_configuration.should == :a_third_setting_value
40
127
  end
41
128
  end
42
-
43
- # test two
44
-
45
- module CascadingConfiguration::Setting::MockModuleExtended
46
- include CascadingConfiguration::Setting
47
- attr_configuration :some_other_configuration
48
- self.some_other_configuration = :our_setting_value
49
- some_other_configuration.should == :our_setting_value
50
- end
51
-
52
- class CascadingConfiguration::Setting::MockClassExtended
53
- extend CascadingConfiguration::Setting::MockModuleExtended
54
- self.some_other_configuration = :our_setting_value
55
- some_other_configuration.should == :our_setting_value
56
- end
57
129
 
58
130
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 1
8
- - 5
9
- version: 1.1.5
8
+ - 6
9
+ version: 1.1.6
10
10
  platform: ruby
11
11
  authors:
12
12
  - Asher
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-07-18 00:00:00 -04:00
17
+ date: 2011-07-19 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -39,12 +39,12 @@ extensions: []
39
39
  extra_rdoc_files: []
40
40
 
41
41
  files:
42
- - lib/cascading-configuration-setting/CascadingConfiguration/Setting/Accessors.rb
43
- - lib/cascading-configuration-setting/CascadingConfiguration/Setting/ClassInstance.rb
44
- - lib/cascading-configuration-setting/CascadingConfiguration/Setting/ModuleInstance.rb
42
+ - lib/cascading-configuration-setting/CascadingConfiguration/Setting/ConfigurationAccessors.rb
43
+ - lib/cascading-configuration-setting/CascadingConfiguration/Setting/Interface.rb
44
+ - lib/cascading-configuration-setting/CascadingConfiguration/Setting/ModuleInclusionExtensionSupport.rb
45
45
  - lib/cascading-configuration-setting/CascadingConfiguration/Setting.rb
46
46
  - lib/cascading-configuration-setting.rb
47
- - spec/CascadingConfiguration/Setting/Accessors_spec.rb
47
+ - spec/CascadingConfiguration/Setting/ConfigurationAccessors_spec.rb
48
48
  - spec/CascadingConfiguration/Setting_spec.rb
49
49
  - README.md
50
50
  - README.rdoc
@@ -1,36 +0,0 @@
1
-
2
- module CascadingConfiguration::Setting::Accessors
3
-
4
- extend CascadingConfiguration::InternalModuleStub
5
-
6
- #############################
7
- # define_cascading_setter #
8
- #############################
9
-
10
- def define_cascading_setter( configuration_name )
11
- configuration_setter_name = ( configuration_name.to_s + '=' ).to_s
12
- accessor_support_module = self::AccessorSupportModule
13
- accessor_support_module.module_eval do
14
- define_method( configuration_setter_name ) do |value|
15
- # configuration setter returns setting variable (variable from self), which is now the ID of value
16
- return instance_variable_set( accessor_support_module.cascading_variable_name( configuration_name ), value )
17
- end
18
- end
19
- end
20
-
21
- #############################
22
- # define_cascading_getter #
23
- #############################
24
-
25
- def define_cascading_getter( configuration_name )
26
- configuration_getter_name = configuration_name
27
- self::AccessorSupportModule.module_eval do
28
- define_method( configuration_getter_name ) do
29
- # configuration getter returns current setting value (taken from first superclass with setting)
30
- # that means first variable that has been set
31
- return get_configuration_searching_upward( configuration_name )
32
- end
33
- end
34
- end
35
-
36
- end
@@ -1,19 +0,0 @@
1
-
2
- module CascadingConfiguration::Setting::ClassInstance
3
-
4
- extend CascadingConfiguration::InternalModuleStub
5
-
6
- ########################
7
- # attr_configuration #
8
- ########################
9
-
10
- def attr_configuration( *property_names )
11
- property_names.each do |this_property_name|
12
- # define configuration setter
13
- define_cascading_setter( this_property_name )
14
- # define configuration getter
15
- define_cascading_getter( this_property_name )
16
- end
17
- end
18
-
19
- end
@@ -1,35 +0,0 @@
1
-
2
- module CascadingConfiguration::Setting::ModuleInstance
3
-
4
- extend CascadingConfiguration::InternalModuleStub
5
-
6
- ##############
7
- # included #
8
- ##############
9
-
10
- def included( class_or_module )
11
- super if method_defined?( :super )
12
- # CascadingConfiguration::Setting
13
- module_self = self
14
- class_or_module.instance_eval do
15
- # whichever module included CascadingConfiguration::Setting, which is now being included
16
- # cascade CascadingConfiguration::Setting
17
- include CascadingConfiguration::Setting
18
- end
19
- end
20
-
21
- ##############
22
- # extended #
23
- ##############
24
-
25
- def extended( class_or_module )
26
- super if method_defined?( :super )
27
- # CascadingConfiguration::Setting
28
- module_self = self
29
- class_or_module.instance_eval do
30
- # cascade CascadingConfiguration::Setting
31
- include CascadingConfiguration::Setting
32
- end
33
- end
34
-
35
- end