cascading-configuration-hash 1.4.0 → 1.4.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|