configurability 3.3.0 → 3.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/History.md CHANGED
@@ -1,3 +1,29 @@
1
+ ## v3.4.1 [2019-09-03] Michael Granger <ged@FaerieMUD.org>
2
+
3
+ Bugfixes:
4
+
5
+ - Bump minimal Ruby version to 2.5.
6
+
7
+ Documentation:
8
+
9
+ - Change URLs to Sourcehut/ability.guide
10
+ - Fix license years, README title
11
+
12
+
13
+ ## v3.4.0 [2019-09-01] Michael Granger <ged@FaerieMUD.org>
14
+
15
+ Bugfixes:
16
+
17
+ - Remove old command that depended on Trollop
18
+
19
+ Enhancements:
20
+
21
+ - Add a predicate setting option
22
+ - Add a test for declaring helper methods inside a settings block
23
+ - Add after-configure hooks to execute a block after the configuration
24
+ has been loaded
25
+
26
+
1
27
  ## v3.3.0 [2018-09-12] Michael Granger <ged@FaerieMUD.org>
2
28
 
3
29
  Enhancements:
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010-2016 Michael Granger and Mahlon E. Smith
1
+ Copyright (c) 2010-2019 Michael Granger and Mahlon E. Smith
2
2
  All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without
data/Manifest.txt CHANGED
@@ -4,7 +4,6 @@ LICENSE
4
4
  Manifest.txt
5
5
  README.md
6
6
  Rakefile
7
- bin/configurability
8
7
  examples/basicconfig.rb
9
8
  examples/config.yml
10
9
  examples/readme.rb
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # Configurability
2
2
 
3
3
  home
4
- : https://bitbucket.org/ged/configurability
4
+ : https://configur.ability.guide/
5
5
 
6
6
  code
7
- : https://bitbucket.org/ged/configurability
7
+ : https://hg.sr.ht/~ged/Configurability
8
8
 
9
9
  docs
10
10
  : http://deveiate.org/code/configurability
@@ -117,6 +117,42 @@ After this happens you can access the configuration values like this:
117
117
  Database.password
118
118
  # => "pXVvVY,YjWNRRi[yPWx4"
119
119
 
120
+ You can add helper methods inside the `configurability` block to eliminate
121
+ repeated code in your setting blocks:
122
+
123
+ configurability( :server ) do
124
+ def self::make_path( value )
125
+ return nil unless value
126
+ pn = Pathname( value )
127
+ raise "Can't read from %s!" % [ pn ] unless pn.readable?
128
+ return pn
129
+ end
130
+
131
+ setting :template_path do |value|
132
+ make_path( value )
133
+ end
134
+
135
+ setting :plugin_path do |*values|
136
+ make_path( value )
137
+ end
138
+ end
139
+
140
+ If a setting is a boolean, you can also have a predicate method created for it
141
+ alongside its getter and setter:
142
+
143
+ class Mailer
144
+ extend Configurability
145
+ configurability( :db ) do
146
+ setting :use_whitelist, default: false, predicate: true
147
+ end
148
+ end
149
+
150
+ Mailer.use_whitelist?
151
+ # => false
152
+ Mailer.use_whitelist = true
153
+ Mailer.use_whitelist?
154
+ # => true
155
+
120
156
 
121
157
  ### More Details
122
158
 
@@ -387,9 +423,9 @@ default_config
387
423
 
388
424
  You can submit bug reports, suggestions, clone it with Mercurial, and
389
425
  read more about future plans at
390
- {the project page}[http://bitbucket.org/ged/configurability]. If you
426
+ [the project page](http://hg.sr.ht/ged/configurability). If you
391
427
  prefer Git, there is also a
392
- {Github mirror}[https://github.com/ged/configurability].
428
+ [Github mirror](https://github.com/ged/configurability).
393
429
 
394
430
  After checking out the source, run:
395
431
 
@@ -401,7 +437,7 @@ and generate the API documentation.
401
437
 
402
438
  ## License
403
439
 
404
- Copyright (c) 2010-2017 Michael Granger and Mahlon E. Smith
440
+ Copyright (c) 2010-2019 Michael Granger and Mahlon E. Smith
405
441
  All rights reserved.
406
442
 
407
443
  Redistribution and use in source and binary forms, with or without
data/Rakefile CHANGED
@@ -22,10 +22,10 @@ hoespec = Hoe.spec 'configurability' do |spec|
22
22
  spec.extra_rdoc_files = FileList[ '*.rdoc', '*.md' ]
23
23
  spec.license 'BSD-3-Clause'
24
24
  spec.urls = {
25
- home: 'http://deveiate.org/projects/configurability',
26
- code: 'http://bitbucket.org/ged/configurability',
27
- docs: 'http://deveiate.org/code/configurability',
28
- github: 'http://github.com/ged/configurability',
25
+ home: 'https://configur.ability.guide/',
26
+ code: 'https://hg.sr.ht/ged/Configurability',
27
+ docs: 'https://deveiate.org/code/configurability',
28
+ github: 'https://github.com/ged/configurability',
29
29
  }
30
30
 
31
31
  spec.developer 'Michael Granger', 'ged@FaerieMUD.org'
@@ -35,9 +35,9 @@ hoespec = Hoe.spec 'configurability' do |spec|
35
35
 
36
36
  spec.dependency 'hoe-deveiate', '~> 0.8', :developer
37
37
  spec.dependency 'simplecov', '~> 0.12', :developer
38
- spec.dependency 'rspec', '~> 3.5', :developer
38
+ spec.dependency 'rspec', '~> 3.8', :developer
39
39
 
40
- spec.require_ruby_version( '>= 2.2.0' )
40
+ spec.require_ruby_version( '>= 2.5.0' )
41
41
 
42
42
  spec.hg_sign_tags = true if spec.respond_to?( :hg_sign_tags= )
43
43
  spec.rdoc_locations << "deveiate:/usr/local/www/public/code/#{remote_rdoc_dir}"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require 'set'
3
4
  require 'loggability'
4
5
  require 'yaml'
5
6
 
@@ -13,10 +14,10 @@ module Configurability
13
14
 
14
15
 
15
16
  # Library version constant
16
- VERSION = '3.3.0'
17
+ VERSION = '3.4.1'
17
18
 
18
19
  # Version-control revision constant
19
- REVISION = %q$Revision: 29114ac9dc2b $
20
+ REVISION = %q$Revision$
20
21
 
21
22
  require 'configurability/deferred_config'
22
23
 
@@ -25,20 +26,58 @@ module Configurability
25
26
 
26
27
 
27
28
  ### The objects that have had Configurability added to them
29
+ ##
30
+ # the Array of objects that have had Configurability added to them
31
+ singleton_class.attr_accessor :configurable_objects
28
32
  @configurable_objects = []
29
33
 
30
- ### The loaded config (if there is one)
34
+ ##
35
+ # the loaded configuration (after ::configure_objects has been called at least once)
36
+ singleton_class.attr_accessor :loaded_config
31
37
  @loaded_config = nil
32
38
 
39
+ ##
40
+ # An Array of callbacks to be run after the config is loaded
41
+ @after_configure_hooks = Set.new
42
+ singleton_class.attr_reader :after_configure_hooks
33
43
 
34
- class << self
35
44
 
36
- # the Array of objects that have had Configurability added to them
37
- attr_accessor :configurable_objects
45
+ @after_configure_hooks_run = false
38
46
 
39
- # the loaded configuration (after ::configure_objects has been called at least once)
40
- attr_accessor :loaded_config
47
+ ### Returns +true+ if the after-configuration hooks have run at least once.
48
+ def self::after_configure_hooks_run?
49
+ return @after_configure_hooks_run ? true : false
50
+ end
51
+
52
+
53
+ ### Set the flag that indicates that the after-configure hooks have run at least
54
+ ### once.
55
+ def self::after_configure_hooks_run=( new_value )
56
+ @after_configure_hooks_run = new_value ? true : false
57
+ end
58
+
59
+
60
+ ### Register a callback to be run after the config is loaded.
61
+ def self::after_configure( &block )
62
+ raise LocalJumpError, "no block given" unless block
63
+ self.after_configure_hooks << block
41
64
 
65
+ # Call the block immediately if the hooks have already been called or are in
66
+ # the process of being called.
67
+ block.call if self.after_configure_hooks_run?
68
+ end
69
+ singleton_class.alias_method :after_configuration, :after_configure
70
+
71
+
72
+ ### Call the post-configuration callbacks.
73
+ def self::call_after_configure_hooks
74
+ self.log.debug " calling %d post-config hooks" % [ self.after_configure_hooks.length ]
75
+ @after_configure_hooks_run = true
76
+
77
+ self.after_configure_hooks.to_a.each do |hook|
78
+ # self.log.debug " %s line %s..." % hook.source_location
79
+ hook.call
80
+ end
42
81
  end
43
82
 
44
83
 
@@ -103,12 +142,15 @@ module Configurability
103
142
  self.configurable_objects.each do |obj|
104
143
  self.install_config( config, obj )
105
144
  end
145
+
146
+ self.call_after_configure_hooks
106
147
  end
107
148
 
108
149
 
109
150
  ### If a configuration has been loaded (via {#configure_objects}), clear it.
110
151
  def self::reset
111
152
  self.loaded_config = nil
153
+ self.after_configure_hooks_run = false
112
154
  end
113
155
 
114
156
 
@@ -50,6 +50,11 @@ class Configurability::SettingInstaller
50
50
 
51
51
  self.target.define_singleton_method( "#{name}", &reader )
52
52
  self.target.define_singleton_method( "#{name}=", &writer )
53
+
54
+ if options[:predicate]
55
+ predicate = self.make_setting_predicate( name, options )
56
+ self.target.define_singleton_method( "#{name}?", &predicate )
57
+ end
53
58
  end
54
59
 
55
60
 
@@ -87,6 +92,22 @@ class Configurability::SettingInstaller
87
92
  end
88
93
 
89
94
 
95
+ ### Create the body of the setting predicate method with the specified +name+ and +options+.
96
+ def make_setting_predicate( name, options )
97
+ if options[:use_class_vars]
98
+ return lambda do
99
+ Loggability[ Configurability ].debug "Using class variables for %s of %p" %
100
+ [ name, self ]
101
+ self.class_variable_get("@@#{name}") ? true : false
102
+ end
103
+ else
104
+ return lambda {
105
+ self.instance_variable_get("@#{name}") ? true : false
106
+ }
107
+ end
108
+ end
109
+
110
+
90
111
  ### Add a default for +name+ to the CONFIG_DEFAULTS constant of the target, creating
91
112
  ### it if necessary.
92
113
  def add_default( name, options )
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require 'ipaddr'
4
+ require 'socket'
3
5
  require 'ostruct'
4
6
  require 'helpers'
5
7
 
@@ -17,11 +19,13 @@ describe Configurability do
17
19
 
18
20
  before( :each ) do
19
21
  Configurability.configurable_objects.clear
22
+ Configurability.after_configure_hooks.clear
20
23
  Configurability.reset
21
24
  end
22
25
 
23
26
  after( :all ) do
24
27
  Configurability.configurable_objects.clear
28
+ Configurability.after_configure_hooks.clear
25
29
  Configurability.reset
26
30
  end
27
31
 
@@ -705,6 +709,82 @@ describe Configurability do
705
709
  from( nil )
706
710
  end
707
711
 
712
+
713
+ it "allows declaration of singleton helper methods" do
714
+ mod.configurability( :testconfig ) do
715
+ def self::parse_ip_blocks( *values )
716
+ values.flatten.map do |value|
717
+ IPAddr.new( value, Socket::AF_INET )
718
+ end
719
+ end
720
+ setting :whitelisted_ip_blocks do |*values|
721
+ parse_ip_blocks( values )
722
+ end
723
+ setting :blacklisted_ip_blocks do |*values|
724
+ parse_ip_blocks( values )
725
+ end
726
+ end
727
+
728
+ expect {
729
+ mod.whitelisted_ip_blocks = ['127.0.0.1/8', '203.0.113.0/24']
730
+ }.to change { mod.whitelisted_ip_blocks }.to([
731
+ IPAddr.new( '127.0.0.0/8' ), IPAddr.new( '203.0.113.0/24' )
732
+ ])
733
+ end
734
+
735
+
736
+ it "can declare a predicate method for a setting" do
737
+ mod.configurability( :testconfig ) do
738
+ setting :use_whitelist, default: false, predicate: true
739
+ end
740
+
741
+ expect {
742
+ mod.use_whitelist = true
743
+ }.to change { mod.use_whitelist? }.from( false ).to( true )
744
+ end
745
+
746
+ end
747
+
748
+
749
+ describe "hooks" do
750
+
751
+ it "will call any registered callbacks after the config is installed" do
752
+ hook_was_called = false
753
+ Configurability.after_configure do
754
+ hook_was_called = true
755
+ end
756
+ Configurability.call_after_configure_hooks
757
+
758
+ expect( hook_was_called ).to be( true )
759
+ end
760
+
761
+
762
+ it "will immediately call after_config callbacks registered after the config is installed" do
763
+ hook_was_called = false
764
+ Configurability.call_after_configure_hooks
765
+
766
+ Configurability.after_configure do
767
+ hook_was_called = true
768
+ end
769
+
770
+ expect( hook_was_called ).to be( true )
771
+ end
772
+
773
+
774
+ it "can add new after_configure hooks even while the current ones are being run" do
775
+ hook_was_called = false
776
+ Configurability.after_configure do
777
+ Configurability.after_configure do
778
+ hook_was_called = true
779
+ end
780
+ end
781
+
782
+ Configurability.call_after_configure_hooks
783
+
784
+ expect( hook_was_called ).to be( true )
785
+ end
786
+
787
+
708
788
  end
709
789
 
710
790
  end
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: 3.3.0
4
+ version: 3.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Granger
@@ -11,32 +11,31 @@ bindir: bin
11
11
  cert_chain:
12
12
  - |
13
13
  -----BEGIN CERTIFICATE-----
14
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- MBwGA1UdEQQVMBOBEWdlZEBGYWVyaWVNVUQub3JnMBwGA1UdEgQVMBOBEWdlZEBG
29
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
36
+ JnC4lpJfCP6aCXa5h2XAQfPSH636cQap
38
37
  -----END CERTIFICATE-----
39
- date: 2018-09-12 00:00:00.000000000 Z
38
+ date: 2019-09-03 00:00:00.000000000 Z
40
39
  dependencies:
41
40
  - !ruby/object:Gem::Dependency
42
41
  name: loggability
@@ -72,14 +71,14 @@ dependencies:
72
71
  requirements:
73
72
  - - "~>"
74
73
  - !ruby/object:Gem::Version
75
- version: '0.9'
74
+ version: '0.10'
76
75
  type: :development
77
76
  prerelease: false
78
77
  version_requirements: !ruby/object:Gem::Requirement
79
78
  requirements:
80
79
  - - "~>"
81
80
  - !ruby/object:Gem::Version
82
- version: '0.9'
81
+ version: '0.10'
83
82
  - !ruby/object:Gem::Dependency
84
83
  name: hoe-highline
85
84
  requirement: !ruby/object:Gem::Requirement
@@ -114,42 +113,48 @@ dependencies:
114
113
  requirements:
115
114
  - - "~>"
116
115
  - !ruby/object:Gem::Version
117
- version: '3.5'
116
+ version: '3.8'
118
117
  type: :development
119
118
  prerelease: false
120
119
  version_requirements: !ruby/object:Gem::Requirement
121
120
  requirements:
122
121
  - - "~>"
123
122
  - !ruby/object:Gem::Version
124
- version: '3.5'
123
+ version: '3.8'
125
124
  - !ruby/object:Gem::Dependency
126
125
  name: rdoc
127
126
  requirement: !ruby/object:Gem::Requirement
128
127
  requirements:
129
- - - "~>"
128
+ - - ">="
130
129
  - !ruby/object:Gem::Version
131
130
  version: '4.0'
131
+ - - "<"
132
+ - !ruby/object:Gem::Version
133
+ version: '7'
132
134
  type: :development
133
135
  prerelease: false
134
136
  version_requirements: !ruby/object:Gem::Requirement
135
137
  requirements:
136
- - - "~>"
138
+ - - ">="
137
139
  - !ruby/object:Gem::Version
138
140
  version: '4.0'
141
+ - - "<"
142
+ - !ruby/object:Gem::Version
143
+ version: '7'
139
144
  - !ruby/object:Gem::Dependency
140
145
  name: hoe
141
146
  requirement: !ruby/object:Gem::Requirement
142
147
  requirements:
143
148
  - - "~>"
144
149
  - !ruby/object:Gem::Version
145
- version: '3.16'
150
+ version: '3.18'
146
151
  type: :development
147
152
  prerelease: false
148
153
  version_requirements: !ruby/object:Gem::Requirement
149
154
  requirements:
150
155
  - - "~>"
151
156
  - !ruby/object:Gem::Version
152
- version: '3.16'
157
+ version: '3.18'
153
158
  description: |-
154
159
  Configurability is a unified, non-intrusive, assume-nothing configuration system
155
160
  for Ruby. It lets you keep the configuration for multiple objects in a single
@@ -159,8 +164,7 @@ description: |-
159
164
  email:
160
165
  - ged@FaerieMUD.org
161
166
  - mahlon@martini.nu
162
- executables:
163
- - configurability
167
+ executables: []
164
168
  extensions: []
165
169
  extra_rdoc_files:
166
170
  - History.md
@@ -173,7 +177,6 @@ files:
173
177
  - Manifest.txt
174
178
  - README.md
175
179
  - Rakefile
176
- - bin/configurability
177
180
  - examples/basicconfig.rb
178
181
  - examples/config.yml
179
182
  - examples/readme.rb
@@ -186,7 +189,7 @@ files:
186
189
  - spec/configurability/deferred_config_spec.rb
187
190
  - spec/configurability_spec.rb
188
191
  - spec/helpers.rb
189
- homepage: http://deveiate.org/projects/configurability
192
+ homepage: https://configur.ability.guide/
190
193
  licenses:
191
194
  - BSD-3-Clause
192
195
  metadata: {}
@@ -200,15 +203,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
200
203
  requirements:
201
204
  - - ">="
202
205
  - !ruby/object:Gem::Version
203
- version: 2.2.0
206
+ version: 2.5.0
204
207
  required_rubygems_version: !ruby/object:Gem::Requirement
205
208
  requirements:
206
209
  - - ">="
207
210
  - !ruby/object:Gem::Version
208
211
  version: '0'
209
212
  requirements: []
210
- rubyforge_project:
211
- rubygems_version: 2.7.6
213
+ rubygems_version: 3.0.3
212
214
  signing_key:
213
215
  specification_version: 4
214
216
  summary: Configurability is a unified, non-intrusive, assume-nothing configuration