cascading-configuration-setting 1.1.6 → 1.2.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.md +120 -203
 - data/README.rdoc +9 -7
 - data/lib/cascading-configuration-setting.rb +2 -2
 - data/lib/cascading-configuration-setting/CascadingConfiguration/Setting.rb +2 -2
 - data/lib/cascading-configuration-setting/CascadingConfiguration/Setting/{ConfigurationAccessors.rb → AccessorDefinitionMethods.rb} +11 -11
 - data/lib/cascading-configuration-setting/CascadingConfiguration/Setting/Interface.rb +6 -4
 - data/spec/CascadingConfiguration/Setting/{ConfigurationAccessors_spec.rb → AccessorDefinitionMethods_spec.rb} +1 -1
 - data/spec/CascadingConfiguration/Setting_spec.rb +240 -14
 - metadata +5 -5
 
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Cascading Configuration #
         
     | 
| 
      
 1 
     | 
    
         
            +
            # Cascading Configuration Setting #
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            http://rubygems.org/gems/cascading-configuration-setting
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
         @@ -7,341 +7,258 @@ http://rubygems.org/gems/cascading-configuration-setting 
     | 
|
| 
       7 
7 
     | 
    
         
             
            Adds methods for cascading configuration settings. Support package for cascading-configuration.
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
            # Summary #
         
     | 
| 
       10 
     | 
    
         
            -
              
         
     | 
| 
       11 
     | 
    
         
            -
            ## :attr_configuration ##
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
            :attr_configuration provides inheritable configuration that cascades downward. 
         
     | 
| 
       14 
10 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
            Configuration inheritance can cascade through modules, classes, and instances.
         
     | 
| 
      
 11 
     | 
    
         
            +
            Cascading configuration methods for settings, which returns the appropriate lowest accumulated value. Configuration inheritance can cascade through modules, classes, and to instances.
         
     | 
| 
       16 
12 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 13 
     | 
    
         
            +
            This means that we can create configuration modules, optionally setting configuration defaults, and include those configuration modules in other modules or classes.
         
     | 
| 
       18 
14 
     | 
    
         | 
| 
       19 
15 
     | 
    
         
             
            # Install #
         
     | 
| 
       20 
16 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
            * sudo gem install cascading-configuration 
     | 
| 
      
 17 
     | 
    
         
            +
            * sudo gem install cascading-configuration
         
     | 
| 
       22 
18 
     | 
    
         | 
| 
       23 
19 
     | 
    
         
             
            # Usage #
         
     | 
| 
       24 
20 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
            Settings are set and acquired by the attribute name declared in :attr_configuration.
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
            ## First Module ##
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
            1. Define initial configuration in a module.
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
            A class works just as well, but we can't use a module in the same chain if we start with a class.
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
            * Include module to enable attr_configuration_setting.
         
     | 
| 
      
 21 
     | 
    
         
            +
            Including the module will enable support for singleton and for instances.
         
     | 
| 
       36 
22 
     | 
    
         | 
| 
       37 
23 
     | 
    
         
             
            ```ruby
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
               
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
              end
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
      
 24 
     | 
    
         
            +
            module AnyModuleOrClass
         
     | 
| 
      
 25 
     | 
    
         
            +
              include CascadingConfiguration::Setting
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
       43 
27 
     | 
    
         
             
            ```
         
     | 
| 
       44 
28 
     | 
    
         | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
      
 29 
     | 
    
         
            +
            Extending the module will enable support for singleton only.
         
     | 
| 
       46 
30 
     | 
    
         | 
| 
       47 
31 
     | 
    
         
             
            ```ruby
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
               
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
              end
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
      
 32 
     | 
    
         
            +
            module AnyModuleOrClass
         
     | 
| 
      
 33 
     | 
    
         
            +
              extend CascadingConfiguration::Setting
         
     | 
| 
      
 34 
     | 
    
         
            +
            end
         
     | 
| 
       53 
35 
     | 
    
         
             
            ```
         
     | 
| 
       54 
36 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
      
 37 
     | 
    
         
            +
            Including or extending CascadingConfiguration includes or extends:
         
     | 
| 
       56 
38 
     | 
    
         | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
      
 39 
     | 
    
         
            +
            * CascadingConfiguration::Variable
         
     | 
| 
       58 
40 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
                self.some_configuration = :some_value
         
     | 
| 
       61 
     | 
    
         
            -
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
            ## :attr_configuration ##
         
     | 
| 
       62 
42 
     | 
    
         | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
      
 43 
     | 
    
         
            +
            :attr_configuration provides inheritable single-object configurations that cascades downward. The value lowest in the ancestor hierarchy will be returned.
         
     | 
| 
       64 
44 
     | 
    
         | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
      
 45 
     | 
    
         
            +
            Define initial configuration in a module or class:
         
     | 
| 
       66 
46 
     | 
    
         | 
| 
       67 
47 
     | 
    
         
             
            ```ruby
         
     | 
| 
      
 48 
     | 
    
         
            +
            module SomeModule
         
     | 
| 
       68 
49 
     | 
    
         | 
| 
       69 
     | 
    
         
            -
               
     | 
| 
       70 
     | 
    
         
            -
                # => some_configuration.should == :some_value
         
     | 
| 
       71 
     | 
    
         
            -
              end
         
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
            ```
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
            ## Including Module 1 ##
         
     | 
| 
      
 50 
     | 
    
         
            +
              include CascadingConfiguration::Setting
         
     | 
| 
       76 
51 
     | 
    
         | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
      
 52 
     | 
    
         
            +
              attr_configuration :some_setting
         
     | 
| 
       78 
53 
     | 
    
         | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
      
 54 
     | 
    
         
            +
              some_setting # => nil
         
     | 
| 
       80 
55 
     | 
    
         | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
      
 56 
     | 
    
         
            +
              # note: if we don't specify the receiver here (self) assignment creates local variable instead
         
     | 
| 
      
 57 
     | 
    
         
            +
              self.some_setting = :some_value
         
     | 
| 
       82 
58 
     | 
    
         | 
| 
       83 
     | 
    
         
            -
               
     | 
| 
       84 
     | 
    
         
            -
                include CascadingConfiguration::MockModule
         
     | 
| 
       85 
     | 
    
         
            -
              end
         
     | 
| 
      
 59 
     | 
    
         
            +
              some_setting # => :some_value
         
     | 
| 
       86 
60 
     | 
    
         | 
| 
      
 61 
     | 
    
         
            +
            end
         
     | 
| 
       87 
62 
     | 
    
         
             
            ```
         
     | 
| 
       88 
63 
     | 
    
         | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
      
 64 
     | 
    
         
            +
            Include initial module in a module or class:
         
     | 
| 
       90 
65 
     | 
    
         | 
| 
       91 
66 
     | 
    
         
             
            ```ruby
         
     | 
| 
      
 67 
     | 
    
         
            +
            class SomeClass
         
     | 
| 
       92 
68 
     | 
    
         | 
| 
       93 
     | 
    
         
            -
               
     | 
| 
       94 
     | 
    
         
            -
                # => some_configuration.should == :some_value
         
     | 
| 
       95 
     | 
    
         
            -
              end
         
     | 
| 
      
 69 
     | 
    
         
            +
              include SomeModule
         
     | 
| 
       96 
70 
     | 
    
         | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
      
 71 
     | 
    
         
            +
              some_setting # => :some_value
         
     | 
| 
       98 
72 
     | 
    
         | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
      
 73 
     | 
    
         
            +
              self.some_setting = :some_other_value
         
     | 
| 
       100 
74 
     | 
    
         | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
      
 75 
     | 
    
         
            +
              some_setting # => :some_other_value
         
     | 
| 
       102 
76 
     | 
    
         | 
| 
       103 
     | 
    
         
            -
               
     | 
| 
       104 
     | 
    
         
            -
                self.some_configuration = :module_value
         
     | 
| 
       105 
     | 
    
         
            -
              end
         
     | 
| 
      
 77 
     | 
    
         
            +
              SomeModule.some_setting # => :some_value
         
     | 
| 
       106 
78 
     | 
    
         | 
| 
      
 79 
     | 
    
         
            +
            end
         
     | 
| 
       107 
80 
     | 
    
         
             
            ```
         
     | 
| 
       108 
81 
     | 
    
         | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
      
 82 
     | 
    
         
            +
            And it cascades to instances:
         
     | 
| 
       110 
83 
     | 
    
         | 
| 
       111 
84 
     | 
    
         
             
            ```ruby
         
     | 
| 
      
 85 
     | 
    
         
            +
            instance = SomeClass.new
         
     | 
| 
       112 
86 
     | 
    
         | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
                # => some_configuration.should == :module_value
         
     | 
| 
       115 
     | 
    
         
            -
              end
         
     | 
| 
       116 
     | 
    
         
            -
             
     | 
| 
       117 
     | 
    
         
            -
            ```
         
     | 
| 
       118 
     | 
    
         
            -
             
     | 
| 
       119 
     | 
    
         
            -
            ## Including Module 2 ##
         
     | 
| 
       120 
     | 
    
         
            -
             
     | 
| 
       121 
     | 
    
         
            -
            3. Include second module in another module.
         
     | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
       123 
     | 
    
         
            -
            ```ruby
         
     | 
| 
      
 87 
     | 
    
         
            +
            instance.some_setting.should == :some_value
         
     | 
| 
       124 
88 
     | 
    
         | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
                include CascadingConfiguration::MockModule2
         
     | 
| 
       127 
     | 
    
         
            -
              end
         
     | 
| 
      
 89 
     | 
    
         
            +
            instance.some_setting = :another_value
         
     | 
| 
       128 
90 
     | 
    
         | 
| 
      
 91 
     | 
    
         
            +
            instance.some_setting.should == :another_value
         
     | 
| 
       129 
92 
     | 
    
         
             
            ```
         
     | 
| 
       130 
93 
     | 
    
         | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
      
 94 
     | 
    
         
            +
            ### :attr_module_configuration, :attr_class_configuration ###
         
     | 
| 
       132 
95 
     | 
    
         | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
      
 96 
     | 
    
         
            +
            :attr_class_configuration works like :attr_configuration but does not cascade to instances.
         
     | 
| 
       134 
97 
     | 
    
         | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
       136 
     | 
    
         
            -
                # => some_configuration.should == :module_value
         
     | 
| 
       137 
     | 
    
         
            -
              end
         
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
     | 
    
         
            -
            ```
         
     | 
| 
       140 
     | 
    
         
            -
             
     | 
| 
       141 
     | 
    
         
            -
            ## Top Class ##
         
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
       143 
     | 
    
         
            -
            4. Include third module in a class.
         
     | 
| 
      
 98 
     | 
    
         
            +
            Define initial configuration in a module or class:
         
     | 
| 
       144 
99 
     | 
    
         | 
| 
       145 
100 
     | 
    
         
             
            ```ruby
         
     | 
| 
      
 101 
     | 
    
         
            +
            module SomeModule
         
     | 
| 
       146 
102 
     | 
    
         | 
| 
       147 
     | 
    
         
            -
               
     | 
| 
       148 
     | 
    
         
            -
                include CascadingConfiguration::MockModule3
         
     | 
| 
       149 
     | 
    
         
            -
              end
         
     | 
| 
      
 103 
     | 
    
         
            +
              include CascadingConfiguration::Setting
         
     | 
| 
       150 
104 
     | 
    
         | 
| 
       151 
     | 
    
         
            -
             
     | 
| 
      
 105 
     | 
    
         
            +
              attr_class_configuration :some_setting
         
     | 
| 
       152 
106 
     | 
    
         | 
| 
       153 
     | 
    
         
            -
             
     | 
| 
      
 107 
     | 
    
         
            +
              some_setting # => nil
         
     | 
| 
       154 
108 
     | 
    
         | 
| 
       155 
     | 
    
         
            -
             
     | 
| 
      
 109 
     | 
    
         
            +
              self.some_setting = :some_value
         
     | 
| 
       156 
110 
     | 
    
         | 
| 
       157 
     | 
    
         
            -
               
     | 
| 
       158 
     | 
    
         
            -
                # => some_configuration.should == :module_value
         
     | 
| 
       159 
     | 
    
         
            -
              end
         
     | 
| 
      
 111 
     | 
    
         
            +
              some_setting # => :some_value
         
     | 
| 
       160 
112 
     | 
    
         | 
| 
      
 113 
     | 
    
         
            +
            end
         
     | 
| 
       161 
114 
     | 
    
         
             
            ```
         
     | 
| 
       162 
115 
     | 
    
         | 
| 
       163 
     | 
    
         
            -
             
     | 
| 
      
 116 
     | 
    
         
            +
            Include initial module in a module or class:
         
     | 
| 
       164 
117 
     | 
    
         | 
| 
       165 
118 
     | 
    
         
             
            ```ruby
         
     | 
| 
      
 119 
     | 
    
         
            +
            class SomeClass
         
     | 
| 
       166 
120 
     | 
    
         | 
| 
       167 
     | 
    
         
            -
               
     | 
| 
       168 
     | 
    
         
            -
                self.some_configuration = :another_value
         
     | 
| 
       169 
     | 
    
         
            -
              end
         
     | 
| 
      
 121 
     | 
    
         
            +
              include SomeModule
         
     | 
| 
       170 
122 
     | 
    
         | 
| 
       171 
     | 
    
         
            -
             
     | 
| 
      
 123 
     | 
    
         
            +
              some_setting # => :some_value
         
     | 
| 
       172 
124 
     | 
    
         | 
| 
       173 
     | 
    
         
            -
             
     | 
| 
      
 125 
     | 
    
         
            +
              self.some_setting = :some_other_value
         
     | 
| 
       174 
126 
     | 
    
         | 
| 
       175 
     | 
    
         
            -
             
     | 
| 
      
 127 
     | 
    
         
            +
              some_setting # => :some_other_value
         
     | 
| 
       176 
128 
     | 
    
         | 
| 
       177 
     | 
    
         
            -
               
     | 
| 
       178 
     | 
    
         
            -
                # => some_configuration.should == :another_value
         
     | 
| 
       179 
     | 
    
         
            -
              end
         
     | 
| 
      
 129 
     | 
    
         
            +
              SomeModule.some_setting # => :some_value
         
     | 
| 
       180 
130 
     | 
    
         | 
| 
      
 131 
     | 
    
         
            +
            end
         
     | 
| 
       181 
132 
     | 
    
         
             
            ```
         
     | 
| 
       182 
133 
     | 
    
         | 
| 
       183 
     | 
    
         
            -
             
     | 
| 
       184 
     | 
    
         
            -
             
     | 
| 
       185 
     | 
    
         
            -
            5. Instantiate class.
         
     | 
| 
      
 134 
     | 
    
         
            +
            And it does not cascade to instances:
         
     | 
| 
       186 
135 
     | 
    
         | 
| 
       187 
136 
     | 
    
         
             
            ```ruby
         
     | 
| 
      
 137 
     | 
    
         
            +
            instance = SomeClass.new
         
     | 
| 
       188 
138 
     | 
    
         | 
| 
       189 
     | 
    
         
            -
             
     | 
| 
       190 
     | 
    
         
            -
             
     | 
| 
      
 139 
     | 
    
         
            +
            instance.respond_to?( :some_setting ).should == false
         
     | 
| 
       191 
140 
     | 
    
         
             
            ```
         
     | 
| 
       192 
141 
     | 
    
         | 
| 
       193 
     | 
    
         
            -
             
     | 
| 
       194 
     | 
    
         
            -
             
     | 
| 
       195 
     | 
    
         
            -
            ```ruby
         
     | 
| 
       196 
     | 
    
         
            -
             
     | 
| 
       197 
     | 
    
         
            -
              # => object_instance_one.some_configuration.should == :another_value
         
     | 
| 
      
 142 
     | 
    
         
            +
            ### :attr_local_configuration ###
         
     | 
| 
       198 
143 
     | 
    
         | 
| 
       199 
     | 
    
         
            -
             
     | 
| 
      
 144 
     | 
    
         
            +
            :attr_local_configuration works like :attr_configuration but does not cascade. This is primarily useful for creating local configurations maintained in parallel with cascading configurations (for instance, with the same variable prefixes), for overriding the local configuration method, and for hiding the configuration variable (coming soon).
         
     | 
| 
       200 
145 
     | 
    
         | 
| 
       201 
     | 
    
         
            -
             
     | 
| 
      
 146 
     | 
    
         
            +
            Define initial configuration in a module or class:
         
     | 
| 
       202 
147 
     | 
    
         | 
| 
       203 
148 
     | 
    
         
             
            ```ruby
         
     | 
| 
      
 149 
     | 
    
         
            +
            module SomeModule
         
     | 
| 
       204 
150 
     | 
    
         | 
| 
       205 
     | 
    
         
            -
               
     | 
| 
      
 151 
     | 
    
         
            +
              include CascadingConfiguration::Setting
         
     | 
| 
       206 
152 
     | 
    
         | 
| 
       207 
     | 
    
         
            -
             
     | 
| 
      
 153 
     | 
    
         
            +
              attr_local_configuration :some_setting
         
     | 
| 
       208 
154 
     | 
    
         | 
| 
       209 
     | 
    
         
            -
             
     | 
| 
      
 155 
     | 
    
         
            +
              some_setting # => nil
         
     | 
| 
       210 
156 
     | 
    
         | 
| 
       211 
     | 
    
         
            -
             
     | 
| 
      
 157 
     | 
    
         
            +
              self.some_setting = :some_value
         
     | 
| 
       212 
158 
     | 
    
         | 
| 
       213 
     | 
    
         
            -
              # =>  
     | 
| 
       214 
     | 
    
         
            -
              # => CascadingConfiguration::MockClass.some_configuration.should == :another_value
         
     | 
| 
       215 
     | 
    
         
            -
              # => CascadingConfiguration::MockModule.some_configuration.should == :some_value
         
     | 
| 
      
 159 
     | 
    
         
            +
              some_setting # => :some_value
         
     | 
| 
       216 
160 
     | 
    
         | 
| 
      
 161 
     | 
    
         
            +
            end
         
     | 
| 
       217 
162 
     | 
    
         
             
            ```
         
     | 
| 
       218 
163 
     | 
    
         | 
| 
       219 
     | 
    
         
            -
             
     | 
| 
       220 
     | 
    
         
            -
             
     | 
| 
       221 
     | 
    
         
            -
            6. Inheriting class.
         
     | 
| 
       222 
     | 
    
         
            -
             
     | 
| 
       223 
     | 
    
         
            -
            Inheriting class should not get any settings from instance of superclass.
         
     | 
| 
       224 
     | 
    
         
            -
             
     | 
| 
       225 
     | 
    
         
            -
            * Verify inherited value
         
     | 
| 
      
 164 
     | 
    
         
            +
            Include initial module in a module or class:
         
     | 
| 
       226 
165 
     | 
    
         | 
| 
       227 
166 
     | 
    
         
             
            ```ruby
         
     | 
| 
      
 167 
     | 
    
         
            +
            class SomeClass
         
     | 
| 
       228 
168 
     | 
    
         | 
| 
       229 
     | 
    
         
            -
               
     | 
| 
       230 
     | 
    
         
            -
                # => some_configuration.should == :another_value
         
     | 
| 
       231 
     | 
    
         
            -
              end
         
     | 
| 
       232 
     | 
    
         
            -
             
     | 
| 
       233 
     | 
    
         
            -
            ```
         
     | 
| 
       234 
     | 
    
         
            -
             
     | 
| 
       235 
     | 
    
         
            -
            * Override inherited value
         
     | 
| 
       236 
     | 
    
         
            -
             
     | 
| 
       237 
     | 
    
         
            -
            ```ruby
         
     | 
| 
      
 169 
     | 
    
         
            +
              include SomeModule
         
     | 
| 
       238 
170 
     | 
    
         | 
| 
       239 
     | 
    
         
            -
               
     | 
| 
       240 
     | 
    
         
            -
                self.some_configuration = :a_value_not_yet_used
         
     | 
| 
       241 
     | 
    
         
            -
              end
         
     | 
| 
      
 171 
     | 
    
         
            +
              respond_to?( :some_setting ).should == false
         
     | 
| 
       242 
172 
     | 
    
         | 
| 
      
 173 
     | 
    
         
            +
            end
         
     | 
| 
       243 
174 
     | 
    
         
             
            ```
         
     | 
| 
       244 
175 
     | 
    
         | 
| 
       245 
     | 
    
         
            -
             
     | 
| 
       246 
     | 
    
         
            -
             
     | 
| 
       247 
     | 
    
         
            -
            ```ruby
         
     | 
| 
      
 176 
     | 
    
         
            +
            ## Additional Functionality ##
         
     | 
| 
       248 
177 
     | 
    
         | 
| 
       249 
     | 
    
         
            -
             
     | 
| 
       250 
     | 
    
         
            -
                # => some_configuration.should == :a_value_not_yet_used
         
     | 
| 
       251 
     | 
    
         
            -
                # => CascadingConfiguration::MockClass.some_configuration.should == :another_value
         
     | 
| 
       252 
     | 
    
         
            -
                # => CascadingConfiguration::MockModule.some_configuration.should == :some_value
         
     | 
| 
       253 
     | 
    
         
            -
              end
         
     | 
| 
      
 178 
     | 
    
         
            +
            Cascading-configuration also provides several other convenience functions. 
         
     | 
| 
       254 
179 
     | 
    
         | 
| 
       255 
     | 
    
         
            -
             
     | 
| 
      
 180 
     | 
    
         
            +
            ### Variable Name Prefixing ###
         
     | 
| 
       256 
181 
     | 
    
         | 
| 
       257 
     | 
    
         
            -
             
     | 
| 
      
 182 
     | 
    
         
            +
            Configuration prefix can be set so that variables use property name with the configuration prefix prepended.
         
     | 
| 
       258 
183 
     | 
    
         | 
| 
       259 
     | 
    
         
            -
             
     | 
| 
      
 184 
     | 
    
         
            +
            This can be done in order defined (current configuration prefix is stored for configuration), or it can be specified on a per-property basis.
         
     | 
| 
       260 
185 
     | 
    
         | 
| 
       261 
186 
     | 
    
         
             
            ```ruby
         
     | 
| 
      
 187 
     | 
    
         
            +
            module SomeModule
         
     | 
| 
       262 
188 
     | 
    
         | 
| 
       263 
     | 
    
         
            -
               
     | 
| 
      
 189 
     | 
    
         
            +
              include CascadingConfiguration
         
     | 
| 
       264 
190 
     | 
    
         | 
| 
       265 
     | 
    
         
            -
             
     | 
| 
      
 191 
     | 
    
         
            +
              attr_configuration :some_setting
         
     | 
| 
       266 
192 
     | 
    
         | 
| 
       267 
     | 
    
         
            -
             
     | 
| 
      
 193 
     | 
    
         
            +
              self.some_setting = :a_value
         
     | 
| 
       268 
194 
     | 
    
         | 
| 
       269 
     | 
    
         
            -
             
     | 
| 
      
 195 
     | 
    
         
            +
              instance_variables.include?( :@some_setting ) # => true
         
     | 
| 
       270 
196 
     | 
    
         | 
| 
       271 
     | 
    
         
            -
              #  
     | 
| 
       272 
     | 
    
         
            -
               
     | 
| 
       273 
     | 
    
         
            -
              # => CascadingConfiguration::MockClass.some_configuration.should == :another_value
         
     | 
| 
       274 
     | 
    
         
            -
              # => CascadingConfiguration::MockModule.some_configuration.should == :some_value
         
     | 
| 
      
 197 
     | 
    
         
            +
              # we can declare a prefix for specific properties
         
     | 
| 
      
 198 
     | 
    
         
            +
              attr_configuration_prefix '__configuration_prefix__', :some_other_setting
         
     | 
| 
       275 
199 
     | 
    
         | 
| 
       276 
     | 
    
         
            -
             
     | 
| 
      
 200 
     | 
    
         
            +
              attr_configuration :some_other_setting, :yet_another_setting
         
     | 
| 
       277 
201 
     | 
    
         | 
| 
       278 
     | 
    
         
            -
             
     | 
| 
      
 202 
     | 
    
         
            +
              self.some_setting = :some_value
         
     | 
| 
      
 203 
     | 
    
         
            +
              self.yet_another_setting = :another_value
         
     | 
| 
       279 
204 
     | 
    
         | 
| 
       280 
     | 
    
         
            -
             
     | 
| 
      
 205 
     | 
    
         
            +
              instance_variables.include?( :@some_other_setting ) # => false
         
     | 
| 
      
 206 
     | 
    
         
            +
              instance_variables.include?( :@__configuration_prefix__some_other_setting ) # => true
         
     | 
| 
      
 207 
     | 
    
         
            +
              instance_variables.include?( :@yet_another_setting ) # => true
         
     | 
| 
       281 
208 
     | 
    
         | 
| 
       282 
     | 
    
         
            -
             
     | 
| 
      
 209 
     | 
    
         
            +
              # or we can declare a prefix for all properties defined after prefix is declared
         
     | 
| 
      
 210 
     | 
    
         
            +
              attr_configuration_prefix '__another_configuration_prefix__'
         
     | 
| 
       283 
211 
     | 
    
         | 
| 
       284 
     | 
    
         
            -
             
     | 
| 
      
 212 
     | 
    
         
            +
              attr_configuration :still_another_prefix
         
     | 
| 
       285 
213 
     | 
    
         | 
| 
       286 
     | 
    
         
            -
               
     | 
| 
       287 
     | 
    
         
            -
             
     | 
| 
       288 
     | 
    
         
            -
              end
         
     | 
| 
      
 214 
     | 
    
         
            +
              instance_variables.include?( :@still_another_prefix ) # => false
         
     | 
| 
      
 215 
     | 
    
         
            +
              instance_variables.include?( :@__another_configuration_prefix__still_another_prefix ) # => true
         
     | 
| 
       289 
216 
     | 
    
         | 
| 
      
 217 
     | 
    
         
            +
            end
         
     | 
| 
       290 
218 
     | 
    
         
             
            ```
         
     | 
| 
       291 
219 
     | 
    
         | 
| 
       292 
     | 
    
         
            -
             
     | 
| 
       293 
     | 
    
         
            -
             
     | 
| 
       294 
     | 
    
         
            -
            ```ruby
         
     | 
| 
      
 220 
     | 
    
         
            +
            ### Method Redefinition ###
         
     | 
| 
       295 
221 
     | 
    
         | 
| 
       296 
     | 
    
         
            -
             
     | 
| 
       297 
     | 
    
         
            -
                self.some_configuration = :another_value_not_yet_used
         
     | 
| 
       298 
     | 
    
         
            -
              end
         
     | 
| 
      
 222 
     | 
    
         
            +
            Any declared configuration is defined in order to support locally redefining the method and accessing the original by calling super.
         
     | 
| 
       299 
223 
     | 
    
         | 
| 
       300 
     | 
    
         
            -
            ```
         
     | 
| 
      
 224 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 225 
     | 
    
         
            +
            module SomeModule
         
     | 
| 
       301 
226 
     | 
    
         | 
| 
       302 
     | 
    
         
            -
             
     | 
| 
      
 227 
     | 
    
         
            +
              include CascadingConfiguration
         
     | 
| 
       303 
228 
     | 
    
         | 
| 
       304 
     | 
    
         
            -
             
     | 
| 
      
 229 
     | 
    
         
            +
              attr_configuration :some_array_setting
         
     | 
| 
       305 
230 
     | 
    
         | 
| 
       306 
     | 
    
         
            -
               
     | 
| 
       307 
     | 
    
         
            -
                 
     | 
| 
      
 231 
     | 
    
         
            +
              def some_array_setting=( value )
         
     | 
| 
      
 232 
     | 
    
         
            +
                puts 'Replacing configuration array!'
         
     | 
| 
      
 233 
     | 
    
         
            +
                super
         
     | 
| 
       308 
234 
     | 
    
         
             
              end
         
     | 
| 
       309 
235 
     | 
    
         | 
| 
      
 236 
     | 
    
         
            +
            end
         
     | 
| 
       310 
237 
     | 
    
         
             
            ```
         
     | 
| 
       311 
238 
     | 
    
         | 
| 
       312 
     | 
    
         
            -
             
     | 
| 
      
 239 
     | 
    
         
            +
            ### Hidden Configuration ###
         
     | 
| 
       313 
240 
     | 
    
         | 
| 
       314 
     | 
    
         
            -
             
     | 
| 
      
 241 
     | 
    
         
            +
            #### :attr_hide ####
         
     | 
| 
       315 
242 
     | 
    
         | 
| 
       316 
     | 
    
         
            -
             
     | 
| 
       317 
     | 
    
         
            -
             
     | 
| 
       318 
     | 
    
         
            -
              object_instance_three = CascadingConfiguration::MockClassSub2.new
         
     | 
| 
       319 
     | 
    
         
            -
             
     | 
| 
       320 
     | 
    
         
            -
            ```
         
     | 
| 
       321 
     | 
    
         
            -
             
     | 
| 
       322 
     | 
    
         
            -
            * Verify inherited value
         
     | 
| 
      
 243 
     | 
    
         
            +
            Coming soon.
         
     | 
| 
       323 
244 
     | 
    
         | 
| 
       324 
245 
     | 
    
         
             
            ```ruby
         
     | 
| 
      
 246 
     | 
    
         
            +
            module SomeModule
         
     | 
| 
       325 
247 
     | 
    
         | 
| 
       326 
     | 
    
         
            -
               
     | 
| 
      
 248 
     | 
    
         
            +
              include CascadingConfiguration
         
     | 
| 
       327 
249 
     | 
    
         | 
| 
       328 
     | 
    
         
            -
             
     | 
| 
      
 250 
     | 
    
         
            +
              attr_configuration :some_array_setting
         
     | 
| 
       329 
251 
     | 
    
         | 
| 
       330 
     | 
    
         
            -
             
     | 
| 
      
 252 
     | 
    
         
            +
              instance_variables.include?( :@some_array_setting ) # => true
         
     | 
| 
       331 
253 
     | 
    
         | 
| 
       332 
     | 
    
         
            -
             
     | 
| 
      
 254 
     | 
    
         
            +
              attr_hide :some_array_setting
         
     | 
| 
       333 
255 
     | 
    
         | 
| 
       334 
     | 
    
         
            -
               
     | 
| 
      
 256 
     | 
    
         
            +
              instance_variables.include?( :@some_array_setting ) # => false  
         
     | 
| 
       335 
257 
     | 
    
         | 
| 
      
 258 
     | 
    
         
            +
            end
         
     | 
| 
       336 
259 
     | 
    
         
             
            ```
         
     | 
| 
       337 
260 
     | 
    
         | 
| 
       338 
     | 
    
         
            -
             
     | 
| 
       339 
     | 
    
         
            -
             
     | 
| 
       340 
     | 
    
         
            -
            ```ruby
         
     | 
| 
       341 
     | 
    
         
            -
             
     | 
| 
       342 
     | 
    
         
            -
              # => object_instance_three.some_configuration.should == :one_more_unused_value
         
     | 
| 
       343 
     | 
    
         
            -
             
     | 
| 
       344 
     | 
    
         
            -
            ```
         
     | 
| 
      
 261 
     | 
    
         
            +
            Causes configuration variable to be stored in external context so that it is not included in instance variables.
         
     | 
| 
       345 
262 
     | 
    
         | 
| 
       346 
263 
     | 
    
         
             
            # License #
         
     | 
| 
       347 
264 
     | 
    
         | 
| 
         @@ -366,4 +283,4 @@ Inheriting class should not get any settings from instance of superclass. 
     | 
|
| 
       366 
283 
     | 
    
         
             
              IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
         
     | 
| 
       367 
284 
     | 
    
         
             
              CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
         
     | 
| 
       368 
285 
     | 
    
         
             
              TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
         
     | 
| 
       369 
     | 
    
         
            -
              SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
| 
      
 286 
     | 
    
         
            +
              SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
    
        data/README.rdoc
    CHANGED
    
    | 
         @@ -1,22 +1,24 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            == Cascading Configuration
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            http://rubygems.org/gems/cascading-configuration
         
     | 
| 
      
 3 
     | 
    
         
            +
            http://rubygems.org/gems/cascading-configuration-setting
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            == Description
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
            Adds methods for cascading  
     | 
| 
      
 7 
     | 
    
         
            +
            Adds methods for cascading configuration settings. Support package for cascading-configuration.
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
            == Summary
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
            Cascading configuration methods for  
     | 
| 
      
 11 
     | 
    
         
            +
            Cascading configuration methods for settings, which returns the appropriate lowest accumulated value. Configuration inheritance can cascade through modules, classes, and to instances.
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            This means that we can create configuration modules, optionally setting configuration defaults, and include those configuration modules in other modules or classes.
         
     | 
| 
       12 
14 
     | 
    
         | 
| 
       13 
15 
     | 
    
         
             
            == :attr_configuration
         
     | 
| 
       14 
16 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
            :attr_configuration provides inheritable  
     | 
| 
      
 17 
     | 
    
         
            +
            :attr_configuration provides inheritable single-object configurations that cascades downward. The value lowest in the ancestor hierarchy will be returned.
         
     | 
| 
       16 
18 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 19 
     | 
    
         
            +
            :attr_class_configuration works like :attr_configuration but does not cascade to instances.
         
     | 
| 
       18 
20 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
            :attr_configuration  
     | 
| 
      
 21 
     | 
    
         
            +
            :attr_local_configuration works like :attr_configuration but does not cascade. This is primarily useful for creating local configurations maintained in parallel with cascading configurations (for instance, with the same variable prefixes), for overriding the local configuration method, and for hiding the configuration variable (coming soon).
         
     | 
| 
       20 
22 
     | 
    
         | 
| 
       21 
23 
     | 
    
         
             
            == Install
         
     | 
| 
       22 
24 
     | 
    
         | 
| 
         @@ -24,7 +26,7 @@ Configuration inheritance can cascade through modules, classes, and instances. 
     | 
|
| 
       24 
26 
     | 
    
         | 
| 
       25 
27 
     | 
    
         
             
            == Usage
         
     | 
| 
       26 
28 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
            See  
     | 
| 
      
 29 
     | 
    
         
            +
            See README.md
         
     | 
| 
       28 
30 
     | 
    
         | 
| 
       29 
31 
     | 
    
         
             
            == License
         
     | 
| 
       30 
32 
     | 
    
         | 
| 
         @@ -7,7 +7,7 @@ end 
     | 
|
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            module CascadingConfiguration
         
     | 
| 
       9 
9 
     | 
    
         
             
              module Setting
         
     | 
| 
       10 
     | 
    
         
            -
                module  
     | 
| 
      
 10 
     | 
    
         
            +
                module AccessorDefinitionMethods
         
     | 
| 
       11 
11 
     | 
    
         
             
                end
         
     | 
| 
       12 
12 
     | 
    
         
             
                module Interface
         
     | 
| 
       13 
13 
     | 
    
         
             
                end
         
     | 
| 
         @@ -19,6 +19,6 @@ module CascadingConfiguration 
     | 
|
| 
       19 
19 
     | 
    
         
             
            end
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
            require_relative 'cascading-configuration-setting/CascadingConfiguration/Setting.rb'
         
     | 
| 
       22 
     | 
    
         
            -
            require_relative 'cascading-configuration-setting/CascadingConfiguration/Setting/ 
     | 
| 
      
 22 
     | 
    
         
            +
            require_relative 'cascading-configuration-setting/CascadingConfiguration/Setting/AccessorDefinitionMethods.rb'
         
     | 
| 
       23 
23 
     | 
    
         
             
            require_relative 'cascading-configuration-setting/CascadingConfiguration/Setting/Interface.rb'
         
     | 
| 
       24 
24 
     | 
    
         
             
            require_relative 'cascading-configuration-setting/CascadingConfiguration/Setting/ModuleInclusionExtensionSupport.rb'
         
     | 
| 
         @@ -33,7 +33,7 @@ module CascadingConfiguration::Setting 
     | 
|
| 
       33 
33 
     | 
    
         
             
                class_or_module.instance_eval do
         
     | 
| 
       34 
34 
     | 
    
         
             
                  extend module_self
         
     | 
| 
       35 
35 
     | 
    
         
             
                  extend module_self::Interface
         
     | 
| 
       36 
     | 
    
         
            -
                  extend module_self:: 
     | 
| 
      
 36 
     | 
    
         
            +
                  extend module_self::AccessorDefinitionMethods
         
     | 
| 
       37 
37 
     | 
    
         
             
                  extend module_self::ModuleInclusionExtensionSupport unless is_a?( Class )
         
     | 
| 
       38 
38 
     | 
    
         
             
                end
         
     | 
| 
       39 
39 
     | 
    
         
             
              end
         
     | 
| 
         @@ -46,7 +46,7 @@ module CascadingConfiguration::Setting 
     | 
|
| 
       46 
46 
     | 
    
         
             
            		module_self = self
         
     | 
| 
       47 
47 
     | 
    
         
             
                class_or_module.instance_eval do
         
     | 
| 
       48 
48 
     | 
    
         
             
                  extend module_self::Interface
         
     | 
| 
       49 
     | 
    
         
            -
                  extend module_self:: 
     | 
| 
      
 49 
     | 
    
         
            +
                  extend module_self::AccessorDefinitionMethods
         
     | 
| 
       50 
50 
     | 
    
         
             
                end
         
     | 
| 
       51 
51 
     | 
    
         
             
              end
         
     | 
| 
       52 
52 
     | 
    
         | 
| 
         @@ -1,5 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         | 
| 
       2 
     | 
    
         
            -
            module CascadingConfiguration::Setting:: 
     | 
| 
      
 2 
     | 
    
         
            +
            module CascadingConfiguration::Setting::AccessorDefinitionMethods
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            	extend  CascadingConfiguration::InternalModuleStub
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
         @@ -9,11 +9,11 @@ module CascadingConfiguration::Setting::ConfigurationAccessors 
     | 
|
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
              def define_cascading_setter( configuration_name )
         
     | 
| 
       11 
11 
     | 
    
         
             
                configuration_setter_name = ( configuration_name.to_s + '=' ).to_s
         
     | 
| 
       12 
     | 
    
         
            -
                [ accessor_instance_support, accessor_module_support ].compact.each do | 
     | 
| 
       13 
     | 
    
         
            -
            			 
     | 
| 
      
 12 
     | 
    
         
            +
                [ accessor_instance_support, accessor_module_support ].compact.each do |accessor_module_support|
         
     | 
| 
      
 13 
     | 
    
         
            +
            			accessor_module_support.module_eval do
         
     | 
| 
       14 
14 
     | 
    
         
             
            				define_method( configuration_setter_name ) do |value|
         
     | 
| 
       15 
15 
     | 
    
         
             
            		      # configuration setter returns setting variable (variable from self), which is now the ID of value
         
     | 
| 
       16 
     | 
    
         
            -
            		      return instance_variable_set(  
     | 
| 
      
 16 
     | 
    
         
            +
            		      return instance_variable_set( accessor_module_support.cascading_variable_name( configuration_name ), value )
         
     | 
| 
       17 
17 
     | 
    
         
             
            		    end
         
     | 
| 
       18 
18 
     | 
    
         
             
            			end
         
     | 
| 
       19 
19 
     | 
    
         
             
            		end
         
     | 
| 
         @@ -26,8 +26,8 @@ module CascadingConfiguration::Setting::ConfigurationAccessors 
     | 
|
| 
       26 
26 
     | 
    
         
             
              def define_cascading_getter( configuration_name )
         
     | 
| 
       27 
27 
     | 
    
         
             
                configuration_getter_name = configuration_name
         
     | 
| 
       28 
28 
     | 
    
         
             
            		module_self = self
         
     | 
| 
       29 
     | 
    
         
            -
                [ accessor_instance_support, accessor_module_support ].compact.each do | 
     | 
| 
       30 
     | 
    
         
            -
            			 
     | 
| 
      
 29 
     | 
    
         
            +
                [ accessor_instance_support, accessor_module_support ].compact.each do |accessor_module_support|
         
     | 
| 
      
 30 
     | 
    
         
            +
            			accessor_module_support.module_eval do
         
     | 
| 
       31 
31 
     | 
    
         
             
            		    define_method( configuration_getter_name ) do
         
     | 
| 
       32 
32 
     | 
    
         
             
            		      # configuration getter returns current setting value (taken from first superclass with setting)
         
     | 
| 
       33 
33 
     | 
    
         
             
            		      # that means first variable that has been set
         
     | 
| 
         @@ -46,7 +46,7 @@ module CascadingConfiguration::Setting::ConfigurationAccessors 
     | 
|
| 
       46 
46 
     | 
    
         
             
                accessor_module_support.module_eval do 
         
     | 
| 
       47 
47 
     | 
    
         
             
            			define_method( configuration_setter_name ) do |value|
         
     | 
| 
       48 
48 
     | 
    
         
             
            	      # configuration setter returns setting variable (variable from self), which is now the ID of value
         
     | 
| 
       49 
     | 
    
         
            -
            	      return instance_variable_set(  
     | 
| 
      
 49 
     | 
    
         
            +
            	      return instance_variable_set( accessor_module_support.cascading_variable_name( configuration_name ), value )
         
     | 
| 
       50 
50 
     | 
    
         
             
            	    end
         
     | 
| 
       51 
51 
     | 
    
         
             
            		end
         
     | 
| 
       52 
52 
     | 
    
         
             
              end
         
     | 
| 
         @@ -72,10 +72,10 @@ module CascadingConfiguration::Setting::ConfigurationAccessors 
     | 
|
| 
       72 
72 
     | 
    
         | 
| 
       73 
73 
     | 
    
         
             
              def define_local_configuration_setter( configuration_name )
         
     | 
| 
       74 
74 
     | 
    
         
             
                configuration_setter_name = ( configuration_name.to_s + '=' ).to_s
         
     | 
| 
       75 
     | 
    
         
            -
                 
     | 
| 
      
 75 
     | 
    
         
            +
                accessor_local_instance_support.module_eval do 
         
     | 
| 
       76 
76 
     | 
    
         
             
            			define_method( configuration_setter_name ) do |value|
         
     | 
| 
       77 
77 
     | 
    
         
             
            	      # configuration setter returns setting variable (variable from self), which is now the ID of value
         
     | 
| 
       78 
     | 
    
         
            -
            	      return instance_variable_set(  
     | 
| 
      
 78 
     | 
    
         
            +
            	      return instance_variable_set( accessor_module_support.cascading_variable_name( configuration_name ), value )
         
     | 
| 
       79 
79 
     | 
    
         
             
            	    end
         
     | 
| 
       80 
80 
     | 
    
         
             
            		end
         
     | 
| 
       81 
81 
     | 
    
         
             
              end
         
     | 
| 
         @@ -86,11 +86,11 @@ module CascadingConfiguration::Setting::ConfigurationAccessors 
     | 
|
| 
       86 
86 
     | 
    
         | 
| 
       87 
87 
     | 
    
         
             
              def define_local_configuration_getter( configuration_name )
         
     | 
| 
       88 
88 
     | 
    
         
             
                configuration_getter_name = configuration_name
         
     | 
| 
       89 
     | 
    
         
            -
                 
     | 
| 
      
 89 
     | 
    
         
            +
                accessor_local_instance_support.module_eval do 
         
     | 
| 
       90 
90 
     | 
    
         
             
            	    define_method( configuration_getter_name ) do
         
     | 
| 
       91 
91 
     | 
    
         
             
            	      # configuration getter returns current setting value (taken from first superclass with setting)
         
     | 
| 
       92 
92 
     | 
    
         
             
            	      # that means first variable that has been set
         
     | 
| 
       93 
     | 
    
         
            -
            	      return  
     | 
| 
      
 93 
     | 
    
         
            +
            	      return instance_variable_get( accessor_module_support.cascading_variable_name( configuration_name ) )
         
     | 
| 
       94 
94 
     | 
    
         
             
            	    end
         
     | 
| 
       95 
95 
     | 
    
         
             
            		end
         
     | 
| 
       96 
96 
     | 
    
         
             
              end
         
     | 
| 
         @@ -18,13 +18,13 @@ module CascadingConfiguration::Setting::Interface 
     | 
|
| 
       18 
18 
     | 
    
         
             
                end
         
     | 
| 
       19 
19 
     | 
    
         
             
              end
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
               
     | 
| 
       22 
     | 
    
         
            -
              #   
     | 
| 
       23 
     | 
    
         
            -
               
     | 
| 
      
 21 
     | 
    
         
            +
              ###############################
         
     | 
| 
      
 22 
     | 
    
         
            +
              #  attr_module_configuration  #
         
     | 
| 
      
 23 
     | 
    
         
            +
              ###############################
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
            	# defines configuration in class or module
         
     | 
| 
       26 
26 
     | 
    
         
             
            	# configuration cascades downward to last class or module
         
     | 
| 
       27 
     | 
    
         
            -
              def  
     | 
| 
      
 27 
     | 
    
         
            +
              def attr_module_configuration( *property_names )
         
     | 
| 
       28 
28 
     | 
    
         
             
                property_names.each do |this_property_name|
         
     | 
| 
       29 
29 
     | 
    
         
             
                  # define configuration setter
         
     | 
| 
       30 
30 
     | 
    
         
             
                  define_class_configuration_setter( this_property_name )
         
     | 
| 
         @@ -32,6 +32,7 @@ module CascadingConfiguration::Setting::Interface 
     | 
|
| 
       32 
32 
     | 
    
         
             
                  define_class_configuration_getter( this_property_name )
         
     | 
| 
       33 
33 
     | 
    
         
             
                end
         
     | 
| 
       34 
34 
     | 
    
         
             
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
            	alias_method :attr_class_configuration, :attr_module_configuration
         
     | 
| 
       35 
36 
     | 
    
         | 
| 
       36 
37 
     | 
    
         
             
              ##############################
         
     | 
| 
       37 
38 
     | 
    
         
             
              #  attr_local_configuration  #
         
     | 
| 
         @@ -40,6 +41,7 @@ module CascadingConfiguration::Setting::Interface 
     | 
|
| 
       40 
41 
     | 
    
         
             
            	# defines configuration in present class or module context
         
     | 
| 
       41 
42 
     | 
    
         
             
            	# configuration does not cascade
         
     | 
| 
       42 
43 
     | 
    
         
             
              def attr_local_configuration( *property_names )
         
     | 
| 
      
 44 
     | 
    
         
            +
            		CascadingConfiguration::Variable.define_accessor_local_instance_support( self )
         
     | 
| 
       43 
45 
     | 
    
         
             
                property_names.each do |this_property_name|
         
     | 
| 
       44 
46 
     | 
    
         
             
                  # define configuration setter
         
     | 
| 
       45 
47 
     | 
    
         
             
                  define_local_configuration_setter( this_property_name )
         
     | 
| 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         | 
| 
       2 
2 
     | 
    
         
             
            require_relative '../../../lib/cascading-configuration-setting.rb'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
            describe CascadingConfiguration::Setting:: 
     | 
| 
      
 4 
     | 
    
         
            +
            describe CascadingConfiguration::Setting::AccessorDefinitionMethods do
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
              #############################
         
     | 
| 
       7 
7 
     | 
    
         
             
              #  define_cascading_setter  #
         
     | 
| 
         @@ -17,7 +17,7 @@ describe CascadingConfiguration::Setting do 
     | 
|
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
                # possibilities:
         
     | 
| 
       19 
19 
     | 
    
         
             
                # * module extended with setting
         
     | 
| 
       20 
     | 
    
         
            -
                module CascadingConfiguration::Setting:: 
     | 
| 
      
 20 
     | 
    
         
            +
                module CascadingConfiguration::Setting::ConfigurationMockExtended
         
     | 
| 
       21 
21 
     | 
    
         
             
                  extend CascadingConfiguration::Setting
         
     | 
| 
       22 
22 
     | 
    
         
             
                  # => singleton gets attr_configuration and configurations
         
     | 
| 
       23 
23 
     | 
    
         
             
                  respond_to?( :attr_configuration ).should == true
         
     | 
| 
         @@ -28,31 +28,31 @@ describe CascadingConfiguration::Setting do 
     | 
|
| 
       28 
28 
     | 
    
         
             
                  instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
       29 
29 
     | 
    
         
             
                  # => including modules and classes get nothing
         
     | 
| 
       30 
30 
     | 
    
         
             
                  module SubmoduleIncluding
         
     | 
| 
       31 
     | 
    
         
            -
                    include CascadingConfiguration::Setting:: 
     | 
| 
      
 31 
     | 
    
         
            +
                    include CascadingConfiguration::Setting::ConfigurationMockExtended
         
     | 
| 
       32 
32 
     | 
    
         
             
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
       33 
33 
     | 
    
         
             
                    respond_to?( :some_configuration ).should == false
         
     | 
| 
       34 
34 
     | 
    
         
             
                  end
         
     | 
| 
       35 
35 
     | 
    
         
             
                  # => extending modules and classes get nothing
         
     | 
| 
       36 
36 
     | 
    
         
             
                  module SubmoduleExtending
         
     | 
| 
       37 
     | 
    
         
            -
                    extend CascadingConfiguration::Setting:: 
     | 
| 
      
 37 
     | 
    
         
            +
                    extend CascadingConfiguration::Setting::ConfigurationMockExtended
         
     | 
| 
       38 
38 
     | 
    
         
             
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
       39 
39 
     | 
    
         
             
                    respond_to?( :some_configuration ).should == false
         
     | 
| 
       40 
40 
     | 
    
         
             
                  end
         
     | 
| 
       41 
41 
     | 
    
         
             
                  # => instances of including and extending classes get nothing
         
     | 
| 
       42 
42 
     | 
    
         
             
                  class ClassIncluding
         
     | 
| 
       43 
     | 
    
         
            -
                    include CascadingConfiguration::Setting:: 
     | 
| 
      
 43 
     | 
    
         
            +
                    include CascadingConfiguration::Setting::ConfigurationMockExtended
         
     | 
| 
       44 
44 
     | 
    
         
             
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
       45 
45 
     | 
    
         
             
                    respond_to?( :some_configuration ).should == false
         
     | 
| 
       46 
46 
     | 
    
         
             
                  end
         
     | 
| 
       47 
47 
     | 
    
         
             
                  class ClassExtending
         
     | 
| 
       48 
     | 
    
         
            -
                    extend CascadingConfiguration::Setting:: 
     | 
| 
      
 48 
     | 
    
         
            +
                    extend CascadingConfiguration::Setting::ConfigurationMockExtended
         
     | 
| 
       49 
49 
     | 
    
         
             
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
       50 
50 
     | 
    
         
             
                    respond_to?( :some_configuration ).should == false
         
     | 
| 
       51 
51 
     | 
    
         
             
                  end
         
     | 
| 
       52 
52 
     | 
    
         
             
                end
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
       54 
54 
     | 
    
         
             
                # * module included with setting
         
     | 
| 
       55 
     | 
    
         
            -
                module CascadingConfiguration::Setting:: 
     | 
| 
      
 55 
     | 
    
         
            +
                module CascadingConfiguration::Setting::ConfigurationMockIncluded
         
     | 
| 
       56 
56 
     | 
    
         
             
                  include CascadingConfiguration::Setting
         
     | 
| 
       57 
57 
     | 
    
         
             
                  # => singleton gets attr_configuration and configurations
         
     | 
| 
       58 
58 
     | 
    
         
             
                  respond_to?( :attr_configuration ).should == true
         
     | 
| 
         @@ -63,7 +63,7 @@ describe CascadingConfiguration::Setting do 
     | 
|
| 
       63 
63 
     | 
    
         
             
                  instance_methods.include?( :some_configuration ).should == true
         
     | 
| 
       64 
64 
     | 
    
         
             
                  # => including modules and classes get attr_configuration and configurations
         
     | 
| 
       65 
65 
     | 
    
         
             
                  module SubmoduleIncluding
         
     | 
| 
       66 
     | 
    
         
            -
                    include CascadingConfiguration::Setting:: 
     | 
| 
      
 66 
     | 
    
         
            +
                    include CascadingConfiguration::Setting::ConfigurationMockIncluded
         
     | 
| 
       67 
67 
     | 
    
         
             
                    instance_methods.include?( :some_configuration ).should == true
         
     | 
| 
       68 
68 
     | 
    
         
             
                    respond_to?( :some_configuration ).should == true
         
     | 
| 
       69 
69 
     | 
    
         
             
                    some_configuration.should == :our_setting_value
         
     | 
| 
         @@ -72,7 +72,7 @@ describe CascadingConfiguration::Setting do 
     | 
|
| 
       72 
72 
     | 
    
         
             
                  end
         
     | 
| 
       73 
73 
     | 
    
         
             
                  # => extending modules and classes get attr_configuration and configurations
         
     | 
| 
       74 
74 
     | 
    
         
             
                  module SubmoduleExtending
         
     | 
| 
       75 
     | 
    
         
            -
                    extend CascadingConfiguration::Setting:: 
     | 
| 
      
 75 
     | 
    
         
            +
                    extend CascadingConfiguration::Setting::ConfigurationMockIncluded
         
     | 
| 
       76 
76 
     | 
    
         
             
                    # if we're extended then we want to use the eigenclass ancestor chain
         
     | 
| 
       77 
77 
     | 
    
         
             
                    # - the first ancestor will be the extending module
         
     | 
| 
       78 
78 
     | 
    
         
             
                    # - the rest of the ancestors will be the extending module's include chain
         
     | 
| 
         @@ -84,7 +84,7 @@ describe CascadingConfiguration::Setting do 
     | 
|
| 
       84 
84 
     | 
    
         
             
                  end
         
     | 
| 
       85 
85 
     | 
    
         
             
                  # => instances of including classes get configurations
         
     | 
| 
       86 
86 
     | 
    
         
             
                  class ClassIncluding
         
     | 
| 
       87 
     | 
    
         
            -
                    include CascadingConfiguration::Setting:: 
     | 
| 
      
 87 
     | 
    
         
            +
                    include CascadingConfiguration::Setting::ConfigurationMockIncluded
         
     | 
| 
       88 
88 
     | 
    
         
             
                    instance_methods.include?( :some_configuration ).should == true
         
     | 
| 
       89 
89 
     | 
    
         
             
                    respond_to?( :some_configuration ).should == true
         
     | 
| 
       90 
90 
     | 
    
         
             
                    some_configuration.should == :our_setting_value
         
     | 
| 
         @@ -98,7 +98,7 @@ describe CascadingConfiguration::Setting do 
     | 
|
| 
       98 
98 
     | 
    
         
             
                  some_configuration.should == :our_setting_value
         
     | 
| 
       99 
99 
     | 
    
         
             
                  # => instances of extending classes get nothing
         
     | 
| 
       100 
100 
     | 
    
         
             
                  class ClassExtending
         
     | 
| 
       101 
     | 
    
         
            -
                    extend CascadingConfiguration::Setting:: 
     | 
| 
      
 101 
     | 
    
         
            +
                    extend CascadingConfiguration::Setting::ConfigurationMockIncluded
         
     | 
| 
       102 
102 
     | 
    
         
             
                    respond_to?( :some_configuration ).should == true
         
     | 
| 
       103 
103 
     | 
    
         
             
                    some_configuration.should == :our_setting_value
         
     | 
| 
       104 
104 
     | 
    
         
             
                    self.some_configuration = :some_other_configuration
         
     | 
| 
         @@ -109,22 +109,248 @@ describe CascadingConfiguration::Setting do 
     | 
|
| 
       109 
109 
     | 
    
         
             
                  setting_class_including_instance.respond_to?( :some_configuration ).should == false
         
     | 
| 
       110 
110 
     | 
    
         
             
                end
         
     | 
| 
       111 
111 
     | 
    
         | 
| 
       112 
     | 
    
         
            -
                class CascadingConfiguration::Setting:: 
     | 
| 
       113 
     | 
    
         
            -
                  include CascadingConfiguration::Setting:: 
     | 
| 
      
 112 
     | 
    
         
            +
                class CascadingConfiguration::Setting::ConfigurationMockClass
         
     | 
| 
      
 113 
     | 
    
         
            +
                  include CascadingConfiguration::Setting::ConfigurationMockIncluded::SubmoduleIncluding
         
     | 
| 
       114 
114 
     | 
    
         
             
                  some_configuration.should == :another_configuration
         
     | 
| 
       115 
115 
     | 
    
         
             
                  self.some_configuration = :our_setting_value
         
     | 
| 
       116 
116 
     | 
    
         
             
                  some_configuration.should == :our_setting_value
         
     | 
| 
       117 
117 
     | 
    
         
             
                end
         
     | 
| 
       118 
     | 
    
         
            -
                class CascadingConfiguration::Setting:: 
     | 
| 
      
 118 
     | 
    
         
            +
                class CascadingConfiguration::Setting::ConfigurationMockClassSub1 < CascadingConfiguration::Setting::ConfigurationMockClass
         
     | 
| 
       119 
119 
     | 
    
         
             
                  some_configuration.should == :our_setting_value
         
     | 
| 
       120 
120 
     | 
    
         
             
                  self.some_configuration = :our_other_setting_value
         
     | 
| 
       121 
121 
     | 
    
         
             
                  some_configuration.should == :our_other_setting_value
         
     | 
| 
       122 
122 
     | 
    
         
             
                end
         
     | 
| 
       123 
     | 
    
         
            -
                class CascadingConfiguration::Setting:: 
     | 
| 
      
 123 
     | 
    
         
            +
                class CascadingConfiguration::Setting::ConfigurationMockClassSub2 < CascadingConfiguration::Setting::ConfigurationMockClassSub1
         
     | 
| 
       124 
124 
     | 
    
         
             
                  some_configuration.should == :our_other_setting_value
         
     | 
| 
       125 
125 
     | 
    
         
             
                  self.some_configuration = :a_third_setting_value
         
     | 
| 
       126 
126 
     | 
    
         
             
                  some_configuration.should == :a_third_setting_value
         
     | 
| 
       127 
127 
     | 
    
         
             
                end
         
     | 
| 
       128 
128 
     | 
    
         
             
              end
         
     | 
| 
       129 
129 
     | 
    
         | 
| 
      
 130 
     | 
    
         
            +
              ###############################
         
     | 
| 
      
 131 
     | 
    
         
            +
              #  attr_module_configuration  #
         
     | 
| 
      
 132 
     | 
    
         
            +
              #  attr_class_configuration   #
         
     | 
| 
      
 133 
     | 
    
         
            +
              ###############################
         
     | 
| 
      
 134 
     | 
    
         
            +
              
         
     | 
| 
      
 135 
     | 
    
         
            +
              it 'can define a class configuration setting, which will not cascade to instances' do
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
                # extending a module or class works like a finalizer for the cascading configuration
         
     | 
| 
      
 138 
     | 
    
         
            +
                # if the configuration is re-opened at a later point (including or extending a lower ancestor)
         
     | 
| 
      
 139 
     | 
    
         
            +
                # then the configuration will still cascade upward
         
     | 
| 
      
 140 
     | 
    
         
            +
                # this permits ancestors in the heirarchy to skip out on configurations
         
     | 
| 
      
 141 
     | 
    
         
            +
                # upward cascade can be frozen at any point using :freeze!, which will prevent further upward lookup
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
      
 143 
     | 
    
         
            +
                # possibilities:
         
     | 
| 
      
 144 
     | 
    
         
            +
                # * module extended with setting
         
     | 
| 
      
 145 
     | 
    
         
            +
                module CascadingConfiguration::Setting::ClassConfigurationMockExtended
         
     | 
| 
      
 146 
     | 
    
         
            +
                  extend CascadingConfiguration::Setting
         
     | 
| 
      
 147 
     | 
    
         
            +
                  # => singleton gets attr_module_configuration and configurations
         
     | 
| 
      
 148 
     | 
    
         
            +
                  respond_to?( :attr_module_configuration ).should == true
         
     | 
| 
      
 149 
     | 
    
         
            +
                  method( :attr_module_configuration ).should == method( :attr_class_configuration )
         
     | 
| 
      
 150 
     | 
    
         
            +
                  attr_module_configuration :some_configuration
         
     | 
| 
      
 151 
     | 
    
         
            +
                  respond_to?( :attr_module_configuration ).should == true
         
     | 
| 
      
 152 
     | 
    
         
            +
                  self.some_configuration = :our_setting_value
         
     | 
| 
      
 153 
     | 
    
         
            +
                  some_configuration.should == :our_setting_value
         
     | 
| 
      
 154 
     | 
    
         
            +
                  instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 155 
     | 
    
         
            +
                  # => including modules and classes get nothing
         
     | 
| 
      
 156 
     | 
    
         
            +
                  module SubmoduleIncluding
         
     | 
| 
      
 157 
     | 
    
         
            +
                    include CascadingConfiguration::Setting::ClassConfigurationMockExtended
         
     | 
| 
      
 158 
     | 
    
         
            +
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 159 
     | 
    
         
            +
                    respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 160 
     | 
    
         
            +
                  end
         
     | 
| 
      
 161 
     | 
    
         
            +
                  # => extending modules and classes get nothing
         
     | 
| 
      
 162 
     | 
    
         
            +
                  module SubmoduleExtending
         
     | 
| 
      
 163 
     | 
    
         
            +
                    extend CascadingConfiguration::Setting::ClassConfigurationMockExtended
         
     | 
| 
      
 164 
     | 
    
         
            +
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 165 
     | 
    
         
            +
                    respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 166 
     | 
    
         
            +
                  end
         
     | 
| 
      
 167 
     | 
    
         
            +
                  # => instances of including and extending classes get nothing
         
     | 
| 
      
 168 
     | 
    
         
            +
                  class ClassIncluding
         
     | 
| 
      
 169 
     | 
    
         
            +
                    include CascadingConfiguration::Setting::ClassConfigurationMockExtended
         
     | 
| 
      
 170 
     | 
    
         
            +
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 171 
     | 
    
         
            +
                    respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 172 
     | 
    
         
            +
                  end
         
     | 
| 
      
 173 
     | 
    
         
            +
                  class ClassExtending
         
     | 
| 
      
 174 
     | 
    
         
            +
                    extend CascadingConfiguration::Setting::ClassConfigurationMockExtended
         
     | 
| 
      
 175 
     | 
    
         
            +
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 176 
     | 
    
         
            +
                    respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 177 
     | 
    
         
            +
                  end
         
     | 
| 
      
 178 
     | 
    
         
            +
                end
         
     | 
| 
      
 179 
     | 
    
         
            +
             
     | 
| 
      
 180 
     | 
    
         
            +
                # * module included with setting
         
     | 
| 
      
 181 
     | 
    
         
            +
                module CascadingConfiguration::Setting::ClassConfigurationMockIncluded
         
     | 
| 
      
 182 
     | 
    
         
            +
                  include CascadingConfiguration::Setting
         
     | 
| 
      
 183 
     | 
    
         
            +
                  # => singleton gets attr_module_configuration and configurations
         
     | 
| 
      
 184 
     | 
    
         
            +
                  respond_to?( :attr_module_configuration ).should == true
         
     | 
| 
      
 185 
     | 
    
         
            +
                  attr_module_configuration :some_configuration
         
     | 
| 
      
 186 
     | 
    
         
            +
                  respond_to?( :some_configuration ).should == true
         
     | 
| 
      
 187 
     | 
    
         
            +
                  self.some_configuration = :our_setting_value
         
     | 
| 
      
 188 
     | 
    
         
            +
                  some_configuration.should == :our_setting_value
         
     | 
| 
      
 189 
     | 
    
         
            +
                  instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 190 
     | 
    
         
            +
                  # => including modules and classes get attr_module_configuration and configurations
         
     | 
| 
      
 191 
     | 
    
         
            +
                  module SubmoduleIncluding
         
     | 
| 
      
 192 
     | 
    
         
            +
                    include CascadingConfiguration::Setting::ClassConfigurationMockIncluded
         
     | 
| 
      
 193 
     | 
    
         
            +
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 194 
     | 
    
         
            +
                    respond_to?( :some_configuration ).should == true
         
     | 
| 
      
 195 
     | 
    
         
            +
                    some_configuration.should == :our_setting_value
         
     | 
| 
      
 196 
     | 
    
         
            +
                    self.some_configuration = :another_configuration
         
     | 
| 
      
 197 
     | 
    
         
            +
                    some_configuration.should == :another_configuration
         
     | 
| 
      
 198 
     | 
    
         
            +
                  end
         
     | 
| 
      
 199 
     | 
    
         
            +
                  # => extending modules and classes get attr_module_configuration and configurations
         
     | 
| 
      
 200 
     | 
    
         
            +
                  module SubmoduleExtending
         
     | 
| 
      
 201 
     | 
    
         
            +
                    extend CascadingConfiguration::Setting::ClassConfigurationMockIncluded
         
     | 
| 
      
 202 
     | 
    
         
            +
                    # if we're extended then we want to use the eigenclass ancestor chain
         
     | 
| 
      
 203 
     | 
    
         
            +
                    # - the first ancestor will be the extending module
         
     | 
| 
      
 204 
     | 
    
         
            +
                    # - the rest of the ancestors will be the extending module's include chain
         
     | 
| 
      
 205 
     | 
    
         
            +
                    respond_to?( :some_configuration ).should == true
         
     | 
| 
      
 206 
     | 
    
         
            +
                    some_configuration.should == :our_setting_value
         
     | 
| 
      
 207 
     | 
    
         
            +
                    self.some_configuration = :some_other_configuration
         
     | 
| 
      
 208 
     | 
    
         
            +
                    some_configuration.should == :some_other_configuration
         
     | 
| 
      
 209 
     | 
    
         
            +
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 210 
     | 
    
         
            +
                  end
         
     | 
| 
      
 211 
     | 
    
         
            +
                  # => instances of including classes get configurations
         
     | 
| 
      
 212 
     | 
    
         
            +
                  class ClassIncluding
         
     | 
| 
      
 213 
     | 
    
         
            +
                    include CascadingConfiguration::Setting::ClassConfigurationMockIncluded
         
     | 
| 
      
 214 
     | 
    
         
            +
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 215 
     | 
    
         
            +
                    respond_to?( :some_configuration ).should == true
         
     | 
| 
      
 216 
     | 
    
         
            +
                    some_configuration.should == :our_setting_value
         
     | 
| 
      
 217 
     | 
    
         
            +
                    self.some_configuration = :another_configuration
         
     | 
| 
      
 218 
     | 
    
         
            +
                    some_configuration.should == :another_configuration
         
     | 
| 
      
 219 
     | 
    
         
            +
                  end
         
     | 
| 
      
 220 
     | 
    
         
            +
                  setting_class_including_instance = ClassIncluding.new
         
     | 
| 
      
 221 
     | 
    
         
            +
                  setting_class_including_instance.respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 222 
     | 
    
         
            +
                  # => instances of extending classes get nothing
         
     | 
| 
      
 223 
     | 
    
         
            +
                  class ClassExtending
         
     | 
| 
      
 224 
     | 
    
         
            +
                    extend CascadingConfiguration::Setting::ClassConfigurationMockIncluded
         
     | 
| 
      
 225 
     | 
    
         
            +
                    respond_to?( :some_configuration ).should == true
         
     | 
| 
      
 226 
     | 
    
         
            +
                    some_configuration.should == :our_setting_value
         
     | 
| 
      
 227 
     | 
    
         
            +
                    self.some_configuration = :some_other_configuration
         
     | 
| 
      
 228 
     | 
    
         
            +
                    some_configuration.should == :some_other_configuration
         
     | 
| 
      
 229 
     | 
    
         
            +
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 230 
     | 
    
         
            +
                  end
         
     | 
| 
      
 231 
     | 
    
         
            +
                  setting_class_including_instance = ClassExtending.new
         
     | 
| 
      
 232 
     | 
    
         
            +
                  setting_class_including_instance.respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 233 
     | 
    
         
            +
                end
         
     | 
| 
      
 234 
     | 
    
         
            +
             
     | 
| 
      
 235 
     | 
    
         
            +
                class CascadingConfiguration::Setting::ClassConfigurationMockClass
         
     | 
| 
      
 236 
     | 
    
         
            +
                  include CascadingConfiguration::Setting::ClassConfigurationMockIncluded::SubmoduleIncluding
         
     | 
| 
      
 237 
     | 
    
         
            +
                  some_configuration.should == :another_configuration
         
     | 
| 
      
 238 
     | 
    
         
            +
                  self.some_configuration = :our_setting_value
         
     | 
| 
      
 239 
     | 
    
         
            +
                  some_configuration.should == :our_setting_value
         
     | 
| 
      
 240 
     | 
    
         
            +
                end
         
     | 
| 
      
 241 
     | 
    
         
            +
                class CascadingConfiguration::Setting::ClassConfigurationMockClassSub1 < CascadingConfiguration::Setting::ClassConfigurationMockClass
         
     | 
| 
      
 242 
     | 
    
         
            +
                  some_configuration.should == :our_setting_value
         
     | 
| 
      
 243 
     | 
    
         
            +
                  self.some_configuration = :our_other_setting_value
         
     | 
| 
      
 244 
     | 
    
         
            +
                  some_configuration.should == :our_other_setting_value
         
     | 
| 
      
 245 
     | 
    
         
            +
                end
         
     | 
| 
      
 246 
     | 
    
         
            +
                class CascadingConfiguration::Setting::ClassConfigurationMockClassSub2 < CascadingConfiguration::Setting::ClassConfigurationMockClassSub1
         
     | 
| 
      
 247 
     | 
    
         
            +
                  some_configuration.should == :our_other_setting_value
         
     | 
| 
      
 248 
     | 
    
         
            +
                  self.some_configuration = :a_third_setting_value
         
     | 
| 
      
 249 
     | 
    
         
            +
                  some_configuration.should == :a_third_setting_value
         
     | 
| 
      
 250 
     | 
    
         
            +
                end
         
     | 
| 
      
 251 
     | 
    
         
            +
              end
         
     | 
| 
      
 252 
     | 
    
         
            +
              
         
     | 
| 
      
 253 
     | 
    
         
            +
              ##############################
         
     | 
| 
      
 254 
     | 
    
         
            +
              #  attr_local_configuration  #
         
     | 
| 
      
 255 
     | 
    
         
            +
              ##############################
         
     | 
| 
      
 256 
     | 
    
         
            +
              
         
     | 
| 
      
 257 
     | 
    
         
            +
              it 'can define a local configuration setting, which will not cascade' do
         
     | 
| 
      
 258 
     | 
    
         
            +
             
     | 
| 
      
 259 
     | 
    
         
            +
                # extending a module or class works like a finalizer for the cascading configuration
         
     | 
| 
      
 260 
     | 
    
         
            +
                # if the configuration is re-opened at a later point (including or extending a lower ancestor)
         
     | 
| 
      
 261 
     | 
    
         
            +
                # then the configuration will still cascade upward
         
     | 
| 
      
 262 
     | 
    
         
            +
                # this permits ancestors in the heirarchy to skip out on configurations
         
     | 
| 
      
 263 
     | 
    
         
            +
                # upward cascade can be frozen at any point using :freeze!, which will prevent further upward lookup
         
     | 
| 
      
 264 
     | 
    
         
            +
             
     | 
| 
      
 265 
     | 
    
         
            +
                # possibilities:
         
     | 
| 
      
 266 
     | 
    
         
            +
                # * module extended with setting
         
     | 
| 
      
 267 
     | 
    
         
            +
                module CascadingConfiguration::Setting::LocalConfigurationMockExtended
         
     | 
| 
      
 268 
     | 
    
         
            +
                  extend CascadingConfiguration::Setting
         
     | 
| 
      
 269 
     | 
    
         
            +
                  # => singleton gets attr_configuration and configurations
         
     | 
| 
      
 270 
     | 
    
         
            +
                  respond_to?( :attr_local_configuration ).should == true
         
     | 
| 
      
 271 
     | 
    
         
            +
                  attr_local_configuration :some_configuration
         
     | 
| 
      
 272 
     | 
    
         
            +
                  respond_to?( :some_configuration ).should == true
         
     | 
| 
      
 273 
     | 
    
         
            +
                  self.some_configuration = :our_setting_value
         
     | 
| 
      
 274 
     | 
    
         
            +
                  some_configuration.should == :our_setting_value
         
     | 
| 
      
 275 
     | 
    
         
            +
                  instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 276 
     | 
    
         
            +
                  # => including modules and classes get nothing
         
     | 
| 
      
 277 
     | 
    
         
            +
                  module SubmoduleIncluding
         
     | 
| 
      
 278 
     | 
    
         
            +
                    include CascadingConfiguration::Setting::LocalConfigurationMockExtended
         
     | 
| 
      
 279 
     | 
    
         
            +
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 280 
     | 
    
         
            +
                    respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 281 
     | 
    
         
            +
                  end
         
     | 
| 
      
 282 
     | 
    
         
            +
                  # => extending modules and classes get nothing
         
     | 
| 
      
 283 
     | 
    
         
            +
                  module SubmoduleExtending
         
     | 
| 
      
 284 
     | 
    
         
            +
                    extend CascadingConfiguration::Setting::LocalConfigurationMockExtended
         
     | 
| 
      
 285 
     | 
    
         
            +
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 286 
     | 
    
         
            +
                    respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 287 
     | 
    
         
            +
                  end
         
     | 
| 
      
 288 
     | 
    
         
            +
                  # => instances of including and extending classes get nothing
         
     | 
| 
      
 289 
     | 
    
         
            +
                  class ClassIncluding
         
     | 
| 
      
 290 
     | 
    
         
            +
                    include CascadingConfiguration::Setting::LocalConfigurationMockExtended
         
     | 
| 
      
 291 
     | 
    
         
            +
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 292 
     | 
    
         
            +
                    respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 293 
     | 
    
         
            +
                  end
         
     | 
| 
      
 294 
     | 
    
         
            +
                  class ClassExtending
         
     | 
| 
      
 295 
     | 
    
         
            +
                    extend CascadingConfiguration::Setting::LocalConfigurationMockExtended
         
     | 
| 
      
 296 
     | 
    
         
            +
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 297 
     | 
    
         
            +
                    respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 298 
     | 
    
         
            +
                  end
         
     | 
| 
      
 299 
     | 
    
         
            +
                end
         
     | 
| 
      
 300 
     | 
    
         
            +
              
         
     | 
| 
      
 301 
     | 
    
         
            +
                # * module included with setting
         
     | 
| 
      
 302 
     | 
    
         
            +
                module CascadingConfiguration::Setting::LocalConfigurationMockIncluded
         
     | 
| 
      
 303 
     | 
    
         
            +
                  include CascadingConfiguration::Setting
         
     | 
| 
      
 304 
     | 
    
         
            +
                  # => singleton gets attr_configuration and configurations
         
     | 
| 
      
 305 
     | 
    
         
            +
                  respond_to?( :attr_local_configuration ).should == true
         
     | 
| 
      
 306 
     | 
    
         
            +
                  attr_local_configuration :some_configuration
         
     | 
| 
      
 307 
     | 
    
         
            +
                  respond_to?( :some_configuration ).should == true
         
     | 
| 
      
 308 
     | 
    
         
            +
                  self.some_configuration = :our_setting_value
         
     | 
| 
      
 309 
     | 
    
         
            +
                  some_configuration.should == :our_setting_value
         
     | 
| 
      
 310 
     | 
    
         
            +
                  instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 311 
     | 
    
         
            +
                  # => including modules and classes get attr_configuration and configurations
         
     | 
| 
      
 312 
     | 
    
         
            +
                  module SubmoduleIncluding
         
     | 
| 
      
 313 
     | 
    
         
            +
                    include CascadingConfiguration::Setting::LocalConfigurationMockIncluded
         
     | 
| 
      
 314 
     | 
    
         
            +
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 315 
     | 
    
         
            +
                    respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 316 
     | 
    
         
            +
                  end
         
     | 
| 
      
 317 
     | 
    
         
            +
                  # => extending modules and classes get attr_configuration and configurations
         
     | 
| 
      
 318 
     | 
    
         
            +
                  module SubmoduleExtending
         
     | 
| 
      
 319 
     | 
    
         
            +
                    extend CascadingConfiguration::Setting::LocalConfigurationMockIncluded
         
     | 
| 
      
 320 
     | 
    
         
            +
                    # if we're extended then we want to use the eigenclass ancestor chain
         
     | 
| 
      
 321 
     | 
    
         
            +
                    # - the first ancestor will be the extending module
         
     | 
| 
      
 322 
     | 
    
         
            +
                    # - the rest of the ancestors will be the extending module's include chain
         
     | 
| 
      
 323 
     | 
    
         
            +
                    respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 324 
     | 
    
         
            +
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 325 
     | 
    
         
            +
                  end
         
     | 
| 
      
 326 
     | 
    
         
            +
                  # => instances of including classes get configurations
         
     | 
| 
      
 327 
     | 
    
         
            +
                  class ClassIncluding
         
     | 
| 
      
 328 
     | 
    
         
            +
                    include CascadingConfiguration::Setting::LocalConfigurationMockIncluded
         
     | 
| 
      
 329 
     | 
    
         
            +
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 330 
     | 
    
         
            +
                    respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 331 
     | 
    
         
            +
                  end
         
     | 
| 
      
 332 
     | 
    
         
            +
                  setting_class_including_instance = ClassIncluding.new
         
     | 
| 
      
 333 
     | 
    
         
            +
                  setting_class_including_instance.respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 334 
     | 
    
         
            +
                  # => instances of extending classes get nothing
         
     | 
| 
      
 335 
     | 
    
         
            +
                  class ClassExtending
         
     | 
| 
      
 336 
     | 
    
         
            +
                    extend CascadingConfiguration::Setting::LocalConfigurationMockIncluded
         
     | 
| 
      
 337 
     | 
    
         
            +
                    respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 338 
     | 
    
         
            +
                    instance_methods.include?( :some_configuration ).should == false
         
     | 
| 
      
 339 
     | 
    
         
            +
                  end
         
     | 
| 
      
 340 
     | 
    
         
            +
                  setting_class_including_instance = ClassExtending.new
         
     | 
| 
      
 341 
     | 
    
         
            +
                  setting_class_including_instance.respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 342 
     | 
    
         
            +
                end
         
     | 
| 
      
 343 
     | 
    
         
            +
             
     | 
| 
      
 344 
     | 
    
         
            +
                class CascadingConfiguration::Setting::LocalConfigurationMockClass
         
     | 
| 
      
 345 
     | 
    
         
            +
                  include CascadingConfiguration::Setting::LocalConfigurationMockIncluded::SubmoduleIncluding
         
     | 
| 
      
 346 
     | 
    
         
            +
                  respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 347 
     | 
    
         
            +
                end
         
     | 
| 
      
 348 
     | 
    
         
            +
                class CascadingConfiguration::Setting::LocalConfigurationMockClassSub1 < CascadingConfiguration::Setting::LocalConfigurationMockClass
         
     | 
| 
      
 349 
     | 
    
         
            +
                  respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 350 
     | 
    
         
            +
                end
         
     | 
| 
      
 351 
     | 
    
         
            +
                class CascadingConfiguration::Setting::LocalConfigurationMockClassSub2 < CascadingConfiguration::Setting::LocalConfigurationMockClassSub1
         
     | 
| 
      
 352 
     | 
    
         
            +
                  respond_to?( :some_configuration ).should == false
         
     | 
| 
      
 353 
     | 
    
         
            +
                end
         
     | 
| 
      
 354 
     | 
    
         
            +
              end
         
     | 
| 
      
 355 
     | 
    
         
            +
              
         
     | 
| 
       130 
356 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version 
     | 
|
| 
       4 
4 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       5 
5 
     | 
    
         
             
              segments: 
         
     | 
| 
       6 
6 
     | 
    
         
             
              - 1
         
     | 
| 
       7 
     | 
    
         
            -
              -  
     | 
| 
       8 
     | 
    
         
            -
              -  
     | 
| 
       9 
     | 
    
         
            -
              version: 1. 
     | 
| 
      
 7 
     | 
    
         
            +
              - 2
         
     | 
| 
      
 8 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 9 
     | 
    
         
            +
              version: 1.2.0
         
     | 
| 
       10 
10 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       11 
11 
     | 
    
         
             
            authors: 
         
     | 
| 
       12 
12 
     | 
    
         
             
            - Asher
         
     | 
| 
         @@ -39,12 +39,12 @@ extensions: [] 
     | 
|
| 
       39 
39 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       40 
40 
     | 
    
         | 
| 
       41 
41 
     | 
    
         
             
            files: 
         
     | 
| 
       42 
     | 
    
         
            -
            - lib/cascading-configuration-setting/CascadingConfiguration/Setting/ 
     | 
| 
      
 42 
     | 
    
         
            +
            - lib/cascading-configuration-setting/CascadingConfiguration/Setting/AccessorDefinitionMethods.rb
         
     | 
| 
       43 
43 
     | 
    
         
             
            - lib/cascading-configuration-setting/CascadingConfiguration/Setting/Interface.rb
         
     | 
| 
       44 
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/ 
     | 
| 
      
 47 
     | 
    
         
            +
            - spec/CascadingConfiguration/Setting/AccessorDefinitionMethods_spec.rb
         
     | 
| 
       48 
48 
     | 
    
         
             
            - spec/CascadingConfiguration/Setting_spec.rb
         
     | 
| 
       49 
49 
     | 
    
         
             
            - README.md
         
     | 
| 
       50 
50 
     | 
    
         
             
            - README.rdoc
         
     |