configurability 1.0.8 → 1.0.9
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.tar.gz.sig +0 -0
- data/ChangeLog +55 -2
- data/History.rdoc +18 -0
- data/lib/configurability.rb +35 -11
- data/lib/configurability/deferredconfig.rb +1 -0
- data/spec/configurability/config_spec.rb +1 -1
- data/spec/configurability_spec.rb +33 -1
- data/spec/lib/helpers.rb +1 -1
- metadata +25 -14
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/ChangeLog
CHANGED
@@ -1,8 +1,61 @@
|
|
1
|
+
2012-01-27 Michael Granger <ged@FaerieMUD.org>
|
2
|
+
|
3
|
+
* lib/configurability.rb:
|
4
|
+
Fixing the version
|
5
|
+
[9319c44c05ce] [tip]
|
6
|
+
|
7
|
+
* .hgsigs, .hgtags, History.rdoc, lib/configurability.rb,
|
8
|
+
spec/configurability/config_spec.rb:
|
9
|
+
Merged with ssh://hg@bitbucket.org/ged/configurability@86718657a466
|
10
|
+
[d3f6f8d77060]
|
11
|
+
|
12
|
+
* .hgtags:
|
13
|
+
Added tag v1.0.8 for changeset 6a7852aa7398
|
14
|
+
[5e85b9cb1122]
|
15
|
+
|
16
|
+
* .hgsigs:
|
17
|
+
Added signature for changeset 2501a302fe07
|
18
|
+
[6a7852aa7398]
|
19
|
+
|
20
|
+
* History.rdoc, lib/configurability.rb:
|
21
|
+
Bumped the version, updated history.
|
22
|
+
[2501a302fe07]
|
23
|
+
|
24
|
+
* .rvm.gems, .rvmrc, experiments/staticcling-weirdness.rb, experiments
|
25
|
+
/staticcling-weirdness2.rb, experiments/staticcling-weirdness3.rb,
|
26
|
+
lib/configurability.rb, lib/configurability/deferredconfig.rb,
|
27
|
+
spec/configurability/config_spec.rb, spec/configurability_spec.rb,
|
28
|
+
spec/lib/helpers.rb:
|
29
|
+
Fixing bugs found while working on StaticCling
|
30
|
+
[0c3c20665455]
|
31
|
+
|
32
|
+
* .tm_properties:
|
33
|
+
Adding TextMate properties
|
34
|
+
[45b92add3e1e]
|
35
|
+
|
36
|
+
2011-11-01 Michael Granger <ged@FaerieMUD.org>
|
37
|
+
|
38
|
+
* .hgtags:
|
39
|
+
Added tag v1.0.8 for changeset 5b3d66af5a59
|
40
|
+
[86718657a466]
|
41
|
+
|
42
|
+
* .hgsigs:
|
43
|
+
Added signature for changeset 97a03db6f41c
|
44
|
+
[5b3d66af5a59] [v1.0.8]
|
45
|
+
|
46
|
+
* History.rdoc, lib/configurability.rb:
|
47
|
+
Bumped patch version and updated the History file.
|
48
|
+
[97a03db6f41c]
|
49
|
+
|
50
|
+
* spec/configurability/config_spec.rb:
|
51
|
+
Fix for Ruby 1.9.3.
|
52
|
+
[a26cd541ea8f]
|
53
|
+
|
1
54
|
2011-10-13 Michael Granger <ged@FaerieMUD.org>
|
2
55
|
|
3
56
|
* .hgtags:
|
4
57
|
Added tag v1.0.7 for changeset 4e605f137155
|
5
|
-
[0f391f680b61]
|
58
|
+
[0f391f680b61]
|
6
59
|
|
7
60
|
* .hgsigs:
|
8
61
|
Added signature for changeset 605036b92217
|
@@ -26,7 +79,7 @@
|
|
26
79
|
|
27
80
|
* Rakefile:
|
28
81
|
Merged with c9b7b76e4792
|
29
|
-
[cae88e472706]
|
82
|
+
[cae88e472706]
|
30
83
|
|
31
84
|
* Rakefile:
|
32
85
|
Cleaning up the Rakefile a bit
|
data/History.rdoc
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
== v1.0.9 [2012-01-27] Michael Granger <ged@FaerieMUD.org>
|
2
|
+
|
3
|
+
Fix problems associated with inheritance.
|
4
|
+
|
5
|
+
- Added a Hash of configure methods that have already been called
|
6
|
+
as pairs of Methods and Config sections. (Configurability.configured)
|
7
|
+
- Use the `configured` hash to avoid re-calling configure with the same
|
8
|
+
config section more than once when a class with Configurability is
|
9
|
+
inherited.
|
10
|
+
- Configurability.install_config -- Only use the index operator method
|
11
|
+
of the config object if it actually has the config_key as a key. Else
|
12
|
+
configure with +nil+.
|
13
|
+
- Support different whitespace conventions in different YAML libraries
|
14
|
+
|
15
|
+
Thanks to Mahlon E. Smith for reporting this bug, and for pairing with
|
16
|
+
me to fix it.
|
17
|
+
|
18
|
+
|
1
19
|
== v1.0.8 [2011-11-01] Michael Granger <ged@FaerieMUD.org>
|
2
20
|
|
3
21
|
- Fix for Ruby 1.9.3-p0.
|
data/lib/configurability.rb
CHANGED
@@ -11,10 +11,10 @@ require 'yaml'
|
|
11
11
|
module Configurability
|
12
12
|
|
13
13
|
# Library version constant
|
14
|
-
VERSION = '1.0.
|
14
|
+
VERSION = '1.0.9'
|
15
15
|
|
16
16
|
# Version-control revision constant
|
17
|
-
REVISION = %q$Revision:
|
17
|
+
REVISION = %q$Revision: 9319c44c05ce $
|
18
18
|
|
19
19
|
require 'configurability/logformatter'
|
20
20
|
require 'configurability/deferredconfig'
|
@@ -26,6 +26,11 @@ module Configurability
|
|
26
26
|
### The loaded config (if there is one)
|
27
27
|
@loaded_config = nil
|
28
28
|
|
29
|
+
### The hash of configuration calls that have already taken place -- the keys are
|
30
|
+
### Method objects for the configure methods of the configured objects, and the values
|
31
|
+
### are the config section it was called with
|
32
|
+
@configured = Hash.new( false )
|
33
|
+
|
29
34
|
### Logging
|
30
35
|
@default_logger = Logger.new( $stderr )
|
31
36
|
@default_logger.level = $DEBUG ? Logger::DEBUG : Logger::WARN
|
@@ -44,6 +49,9 @@ module Configurability
|
|
44
49
|
# the loaded configuration (after ::configure_objects has been called at least once)
|
45
50
|
attr_accessor :loaded_config
|
46
51
|
|
52
|
+
# the hash of configure methods => config sections which have already been installed
|
53
|
+
attr_reader :configured
|
54
|
+
|
47
55
|
# the log formatter that will be used when the logging subsystem is
|
48
56
|
# reset
|
49
57
|
attr_accessor :default_log_formatter
|
@@ -104,6 +112,7 @@ module Configurability
|
|
104
112
|
self.log.debug "Splitting up config %p between %d objects with configurability." %
|
105
113
|
[ config, self.configurable_objects.length ]
|
106
114
|
|
115
|
+
self.reset
|
107
116
|
self.loaded_config = config
|
108
117
|
|
109
118
|
self.configurable_objects.each do |obj|
|
@@ -115,6 +124,7 @@ module Configurability
|
|
115
124
|
### If a configuration has been loaded (via {#configure_objects}), clear it.
|
116
125
|
def self::reset
|
117
126
|
self.loaded_config = nil
|
127
|
+
self.configured.clear
|
118
128
|
end
|
119
129
|
|
120
130
|
|
@@ -134,15 +144,33 @@ module Configurability
|
|
134
144
|
|
135
145
|
if config.respond_to?( section )
|
136
146
|
self.log.debug " config has a %p method; using that" % [ section ]
|
137
|
-
|
138
|
-
elsif config.respond_to?( :[] )
|
139
|
-
self.log.debug " config has a
|
140
|
-
|
147
|
+
section = config.send( section )
|
148
|
+
elsif config.respond_to?( :[] ) && config.respond_to?( :key? )
|
149
|
+
self.log.debug " config has a hash-ish interface..."
|
150
|
+
if config.key?( section ) || config.key?( section.to_s )
|
151
|
+
self.log.debug " and has a %p member; using that" % [ section ]
|
152
|
+
section = config[section] || config[section.to_s]
|
153
|
+
else
|
154
|
+
self.log.debug " but no %p member."
|
155
|
+
section = nil
|
156
|
+
end
|
141
157
|
else
|
142
158
|
self.log.warn " don't know how to get the %p section of the config from %p" %
|
143
159
|
[ section, config ]
|
144
|
-
|
160
|
+
section = nil
|
145
161
|
end
|
162
|
+
|
163
|
+
# Figure out if the configure method has already been called with this config
|
164
|
+
# section before, and don't re-call it if so
|
165
|
+
configure_method = object.method( :configure )
|
166
|
+
|
167
|
+
if self.configured[ configure_method ] == section
|
168
|
+
self.log.debug " avoiding re-calling %p" % [ configure_method ]
|
169
|
+
return
|
170
|
+
end
|
171
|
+
|
172
|
+
self.log.debug " calling %p" % [ configure_method ]
|
173
|
+
configure_method.call( section )
|
146
174
|
end
|
147
175
|
|
148
176
|
|
@@ -150,10 +178,6 @@ module Configurability
|
|
150
178
|
### A P P E N D E D M E T H O D S
|
151
179
|
#############################################################
|
152
180
|
|
153
|
-
### The symbol which corresponds to the section of the configuration
|
154
|
-
### used to configure the object.
|
155
|
-
attr_writer :config_key
|
156
|
-
|
157
181
|
### Get (and optionally set) the +config_key+ (a Symbol).
|
158
182
|
def config_key( sym=nil )
|
159
183
|
@config_key = sym unless sym.nil?
|
@@ -20,6 +20,7 @@ module Configurability::DeferredConfig
|
|
20
20
|
super
|
21
21
|
|
22
22
|
if sym == :configure
|
23
|
+
Configurability.log.debug "Re-configuring %p via deferred config hook." % [ self ]
|
23
24
|
config = Configurability.loaded_config
|
24
25
|
Configurability.log.debug "Propagating config to %p" % [ self ]
|
25
26
|
Configurability.install_config( config, self )
|
@@ -53,7 +53,7 @@ describe Configurability::Config do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
it "can dump itself as YAML" do
|
56
|
-
Configurability::Config.new.dump.should
|
56
|
+
Configurability::Config.new.dump.strip.should == "--- {}"
|
57
57
|
end
|
58
58
|
|
59
59
|
it "returns nil as its change description" do
|
@@ -74,7 +74,7 @@ describe Configurability do
|
|
74
74
|
end
|
75
75
|
|
76
76
|
it "fetches config sections via the index operator if the config doesn't respond " +
|
77
|
-
"directly to the section name, but does to the index operator" do
|
77
|
+
"directly to the section name, but does to the index operator and #key?" do
|
78
78
|
klass = Class.new do
|
79
79
|
extend Configurability
|
80
80
|
config_key :testconfig
|
@@ -82,7 +82,9 @@ describe Configurability do
|
|
82
82
|
|
83
83
|
config = mock( "configuration object" )
|
84
84
|
config.should_receive( :respond_to? ).with( :testconfig ).and_return( false )
|
85
|
+
config.should_receive( :respond_to? ).with( :key? ).and_return( true )
|
85
86
|
config.should_receive( :respond_to? ).with( :[] ).and_return( true )
|
87
|
+
config.should_receive( :key? ).with( :testconfig ).and_return( true )
|
86
88
|
config.should_receive( :[] ).with( :testconfig ).and_return( :a_config_section )
|
87
89
|
|
88
90
|
klass.should_receive( :configure ).with( :a_config_section )
|
@@ -113,7 +115,10 @@ describe Configurability do
|
|
113
115
|
|
114
116
|
config = mock( "configuration object" )
|
115
117
|
config.should_receive( :respond_to? ).with( :testconfig ).and_return( false )
|
118
|
+
config.should_receive( :respond_to? ).with( :key? ).and_return( true )
|
116
119
|
config.should_receive( :respond_to? ).with( :[] ).and_return( true )
|
120
|
+
config.should_receive( :key? ).with( :testconfig ).and_return( false )
|
121
|
+
config.should_receive( :key? ).with( 'testconfig' ).and_return( true )
|
117
122
|
config.should_receive( :[] ).with( :testconfig ).and_return( nil )
|
118
123
|
config.should_receive( :[] ).with( 'testconfig' ).and_return( :a_config_section )
|
119
124
|
|
@@ -253,6 +258,33 @@ describe Configurability do
|
|
253
258
|
objectclass.config.should == :yes
|
254
259
|
end
|
255
260
|
|
261
|
+
it "doesn't reconfigure objects that have already been configured unless the config changes" do
|
262
|
+
first_objectclass = Class.new do
|
263
|
+
extend Configurability
|
264
|
+
@configs = []
|
265
|
+
config_key :postconfig
|
266
|
+
def self::configure( config ); @configs << config; end
|
267
|
+
def self::inherited( subclass ); subclass.instance_variable_set(:@configs, []); super; end
|
268
|
+
class << self; attr_reader :configs; end
|
269
|
+
end
|
270
|
+
|
271
|
+
second_objectclass = Class.new( first_objectclass ) do
|
272
|
+
extend Configurability
|
273
|
+
config_key :postconfig
|
274
|
+
def self::configure( config ); @configs << config; end
|
275
|
+
end
|
276
|
+
|
277
|
+
third_objectclass = Class.new( second_objectclass ) do
|
278
|
+
extend Configurability
|
279
|
+
config_key :postconfig
|
280
|
+
def self::configure( config ); @configs << config; end
|
281
|
+
end
|
282
|
+
|
283
|
+
first_objectclass.configs.should == [ @config[:postconfig] ]
|
284
|
+
second_objectclass.configs.should == [ nil, @config[:postconfig] ]
|
285
|
+
third_objectclass.configs.should == [ nil, @config[:postconfig] ]
|
286
|
+
end
|
287
|
+
|
256
288
|
end
|
257
289
|
|
258
290
|
end
|
data/spec/lib/helpers.rb
CHANGED
@@ -19,6 +19,7 @@ require 'yaml'
|
|
19
19
|
|
20
20
|
SimpleCov.start do
|
21
21
|
add_filter '/spec/'
|
22
|
+
add_filter '/textmate-command/'
|
22
23
|
end
|
23
24
|
require 'configurability'
|
24
25
|
|
@@ -127,7 +128,6 @@ module Configurability::SpecHelpers
|
|
127
128
|
Thread.current['logger-output'] = []
|
128
129
|
logdevice = ArrayLogger.new( Thread.current['logger-output'] )
|
129
130
|
Configurability.logger = Logger.new( logdevice )
|
130
|
-
Configurability.logger.level = level
|
131
131
|
Configurability.logger.formatter = HtmlLogFormatter.new( Configurability.logger )
|
132
132
|
else
|
133
133
|
logger = Logger.new( $stderr )
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: configurability
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -48,11 +48,11 @@ cert_chain:
|
|
48
48
|
-----END CERTIFICATE-----
|
49
49
|
|
50
50
|
'
|
51
|
-
date:
|
51
|
+
date: 2012-01-28 00:00:00.000000000 Z
|
52
52
|
dependencies:
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: hoe-mercurial
|
55
|
-
requirement: &
|
55
|
+
requirement: &70293058889240 !ruby/object:Gem::Requirement
|
56
56
|
none: false
|
57
57
|
requirements:
|
58
58
|
- - ~>
|
@@ -60,10 +60,10 @@ dependencies:
|
|
60
60
|
version: 1.3.1
|
61
61
|
type: :development
|
62
62
|
prerelease: false
|
63
|
-
version_requirements: *
|
63
|
+
version_requirements: *70293058889240
|
64
64
|
- !ruby/object:Gem::Dependency
|
65
65
|
name: hoe-highline
|
66
|
-
requirement: &
|
66
|
+
requirement: &70293058887220 !ruby/object:Gem::Requirement
|
67
67
|
none: false
|
68
68
|
requirements:
|
69
69
|
- - ~>
|
@@ -71,10 +71,10 @@ dependencies:
|
|
71
71
|
version: 0.0.1
|
72
72
|
type: :development
|
73
73
|
prerelease: false
|
74
|
-
version_requirements: *
|
74
|
+
version_requirements: *70293058887220
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: rspec
|
77
|
-
requirement: &
|
77
|
+
requirement: &70293058885400 !ruby/object:Gem::Requirement
|
78
78
|
none: false
|
79
79
|
requirements:
|
80
80
|
- - ~>
|
@@ -82,10 +82,10 @@ dependencies:
|
|
82
82
|
version: '2.4'
|
83
83
|
type: :development
|
84
84
|
prerelease: false
|
85
|
-
version_requirements: *
|
85
|
+
version_requirements: *70293058885400
|
86
86
|
- !ruby/object:Gem::Dependency
|
87
87
|
name: simplecov
|
88
|
-
requirement: &
|
88
|
+
requirement: &70293058884740 !ruby/object:Gem::Requirement
|
89
89
|
none: false
|
90
90
|
requirements:
|
91
91
|
- - ~>
|
@@ -93,18 +93,29 @@ dependencies:
|
|
93
93
|
version: '0.3'
|
94
94
|
type: :development
|
95
95
|
prerelease: false
|
96
|
-
version_requirements: *
|
96
|
+
version_requirements: *70293058884740
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rdoc
|
99
|
+
requirement: &70293058884160 !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
101
|
+
requirements:
|
102
|
+
- - ~>
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '3.10'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: *70293058884160
|
97
108
|
- !ruby/object:Gem::Dependency
|
98
109
|
name: hoe
|
99
|
-
requirement: &
|
110
|
+
requirement: &70293058883580 !ruby/object:Gem::Requirement
|
100
111
|
none: false
|
101
112
|
requirements:
|
102
113
|
- - ~>
|
103
114
|
- !ruby/object:Gem::Version
|
104
|
-
version: '2.
|
115
|
+
version: '2.13'
|
105
116
|
type: :development
|
106
117
|
prerelease: false
|
107
|
-
version_requirements: *
|
118
|
+
version_requirements: *70293058883580
|
108
119
|
description: ! 'Configurability is a mixin that allows you to add configurability
|
109
120
|
to one or
|
110
121
|
|
@@ -163,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
163
174
|
version: '0'
|
164
175
|
requirements: []
|
165
176
|
rubyforge_project: configurability
|
166
|
-
rubygems_version: 1.8.
|
177
|
+
rubygems_version: 1.8.14
|
167
178
|
signing_key:
|
168
179
|
specification_version: 3
|
169
180
|
summary: Configurability is a mixin that allows you to add configurability to one
|
metadata.gz.sig
CHANGED
Binary file
|