cascading-configuration-hash 1.4.0 → 1.4.1
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/lib/cascading-configuration-hash.rb +3 -0
- data/lib/cascading-configuration-hash/CascadingConfiguration/Hash.rb +2 -0
- data/lib/cascading-configuration-hash/CascadingConfiguration/Hash/AccessorDefinitionMethods.rb +30 -3
- data/lib/cascading-configuration-hash/CascadingConfiguration/Hash/Interface.rb +6 -6
- data/lib/cascading-configuration-hash/CascadingConfiguration/Hash/Interface/Instance.rb +26 -0
- data/spec/CascadingConfiguration/Hash_spec.rb +144 -22
- metadata +3 -2
@@ -16,6 +16,8 @@ module CascadingConfiguration
|
|
16
16
|
module AccessorDefinitionMethods
|
17
17
|
end
|
18
18
|
module Interface
|
19
|
+
module Instance
|
20
|
+
end
|
19
21
|
end
|
20
22
|
module ObjectInstance
|
21
23
|
end
|
@@ -30,3 +32,4 @@ require_relative 'cascading-configuration-hash/CascadingConfiguration/_private_/
|
|
30
32
|
require_relative 'cascading-configuration-hash/CascadingConfiguration/Hash.rb'
|
31
33
|
require_relative 'cascading-configuration-hash/CascadingConfiguration/Hash/AccessorDefinitionMethods.rb'
|
32
34
|
require_relative 'cascading-configuration-hash/CascadingConfiguration/Hash/Interface.rb'
|
35
|
+
require_relative 'cascading-configuration-hash/CascadingConfiguration/Hash/Interface/Instance.rb'
|
@@ -15,6 +15,8 @@ module CascadingConfiguration::Hash
|
|
15
15
|
class_or_module.extend_also_extends( CascadingConfiguration::Variable::EigenclassConfigurationChain )
|
16
16
|
end
|
17
17
|
|
18
|
+
include_cascades_extends( CascadingConfiguration::Hash::Interface::Instance )
|
19
|
+
|
18
20
|
include_cascades_extends( CascadingConfiguration::Hash )
|
19
21
|
|
20
22
|
prepend_module_include do |class_or_module|
|
data/lib/cascading-configuration-hash/CascadingConfiguration/Hash/AccessorDefinitionMethods.rb
CHANGED
@@ -98,7 +98,7 @@ module CascadingConfiguration::Hash::AccessorDefinitionMethods
|
|
98
98
|
|
99
99
|
def define_instance_configuration_hash_setter( configuration_name )
|
100
100
|
configuration_setter_name = ( configuration_name.to_s + '=' ).to_sym
|
101
|
-
|
101
|
+
accessor_instance_support.module_eval do
|
102
102
|
define_method( configuration_setter_name ) do |hash|
|
103
103
|
# we want the hash to supplant existing config
|
104
104
|
return composite_hash_for_cascading_configuration( configuration_name ).replace( hash )
|
@@ -106,11 +106,38 @@ module CascadingConfiguration::Hash::AccessorDefinitionMethods
|
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
109
|
-
|
109
|
+
###############################################
|
110
110
|
# define_instance_configuration_hash_getter #
|
111
|
-
|
111
|
+
###############################################
|
112
112
|
|
113
113
|
def define_instance_configuration_hash_getter( configuration_name )
|
114
|
+
configuration_getter_name = configuration_name
|
115
|
+
accessor_instance_support.module_eval do
|
116
|
+
define_method( configuration_getter_name ) do
|
117
|
+
return composite_hash_for_cascading_configuration( configuration_name )
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
#############################################
|
123
|
+
# define_object_configuration_hash_setter #
|
124
|
+
#############################################
|
125
|
+
|
126
|
+
def define_object_configuration_hash_setter( configuration_name )
|
127
|
+
configuration_setter_name = ( configuration_name.to_s + '=' ).to_sym
|
128
|
+
accessor_local_instance_support.module_eval do
|
129
|
+
define_method( configuration_setter_name ) do |hash|
|
130
|
+
# we want the hash to supplant existing config
|
131
|
+
return composite_hash_for_cascading_configuration( configuration_name ).replace( hash )
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
#############################################
|
137
|
+
# define_object_configuration_hash_getter #
|
138
|
+
#############################################
|
139
|
+
|
140
|
+
def define_object_configuration_hash_getter( configuration_name )
|
114
141
|
configuration_getter_name = configuration_name
|
115
142
|
accessor_local_instance_support.module_eval do
|
116
143
|
define_method( configuration_getter_name ) do
|
@@ -68,22 +68,22 @@ module CascadingConfiguration::Hash::Interface
|
|
68
68
|
|
69
69
|
end
|
70
70
|
|
71
|
-
|
72
|
-
#
|
73
|
-
|
71
|
+
####################################
|
72
|
+
# attr_object_configuration_hash #
|
73
|
+
####################################
|
74
74
|
|
75
75
|
# defines configuration in present class or module context
|
76
76
|
# configuration does not cascade
|
77
|
-
def
|
77
|
+
def attr_object_configuration_hash( *property_names, & compositing_block )
|
78
78
|
|
79
79
|
CascadingConfiguration::Variable.define_accessor_local_instance_support( self )
|
80
80
|
|
81
81
|
property_names.each do |this_property_name|
|
82
82
|
accessor_module_support.set_compositing_proc( this_property_name, compositing_block ) if block_given?
|
83
83
|
# define configuration setter
|
84
|
-
|
84
|
+
define_object_configuration_hash_setter( this_property_name )
|
85
85
|
# define configuration getter
|
86
|
-
|
86
|
+
define_object_configuration_hash_getter( this_property_name )
|
87
87
|
end
|
88
88
|
|
89
89
|
return self
|
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
module CascadingConfiguration::Hash::Interface::Instance
|
3
|
+
|
4
|
+
extend CascadingConfiguration::InternalModuleStub
|
5
|
+
|
6
|
+
######################################
|
7
|
+
# attr_instance_configuration_hash #
|
8
|
+
######################################
|
9
|
+
|
10
|
+
# defines configuration in present class or module context
|
11
|
+
# configuration does not cascade
|
12
|
+
def attr_instance_configuration_hash( *property_names, & compositing_block )
|
13
|
+
|
14
|
+
property_names.each do |this_property_name|
|
15
|
+
accessor_module_support.set_compositing_proc( this_property_name, compositing_block ) if block_given?
|
16
|
+
# define configuration setter
|
17
|
+
define_instance_configuration_hash_setter( this_property_name )
|
18
|
+
# define configuration getter
|
19
|
+
define_instance_configuration_hash_getter( this_property_name )
|
20
|
+
end
|
21
|
+
|
22
|
+
return self
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -383,7 +383,7 @@ describe CascadingConfiguration::Hash do
|
|
383
383
|
end
|
384
384
|
|
385
385
|
object_instance_one = CascadingConfiguration::Hash::ClassConfigurationMockClass.new
|
386
|
-
object_instance_one.respond_to?( :
|
386
|
+
object_instance_one.respond_to?( :configuration_setting ).should == false
|
387
387
|
object_instance_one.instance_variables.empty?.should == true
|
388
388
|
|
389
389
|
class CascadingConfiguration::Hash::ClassConfigurationMockClassSub1 < CascadingConfiguration::Hash::ClassConfigurationMockClass
|
@@ -397,7 +397,7 @@ describe CascadingConfiguration::Hash do
|
|
397
397
|
end
|
398
398
|
|
399
399
|
object_instance_two = CascadingConfiguration::Hash::ClassConfigurationMockClassSub1.new
|
400
|
-
object_instance_two.respond_to?( :
|
400
|
+
object_instance_two.respond_to?( :configuration_setting ).should == false
|
401
401
|
|
402
402
|
# change ancestor setting
|
403
403
|
CascadingConfiguration::Hash::ClassConfigurationMockClass.configuration_setting[ :a_yet_unused_configuration ] = :some_value
|
@@ -561,7 +561,7 @@ describe CascadingConfiguration::Hash do
|
|
561
561
|
end
|
562
562
|
|
563
563
|
object_instance_one = CascadingConfiguration::Hash::LocalConfigurationMockClass.new
|
564
|
-
object_instance_one.respond_to?( :
|
564
|
+
object_instance_one.respond_to?( :configuration_setting ).should == true
|
565
565
|
object_instance_one.instance_variables.empty?.should == true
|
566
566
|
|
567
567
|
class CascadingConfiguration::Hash::LocalConfigurationMockClassSub1 < CascadingConfiguration::Hash::LocalConfigurationMockClass
|
@@ -571,12 +571,11 @@ describe CascadingConfiguration::Hash do
|
|
571
571
|
end
|
572
572
|
|
573
573
|
object_instance_two = CascadingConfiguration::Hash::LocalConfigurationMockClassSub1.new
|
574
|
-
object_instance_two.respond_to?( :
|
574
|
+
object_instance_two.respond_to?( :configuration_setting ).should == true
|
575
575
|
object_instance_two.instance_variables.empty?.should == true
|
576
576
|
|
577
577
|
end
|
578
578
|
|
579
|
-
|
580
579
|
######################################
|
581
580
|
# attr_instance_configuration_hash #
|
582
581
|
######################################
|
@@ -598,12 +597,7 @@ describe CascadingConfiguration::Hash do
|
|
598
597
|
module CascadingConfiguration::Hash::InstanceConfigurationMockModuleExtended
|
599
598
|
extend CascadingConfiguration::Hash
|
600
599
|
# => singleton gets attr_configuration and configurations
|
601
|
-
respond_to?( :attr_instance_configuration_hash ).should ==
|
602
|
-
attr_instance_configuration_hash :configuration_setting
|
603
|
-
respond_to?( :configuration_setting ).should == true
|
604
|
-
configuration_setting.should == {}
|
605
|
-
self.configuration_setting[ :a_configuration ] = :some_value
|
606
|
-
configuration_setting.should == { :a_configuration => :some_value }
|
600
|
+
respond_to?( :attr_instance_configuration_hash ).should == false
|
607
601
|
instance_methods.include?( :configuration_setting ).should == false
|
608
602
|
instance_variables.empty?.should == true
|
609
603
|
# => including modules and classes get nothing
|
@@ -641,6 +635,134 @@ describe CascadingConfiguration::Hash do
|
|
641
635
|
# => singleton gets attr_configuration and configurations
|
642
636
|
respond_to?( :attr_instance_configuration_hash ).should == true
|
643
637
|
attr_instance_configuration_hash :configuration_setting
|
638
|
+
respond_to?( :configuration_setting ).should == false
|
639
|
+
instance_methods.include?( :configuration_setting ).should == true
|
640
|
+
instance_variables.empty?.should == true
|
641
|
+
# => including modules and classes get attr_configuration and configurations
|
642
|
+
module SubmoduleIncluding
|
643
|
+
include CascadingConfiguration::Hash::InstanceConfigurationMockModuleIncluded
|
644
|
+
instance_methods.include?( :configuration_setting ).should == true
|
645
|
+
respond_to?( :configuration_setting ).should == false
|
646
|
+
instance_variables.empty?.should == true
|
647
|
+
end
|
648
|
+
# => extending modules and classes get attr_configuration and configurations
|
649
|
+
module SubmoduleExtending
|
650
|
+
extend CascadingConfiguration::Hash::InstanceConfigurationMockModuleIncluded
|
651
|
+
# if we're extended then we want to use the eigenclass ancestor chain
|
652
|
+
# - the first ancestor will be the extending module
|
653
|
+
# - the rest of the ancestors will be the extending module's include chain
|
654
|
+
instance_methods.include?( :configuration_setting ).should == false
|
655
|
+
respond_to?( :configuration_setting ).should == true
|
656
|
+
instance_variables.empty?.should == true
|
657
|
+
end
|
658
|
+
# => instances of including classes get configurations
|
659
|
+
class ClassIncluding
|
660
|
+
include CascadingConfiguration::Hash::InstanceConfigurationMockModuleIncluded
|
661
|
+
instance_methods.include?( :configuration_setting ).should == true
|
662
|
+
respond_to?( :configuration_setting ).should == false
|
663
|
+
instance_variables.empty?.should == true
|
664
|
+
end
|
665
|
+
setting_class_including_instance = ClassIncluding.new
|
666
|
+
setting_class_including_instance.respond_to?( :configuration_setting ).should == true
|
667
|
+
setting_class_including_instance.instance_variables.empty?.should == true
|
668
|
+
class ClassExtending
|
669
|
+
extend CascadingConfiguration::Hash::InstanceConfigurationMockModuleIncluded
|
670
|
+
instance_methods.include?( :configuration_setting ).should == false
|
671
|
+
respond_to?( :configuration_setting ).should == true
|
672
|
+
instance_variables.empty?.should == true
|
673
|
+
end
|
674
|
+
setting_class_including_instance = ClassExtending.new
|
675
|
+
setting_class_including_instance.respond_to?( :configuration_setting ).should == false
|
676
|
+
setting_class_including_instance.instance_variables.empty?.should == true
|
677
|
+
end
|
678
|
+
|
679
|
+
class CascadingConfiguration::Hash::InstanceConfigurationMockClass
|
680
|
+
include CascadingConfiguration::Hash::InstanceConfigurationMockModuleIncluded::SubmoduleIncluding
|
681
|
+
instance_methods.include?( :configuration_setting ).should == true
|
682
|
+
respond_to?( :configuration_setting ).should == false
|
683
|
+
instance_variables.empty?.should == true
|
684
|
+
end
|
685
|
+
|
686
|
+
object_instance_one = CascadingConfiguration::Hash::InstanceConfigurationMockClass.new
|
687
|
+
object_instance_one.respond_to?( :configuration_setting ).should == true
|
688
|
+
object_instance_one.instance_variables.empty?.should == true
|
689
|
+
|
690
|
+
class CascadingConfiguration::Hash::InstanceConfigurationMockClassSub1 < CascadingConfiguration::Hash::InstanceConfigurationMockClass
|
691
|
+
instance_methods.include?( :configuration_setting ).should == true
|
692
|
+
respond_to?( :configuration_setting ).should == false
|
693
|
+
instance_variables.empty?.should == true
|
694
|
+
end
|
695
|
+
|
696
|
+
object_instance_two = CascadingConfiguration::Hash::InstanceConfigurationMockClassSub1.new
|
697
|
+
object_instance_two.respond_to?( :configuration_setting ).should == true
|
698
|
+
object_instance_two.instance_variables.empty?.should == true
|
699
|
+
|
700
|
+
end
|
701
|
+
|
702
|
+
####################################
|
703
|
+
# attr_object_configuration_hash #
|
704
|
+
####################################
|
705
|
+
|
706
|
+
it 'can define a local configuration hash, which will not cascade' do
|
707
|
+
|
708
|
+
# possibilities:
|
709
|
+
# * module extended with setting
|
710
|
+
# => singleton gets attr_configuration and configurations
|
711
|
+
# => including modules and classes get nothing
|
712
|
+
# => extending modules and classes get nothing
|
713
|
+
# => instances of including and extending classes get nothing
|
714
|
+
# * module included with setting
|
715
|
+
# => singleton gets attr_configuration and configurations
|
716
|
+
# => including modules and classes get attr_configuration and configurations
|
717
|
+
# => instances of including classes get configurations
|
718
|
+
# => extending modules and classes get attr_configuration and configurations
|
719
|
+
# => instances of extending classes get nothing
|
720
|
+
module CascadingConfiguration::Hash::ObjectConfigurationMockModuleExtended
|
721
|
+
extend CascadingConfiguration::Hash
|
722
|
+
# => singleton gets attr_configuration and configurations
|
723
|
+
respond_to?( :attr_object_configuration_hash ).should == true
|
724
|
+
attr_object_configuration_hash :configuration_setting
|
725
|
+
respond_to?( :configuration_setting ).should == true
|
726
|
+
configuration_setting.should == {}
|
727
|
+
self.configuration_setting[ :a_configuration ] = :some_value
|
728
|
+
configuration_setting.should == { :a_configuration => :some_value }
|
729
|
+
instance_methods.include?( :configuration_setting ).should == false
|
730
|
+
instance_variables.empty?.should == true
|
731
|
+
# => including modules and classes get nothing
|
732
|
+
module SubmoduleIncluding
|
733
|
+
include CascadingConfiguration::Hash::ObjectConfigurationMockModuleExtended
|
734
|
+
instance_methods.include?( :configuration_setting ).should == false
|
735
|
+
respond_to?( :configuration_setting ).should == false
|
736
|
+
instance_variables.empty?.should == true
|
737
|
+
end
|
738
|
+
# => extending modules and classes get nothing
|
739
|
+
module SubmoduleExtending
|
740
|
+
extend CascadingConfiguration::Hash::ObjectConfigurationMockModuleExtended
|
741
|
+
instance_methods.include?( :configuration_setting ).should == false
|
742
|
+
respond_to?( :configuration_setting ).should == false
|
743
|
+
instance_variables.empty?.should == true
|
744
|
+
end
|
745
|
+
# => instances of including and extending classes get nothing
|
746
|
+
class ClassIncluding
|
747
|
+
include CascadingConfiguration::Hash::ObjectConfigurationMockModuleExtended
|
748
|
+
instance_methods.include?( :configuration_setting ).should == false
|
749
|
+
respond_to?( :configuration_setting ).should == false
|
750
|
+
instance_variables.empty?.should == true
|
751
|
+
end
|
752
|
+
class ClassExtending
|
753
|
+
extend CascadingConfiguration::Hash::ObjectConfigurationMockModuleExtended
|
754
|
+
instance_methods.include?( :configuration_setting ).should == false
|
755
|
+
respond_to?( :configuration_setting ).should == false
|
756
|
+
instance_variables.empty?.should == true
|
757
|
+
end
|
758
|
+
end
|
759
|
+
|
760
|
+
# * module included with setting
|
761
|
+
module CascadingConfiguration::Hash::ObjectConfigurationMockModuleIncluded
|
762
|
+
include CascadingConfiguration::Hash
|
763
|
+
# => singleton gets attr_configuration and configurations
|
764
|
+
respond_to?( :attr_object_configuration_hash ).should == true
|
765
|
+
attr_object_configuration_hash :configuration_setting
|
644
766
|
respond_to?( :configuration_setting ).should == true
|
645
767
|
configuration_setting.should == {}
|
646
768
|
self.configuration_setting[ :a_configuration ] = :some_value
|
@@ -649,14 +771,14 @@ describe CascadingConfiguration::Hash do
|
|
649
771
|
instance_variables.empty?.should == true
|
650
772
|
# => including modules and classes get attr_configuration and configurations
|
651
773
|
module SubmoduleIncluding
|
652
|
-
include CascadingConfiguration::Hash::
|
774
|
+
include CascadingConfiguration::Hash::ObjectConfigurationMockModuleIncluded
|
653
775
|
instance_methods.include?( :configuration_setting ).should == false
|
654
776
|
respond_to?( :configuration_setting ).should == false
|
655
777
|
instance_variables.empty?.should == true
|
656
778
|
end
|
657
779
|
# => extending modules and classes get attr_configuration and configurations
|
658
780
|
module SubmoduleExtending
|
659
|
-
extend CascadingConfiguration::Hash::
|
781
|
+
extend CascadingConfiguration::Hash::ObjectConfigurationMockModuleIncluded
|
660
782
|
# if we're extended then we want to use the eigenclass ancestor chain
|
661
783
|
# - the first ancestor will be the extending module
|
662
784
|
# - the rest of the ancestors will be the extending module's include chain
|
@@ -666,7 +788,7 @@ describe CascadingConfiguration::Hash do
|
|
666
788
|
end
|
667
789
|
# => instances of including classes get configurations
|
668
790
|
class ClassIncluding
|
669
|
-
include CascadingConfiguration::Hash::
|
791
|
+
include CascadingConfiguration::Hash::ObjectConfigurationMockModuleIncluded
|
670
792
|
instance_methods.include?( :configuration_setting ).should == false
|
671
793
|
respond_to?( :configuration_setting ).should == false
|
672
794
|
instance_variables.empty?.should == true
|
@@ -675,7 +797,7 @@ describe CascadingConfiguration::Hash do
|
|
675
797
|
setting_class_including_instance.respond_to?( :configuration_setting ).should == false
|
676
798
|
setting_class_including_instance.instance_variables.empty?.should == true
|
677
799
|
class ClassExtending
|
678
|
-
extend CascadingConfiguration::Hash::
|
800
|
+
extend CascadingConfiguration::Hash::ObjectConfigurationMockModuleIncluded
|
679
801
|
instance_methods.include?( :configuration_setting ).should == false
|
680
802
|
respond_to?( :configuration_setting ).should == false
|
681
803
|
instance_variables.empty?.should == true
|
@@ -685,25 +807,25 @@ describe CascadingConfiguration::Hash do
|
|
685
807
|
setting_class_including_instance.instance_variables.empty?.should == true
|
686
808
|
end
|
687
809
|
|
688
|
-
class CascadingConfiguration::Hash::
|
689
|
-
include CascadingConfiguration::Hash::
|
810
|
+
class CascadingConfiguration::Hash::ObjectConfigurationMockClass
|
811
|
+
include CascadingConfiguration::Hash::ObjectConfigurationMockModuleIncluded::SubmoduleIncluding
|
690
812
|
instance_methods.include?( :configuration_setting ).should == false
|
691
813
|
respond_to?( :configuration_setting ).should == false
|
692
814
|
instance_variables.empty?.should == true
|
693
815
|
end
|
694
816
|
|
695
|
-
object_instance_one = CascadingConfiguration::Hash::
|
696
|
-
object_instance_one.respond_to?( :
|
817
|
+
object_instance_one = CascadingConfiguration::Hash::ObjectConfigurationMockClass.new
|
818
|
+
object_instance_one.respond_to?( :configuration_setting ).should == false
|
697
819
|
object_instance_one.instance_variables.empty?.should == true
|
698
820
|
|
699
|
-
class CascadingConfiguration::Hash::
|
821
|
+
class CascadingConfiguration::Hash::ObjectConfigurationMockClassSub1 < CascadingConfiguration::Hash::ObjectConfigurationMockClass
|
700
822
|
instance_methods.include?( :configuration_setting ).should == false
|
701
823
|
respond_to?( :configuration_setting ).should == false
|
702
824
|
instance_variables.empty?.should == true
|
703
825
|
end
|
704
826
|
|
705
|
-
object_instance_two = CascadingConfiguration::Hash::
|
706
|
-
object_instance_two.respond_to?( :
|
827
|
+
object_instance_two = CascadingConfiguration::Hash::ObjectConfigurationMockClassSub1.new
|
828
|
+
object_instance_two.respond_to?( :configuration_setting ).should == false
|
707
829
|
object_instance_two.instance_variables.empty?.should == true
|
708
830
|
|
709
831
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 4
|
8
|
-
-
|
9
|
-
version: 1.4.
|
8
|
+
- 1
|
9
|
+
version: 1.4.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Asher
|
@@ -57,6 +57,7 @@ files:
|
|
57
57
|
- lib/cascading-configuration-hash/CascadingConfiguration/CompositingHash/Instance.rb
|
58
58
|
- lib/cascading-configuration-hash/CascadingConfiguration/CompositingHash.rb
|
59
59
|
- lib/cascading-configuration-hash/CascadingConfiguration/Hash/AccessorDefinitionMethods.rb
|
60
|
+
- lib/cascading-configuration-hash/CascadingConfiguration/Hash/Interface/Instance.rb
|
60
61
|
- lib/cascading-configuration-hash/CascadingConfiguration/Hash/Interface.rb
|
61
62
|
- lib/cascading-configuration-hash/CascadingConfiguration/Hash.rb
|
62
63
|
- lib/cascading-configuration-hash/CascadingConfiguration/LocalConfigurationHash.rb
|