cascading-configuration-setting 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.rdoc ADDED
@@ -0,0 +1,141 @@
1
+ == Cascading Configuration
2
+
3
+ http://rubygems.org/gems/cascading-configuration-setting
4
+
5
+ == DESCRIPTION:
6
+
7
+ Adds methods for cascading configuration settings. Support package for cascading-configuration.
8
+
9
+ == SUMMARY:
10
+
11
+ * :attr_configuration
12
+
13
+ == INSTALL:
14
+
15
+ * sudo gem install cascading-configuration-setting
16
+
17
+ == EXAMPLE:
18
+
19
+ #############################################################################
20
+ ########################### attr_configuration ##############################
21
+ #############################################################################
22
+
23
+ ##################
24
+ # first module #
25
+ ##################
26
+
27
+ module CascadingConfiguration::MockModule
28
+ include CascadingConfiguration
29
+ attr_configuration :some_configuration
30
+ self.some_configuration = :some_value
31
+ # => some_configuration.should == :some_value
32
+ end
33
+
34
+ ########################
35
+ # including module 1 #
36
+ ########################
37
+
38
+ module CascadingConfiguration::MockModule2
39
+ include CascadingConfiguration::MockModule
40
+ # => some_configuration.should == :some_value
41
+ self.some_configuration = :module_value
42
+ # => some_configuration.should == :module_value
43
+ end
44
+
45
+ ########################
46
+ # including module 2 #
47
+ ########################
48
+
49
+ module CascadingConfiguration::MockModule3
50
+ include CascadingConfiguration::MockModule2
51
+ end
52
+
53
+ ###############
54
+ # top class #
55
+ ###############
56
+
57
+ class CascadingConfiguration::MockClass
58
+ include CascadingConfiguration::MockModule3
59
+ # => some_configuration.should == :module_value
60
+ self.some_configuration = :another_value
61
+ # => some_configuration.should == :another_value
62
+ end
63
+
64
+ ###########################
65
+ # instance of top class #
66
+ ###########################
67
+
68
+ object_instance_one = CascadingConfiguration::MockClass.new
69
+ # => object_instance_one.some_configuration.should == :another_value
70
+ object_instance_one.some_configuration = :yet_another_value
71
+ # => object_instance_one.some_configuration.should == :yet_another_value
72
+ # => CascadingConfiguration::MockClass.some_configuration.should == :another_value
73
+ # => CascadingConfiguration::MockModule.some_configuration.should == :some_value
74
+
75
+ ############################
76
+ # first inheriting class #
77
+ ############################
78
+
79
+ class CascadingConfiguration::MockClassSub1 < CascadingConfiguration::MockClass
80
+ # => some_configuration.should == :another_value
81
+ self.some_configuration = :a_value_not_yet_used
82
+ # => some_configuration.should == :a_value_not_yet_used
83
+ # => CascadingConfiguration::MockClass.some_configuration.should == :another_value
84
+ # => CascadingConfiguration::MockModule.some_configuration.should == :some_value
85
+ end
86
+
87
+ ########################################
88
+ # instance of first inheriting class #
89
+ ########################################
90
+
91
+ object_instance_two = CascadingConfiguration::MockClassSub1.new
92
+ # => object_instance_two.some_configuration.should == :a_value_not_yet_used
93
+ # => object_instance_one.some_configuration.should == :yet_another_value
94
+ # => CascadingConfiguration::MockClass.some_configuration.should == :another_value
95
+ # => CascadingConfiguration::MockModule.some_configuration.should == :some_value
96
+
97
+ #############################
98
+ # second inheriting class #
99
+ #############################
100
+
101
+ class CascadingConfiguration::MockClassSub2 < CascadingConfiguration::MockClassSub1
102
+ # => some_configuration.should == :a_value_not_yet_used
103
+ self.some_configuration = :another_value_not_yet_used
104
+ # => some_configuration.should == :another_value_not_yet_used
105
+ end
106
+
107
+ #########################################
108
+ # instance of second inheriting class #
109
+ #########################################
110
+
111
+ object_instance_three = CascadingConfiguration::MockClassSub2.new
112
+ # => object_instance_three.some_configuration.should == :another_value_not_yet_used
113
+ object_instance_three.some_configuration = :one_more_unused_value
114
+ # => object_instance_three.some_configuration.should == :one_more_unused_value
115
+
116
+ #############################################################################
117
+
118
+ == LICENSE:
119
+
120
+ (The MIT License)
121
+
122
+ Copyright (c) 2011 Asher
123
+
124
+ Permission is hereby granted, free of charge, to any person obtaining
125
+ a copy of this software and associated documentation files (the
126
+ 'Software'), to deal in the Software without restriction, including
127
+ without limitation the rights to use, copy, modify, merge, publish,
128
+ distribute, sublicense, and/or sell copies of the Software, and to
129
+ permit persons to whom the Software is furnished to do so, subject to
130
+ the following conditions:
131
+
132
+ The above copyright notice and this permission notice shall be
133
+ included in all copies or substantial portions of the Software.
134
+
135
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
136
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
137
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
138
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
139
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
140
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
141
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,21 @@
1
+
2
+ require 'cascading-configuration-variable'
3
+ #require_relative '../../variable/lib/cascading-configuration-variable.rb'
4
+
5
+ module CascadingConfiguration
6
+ module ConfigurationSetting
7
+ module Accessors
8
+ end
9
+ module ClassInstance
10
+ end
11
+ module ObjectInstance
12
+ end
13
+ module ModuleInstance
14
+ end
15
+ end
16
+ end
17
+
18
+ require_relative 'cascading-configuration-setting/CascadingConfiguration/ConfigurationSetting.rb'
19
+ require_relative 'cascading-configuration-setting/CascadingConfiguration/ConfigurationSetting/Accessors.rb'
20
+ require_relative 'cascading-configuration-setting/CascadingConfiguration/ConfigurationSetting/ClassInstance.rb'
21
+ require_relative 'cascading-configuration-setting/CascadingConfiguration/ConfigurationSetting/ModuleInstance.rb'
@@ -0,0 +1,47 @@
1
+
2
+ module CascadingConfiguration::ConfigurationSetting
3
+
4
+ ###########################################################################################################
5
+ ###################################### Singleton Implementation #########################################
6
+ ###########################################################################################################
7
+
8
+ ###################
9
+ # self.included #
10
+ ###################
11
+
12
+ def self.included( class_or_module )
13
+ class_or_module.instance_eval do
14
+ include CascadingConfiguration::ConfigurationVariable
15
+ extend CascadingConfiguration::ConfigurationSetting
16
+ include CascadingConfiguration::ConfigurationSetting::ObjectInstance
17
+ extend CascadingConfiguration::ConfigurationSetting::ClassInstance
18
+ extend CascadingConfiguration::ConfigurationSetting::Accessors
19
+ unless is_a?( Class )
20
+ extend CascadingConfiguration::ConfigurationSetting::ModuleInstance
21
+ end
22
+ end
23
+ end
24
+
25
+ ########################################
26
+ # get_configuration_searching_upward #
27
+ ########################################
28
+
29
+ def get_configuration_searching_upward( configuration_name )
30
+
31
+ configuration = nil
32
+
33
+ configuration_variable = cascading_variable_name( configuration_name )
34
+
35
+ ancestors_to_Object.each do |this_ancestor|
36
+ if this_ancestor.instance_variable_defined?( configuration_variable )
37
+ # if our instance defines this configuration, use its setting
38
+ configuration = this_ancestor.instance_variable_get( configuration_variable )
39
+ break
40
+ end
41
+ end
42
+
43
+ return configuration
44
+
45
+ end
46
+
47
+ end
@@ -0,0 +1,37 @@
1
+
2
+ module CascadingConfiguration::ConfigurationSetting::Accessors
3
+
4
+ #################################
5
+ # define_configuration_setter #
6
+ #################################
7
+
8
+ def define_configuration_setter( configuration_name )
9
+ configuration_setter_name = ( configuration_name.to_s + '=' ).to_s
10
+ [ self, eigenclass ].each do |klass_or_eigenclass|
11
+ klass_or_eigenclass.class_eval do
12
+ define_method( configuration_setter_name ) do |value|
13
+ # configuration setter returns setting variable (variable from self), which is now the ID of value
14
+ return instance_variable_set( cascading_variable_name( configuration_name ), value )
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ #################################
21
+ # define_configuration_getter #
22
+ #################################
23
+
24
+ def define_configuration_getter( configuration_name )
25
+ configuration_getter_name = configuration_name
26
+ [ self, eigenclass ].each do |klass_or_eigenclass|
27
+ klass_or_eigenclass.class_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
+ end
36
+
37
+ end
@@ -0,0 +1,17 @@
1
+
2
+ module CascadingConfiguration::ConfigurationSetting::ClassInstance
3
+
4
+ ########################
5
+ # attr_configuration #
6
+ ########################
7
+
8
+ def attr_configuration( *property_names )
9
+ property_names.each do |this_property_name|
10
+ # define configuration setter
11
+ define_configuration_setter( this_property_name )
12
+ # define configuration getter
13
+ define_configuration_getter( this_property_name )
14
+ end
15
+ end
16
+
17
+ end
@@ -0,0 +1,20 @@
1
+
2
+ module CascadingConfiguration::ConfigurationSetting::ModuleInstance
3
+
4
+ ##############
5
+ # included #
6
+ ##############
7
+
8
+ def included( class_or_module )
9
+ self_module = self
10
+ class_or_module.instance_eval do
11
+ include CascadingConfiguration::ConfigurationSetting
12
+ # when we extend a module (which has happened if we got here)
13
+ # then we need to make sure when the module we are extending is included
14
+ # * CascadingConfiguration is included
15
+ # * the module we extended is used to extend the class/module that included
16
+ extend self_module
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,28 @@
1
+
2
+ require_relative '../../../lib/cascading-configuration-setting.rb'
3
+
4
+ describe CascadingConfiguration::ConfigurationSetting::Accessors do
5
+
6
+ #################################
7
+ # define_configuration_setter #
8
+ # define_configuration_getter #
9
+ #################################
10
+
11
+ it 'can define a method to get and set configuration value' do
12
+ class CascadingConfiguration::ConfigurationSetting::Mock
13
+ include CascadingConfiguration::ConfigurationSetting
14
+ end
15
+ # setter
16
+ setter_method_name = ( :some_configuration.to_s + '=' ).to_sym
17
+ CascadingConfiguration::ConfigurationSetting::Mock.define_configuration_setter( :some_configuration )
18
+ CascadingConfiguration::ConfigurationSetting::Mock.methods.include?( setter_method_name ).should == true
19
+ CascadingConfiguration::ConfigurationSetting::Mock.instance_methods.include?( setter_method_name ).should == true
20
+ CascadingConfiguration::ConfigurationSetting::Mock.some_configuration = :a_setting_not_yet_used
21
+ # getter
22
+ CascadingConfiguration::ConfigurationSetting::Mock.define_configuration_getter( :some_configuration )
23
+ CascadingConfiguration::ConfigurationSetting::Mock.methods.include?( :some_configuration ).should == true
24
+ CascadingConfiguration::ConfigurationSetting::Mock.instance_methods.include?( :some_configuration ).should == true
25
+ CascadingConfiguration::ConfigurationSetting::Mock.some_configuration.should == :a_setting_not_yet_used
26
+ end
27
+
28
+ end
@@ -0,0 +1,43 @@
1
+
2
+ require_relative '../../lib/cascading-configuration-setting.rb'
3
+
4
+ describe CascadingConfiguration::ConfigurationSetting do
5
+
6
+ ################################
7
+ # attr_configuration #
8
+ ################################
9
+
10
+ it 'can define a configuration setting, which is the primary interface' do
11
+ module CascadingConfiguration::ConfigurationSetting::MockModule
12
+ include CascadingConfiguration::ConfigurationSetting
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::ConfigurationSetting::MockModule2
18
+ include CascadingConfiguration::ConfigurationSetting::MockModule
19
+ self.some_other_configuration = :another_value
20
+ some_other_configuration.should == :another_value
21
+ end
22
+ module CascadingConfiguration::ConfigurationSetting::MockModule3
23
+ include CascadingConfiguration::ConfigurationSetting::MockModule2
24
+ some_other_configuration.should == :another_value
25
+ end
26
+ class CascadingConfiguration::ConfigurationSetting::MockClass
27
+ include CascadingConfiguration::ConfigurationSetting::MockModule3
28
+ some_other_configuration.should == :another_value
29
+ self.some_other_configuration = :our_setting_value
30
+ end
31
+ class CascadingConfiguration::ConfigurationSetting::MockClassSub1 < CascadingConfiguration::ConfigurationSetting::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
35
+ end
36
+ class CascadingConfiguration::ConfigurationSetting::MockClassSub2 < CascadingConfiguration::ConfigurationSetting::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
40
+ end
41
+ end
42
+
43
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cascading-configuration-setting
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 0
8
+ - 0
9
+ version: 1.0.0
10
+ platform: ruby
11
+ authors:
12
+ - Asher
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-07-13 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: cascading-configuration-variable
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :runtime
32
+ version_requirements: *id001
33
+ description: Provides :attr_configuration.
34
+ email: asher@ridiculouspower.com
35
+ executables: []
36
+
37
+ extensions: []
38
+
39
+ extra_rdoc_files: []
40
+
41
+ files:
42
+ - lib/cascading-configuration-setting/CascadingConfiguration/ConfigurationSetting/Accessors.rb
43
+ - lib/cascading-configuration-setting/CascadingConfiguration/ConfigurationSetting/ClassInstance.rb
44
+ - lib/cascading-configuration-setting/CascadingConfiguration/ConfigurationSetting/ModuleInstance.rb
45
+ - lib/cascading-configuration-setting/CascadingConfiguration/ConfigurationSetting.rb
46
+ - lib/cascading-configuration-setting.rb
47
+ - spec/CascadingConfiguration/ConfigurationSetting/Accessors_spec.rb
48
+ - spec/CascadingConfiguration/ConfigurationSetting_spec.rb
49
+ - README.rdoc
50
+ has_rdoc: true
51
+ homepage: http://rubygems.org/gems/cascading-configuration-setting
52
+ licenses: []
53
+
54
+ post_install_message:
55
+ rdoc_options: []
56
+
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ segments:
65
+ - 0
66
+ version: "0"
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ requirements: []
76
+
77
+ rubyforge_project: cascading-configuration-setting
78
+ rubygems_version: 1.3.7
79
+ signing_key:
80
+ specification_version: 3
81
+ summary: Support package for cascading-configuration.
82
+ test_files: []
83
+