configurability 3.3.0 → 3.4.1

Sign up to get free protection for your applications and to get access to all the features.
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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
- GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
16
- 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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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
- dZxcP6w8APFg4AId09uWAZKf0xajvBMS2aOz8Bbmag6fwqRRkTMqsNYnmqcF7aRT
32
- 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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