cascading-configuration-setting 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
+