cascading-configuration-setting 1.1.5 → 1.1.6

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.
@@ -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