configurability 4.1.0 → 5.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9cdd038b6ee7f7e344230c278a8ba1d811e3cda6a85683145229829f6c2a773c
4
- data.tar.gz: c8f4d0f7552a41851a33390887f489a0ec962238c732179bf992204a1c1c9059
3
+ metadata.gz: a3d72bd8604379adbc7d7cc9fcaad9cbf5e05f506b4d5f2b91bcee03b31d980d
4
+ data.tar.gz: 82d58d94493be733dd8141dce382c644667c439bddfc29e3656c93938695dbd9
5
5
  SHA512:
6
- metadata.gz: 42f8f31b7b511471134394189c4b2ef13eabf34afd5b264b74e57d82476bc029a59bdea2d5018c0c6b06319abbc6e999a8d3f46a51dca7deffe3dd1ca3972c4f
7
- data.tar.gz: 355e03310f6b9a184c8266f651912c59362730225ef7100b0c5eae074d75534b9ef0d5ddb82dc653720c6ab4c0cc23870e212bf680e0ea4aba62d8945d17c488
6
+ metadata.gz: 0ad8db05f08251e67fb781321f3c245d26f4619a0a5b1e506b1c90f360241a9c881362c27f980b243fffd535baaeeb50136f8b7f30e18265a63b22bba77c2ef5
7
+ data.tar.gz: d572f4feb1372d71b3676f1e128dfafb38b3b3ccf947873385e3e6d87d61321fee5c04c2e12e2244fcd337cc9c989c9c3ec6f59c6610e567dd4609bd174bff85
checksums.yaml.gz.sig CHANGED
Binary file
data/History.md CHANGED
@@ -2,6 +2,26 @@
2
2
 
3
3
  ---
4
4
 
5
+ ## v5.0.0 [2025-01-29] Michael Granger <ged@faeriemud.org>
6
+
7
+ Improvements:
8
+
9
+ - Detect and raise an error when declaring a setting if it
10
+ would have replaced an existing method
11
+ - Add setting aliases
12
+ - Add a `setting_default` declaration for overriding the
13
+ settings defaults for subclasses.
14
+ - Add an accessor that can fetch embedded comments for
15
+ DSL-style settings
16
+
17
+
18
+ ## v4.2.0 [2020-12-28] Michael Granger <ged@faeriemud.org>
19
+
20
+ Improvements:
21
+
22
+ - Updates for Ruby 3
23
+
24
+
5
25
  ## v4.1.0 [2020-02-19] Michael Granger <ged@faeriemud.org>
6
26
 
7
27
  Improvements:
data/README.md CHANGED
@@ -32,7 +32,7 @@ single action.
32
32
 
33
33
  # user.rb
34
34
  require 'configurability'
35
-
35
+
36
36
  class User
37
37
  extend Configurability
38
38
 
@@ -104,7 +104,7 @@ You can configure the `Database` class (and all other objects extended with
104
104
  Configurability) with it like so:
105
105
 
106
106
  require 'configurability/config'
107
-
107
+
108
108
  config = Configurability::Config.load( 'config.yml' )
109
109
  Configurability.configure_objects( config )
110
110
 
@@ -153,6 +153,56 @@ alongside its getter and setter:
153
153
  Mailer.use_whitelist?
154
154
  # => true
155
155
 
156
+ If you want additional ways to check/set the setting, you can provide one or
157
+ more aliases for a settings which will cause additional setting methods to be
158
+ created:
159
+
160
+ class Server
161
+ extend Configurability
162
+ configurability( :server ) do
163
+ setting :environment, default: :development, alias: :host_env
164
+ end
165
+ end
166
+
167
+ Server.environment = :staging
168
+ Server.host_env
169
+ # => :staging
170
+
171
+
172
+ ### Inheritance
173
+
174
+ Subclasses inherit settings from their parents, but their setting values are
175
+ independent:
176
+
177
+ class Server
178
+ extend Configurability
179
+ configurability( :server ) do
180
+ setting :host, default: 'localhost'
181
+ setting :port, default: nil
182
+ end
183
+ end
184
+
185
+ class MailServer < Server; end
186
+
187
+ Server.host = '0.0.0.0'
188
+ MailServer.host
189
+ # => 'localhost'
190
+
191
+ If you wish to override the default setting value of the parent class, you can't
192
+ re-declare the setting but you can explicitly set the default:
193
+
194
+ class WebServer < Server
195
+ configurability( :server ) do
196
+ setting_default :port, 80
197
+ end
198
+ end
199
+
200
+ Server.port
201
+ # => nil
202
+
203
+ WebServer.port
204
+ # => 80
205
+
156
206
 
157
207
  ### More Details
158
208
 
@@ -374,8 +424,8 @@ write the modified config back out to the same file:
374
424
  then dump it to a YAML string:
375
425
 
376
426
  config.dump
377
- # => "--- \ndatabase: \n development: \n adapter: sqlite3\n
378
- database: db/dev.db\n pool: 5\n timeout: 5000\n testing: \n
427
+ # => "--- \ndatabase: \n development: \n adapter: sqlite3\n
428
+ database: db/dev.db\n pool: 5\n timeout: 5000\n testing: \n
379
429
  adapter: mysql\n database: t_fixedassets\n pool: 2\n timeout:
380
430
  5000\n production: \n adapter: postgres\n database:
381
431
  fixedassets\n pool: 25\n timeout: 50\nldap: \n uri:
@@ -443,7 +493,7 @@ and generate the API documentation.
443
493
 
444
494
  ## License
445
495
 
446
- Copyright (c) 2010-2020 Michael Granger and Mahlon E. Smith
496
+ Copyright (c) 2010-2025 Michael Granger and Mahlon E. Smith
447
497
  All rights reserved.
448
498
 
449
499
  Redistribution and use in source and binary forms, with or without
data/Rakefile CHANGED
@@ -3,7 +3,7 @@
3
3
  require 'rake/deveiate'
4
4
 
5
5
  Rake::DevEiate.setup( 'configurability' ) do |project|
6
- project.required_ruby_version = '~> 2.5'
6
+ project.required_ruby_version = '>= 2.5'
7
7
  project.publish_to = 'deveiate:/usr/local/www/public/code'
8
8
  end
9
9
 
@@ -1,5 +1,6 @@
1
1
  # -*- ruby -*-
2
- #encoding: utf-8
2
+
3
+ require 'prism'
3
4
 
4
5
  require 'loggability'
5
6
  require 'configurability' unless defined?( Configurability )
@@ -17,6 +18,7 @@ class Configurability::SettingInstaller
17
18
  ### constants to the specified +target+ object.
18
19
  def initialize( target )
19
20
  @target = target
21
+ @lexed = nil
20
22
  end
21
23
 
22
24
 
@@ -28,8 +30,17 @@ class Configurability::SettingInstaller
28
30
  ### Declare a config setting with the specified +name+.
29
31
  def setting( name, **options, &block )
30
32
  self.log.debug " adding %s setting to %p" % [ name, self.target ]
33
+
34
+ options[:alias] = Array( options[:alias] )
35
+ self.add_comment_accessor( name, options )
31
36
  self.add_setting_accessors( name, options, &block )
32
- self.add_default( name, options )
37
+ self.add_default( name, options[:default] )
38
+ end
39
+
40
+
41
+ ### Declare a new default for the setting with the specified +name+.
42
+ def setting_default( name, new_default )
43
+ self.add_default( name, new_default )
33
44
  end
34
45
 
35
46
 
@@ -39,6 +50,8 @@ class Configurability::SettingInstaller
39
50
 
40
51
  ### Add accessors with the specified +name+ to the target.
41
52
  def add_setting_accessors( name, options, &writer_hook )
53
+ self.check_for_duplicates( name, options )
54
+
42
55
  if options[:use_class_vars]
43
56
  self.target.class_variable_set( "@@#{name}", nil )
44
57
  else
@@ -47,13 +60,58 @@ class Configurability::SettingInstaller
47
60
 
48
61
  reader = self.make_setting_reader( name, options )
49
62
  writer = self.make_setting_writer( name, options, &writer_hook )
63
+ predicate = self.make_setting_predicate( name, options )
64
+ names = [ name ] + options[:alias]
65
+
66
+ names.each do |setting_name|
67
+ self.target.define_singleton_method( "#{setting_name}", &reader )
68
+ self.target.define_singleton_method( "#{setting_name}=", &writer )
69
+ self.target.define_singleton_method( "#{setting_name}?", &predicate ) if
70
+ options[:predicate]
71
+ end
72
+ end
73
+
74
+
75
+ ### Create a reader that returns any raw comments found immediately above the
76
+ ### specified +name+.
77
+ def add_comment_accessor( name, options )
78
+ # The source file with the configurablity block.
79
+ loc = caller_locations( 2, 1 ).first
50
80
 
51
- self.target.define_singleton_method( "#{name}", &reader )
52
- self.target.define_singleton_method( "#{name}=", &writer )
81
+ @lexed ||= Prism.lex_file( loc.path ).value
82
+ comments = @lexed.
83
+ take_while{|node| node.first.location.start_line < loc.lineno }.
84
+ reverse_each.
85
+ take_while{|node| node.first.type == :COMMENT }.
86
+ reverse_each.
87
+ map{|node| node.first.value }.
88
+ join
53
89
 
54
- if options[:predicate]
55
- predicate = self.make_setting_predicate( name, options )
56
- self.target.define_singleton_method( "#{name}?", &predicate )
90
+ if options[:use_class_vars]
91
+ self.target.class_variable_set( "@@#{name}_comments", comments )
92
+ else
93
+ self.target.instance_variable_set( "@#{name}_comments", comments )
94
+ end
95
+
96
+ reader = self.make_setting_reader( "#{name}_comments", options )
97
+ self.target.define_singleton_method( "#{name}_comments", &reader )
98
+ end
99
+
100
+
101
+ ### Check that there are not already accessors for the setting with the given +name+
102
+ ### and +options+.
103
+ def check_for_duplicates( name, options )
104
+ names = [ name.to_sym ] + options[:alias]
105
+
106
+ names.each do |method_name|
107
+ raise ScriptError, "setting %p collides with method #%s" % [ name, method_name ] if
108
+ self.target.singleton_methods.include?( name )
109
+ raise ScriptError, "setting %p collides with method #%s=" % [ name, method_name ] if
110
+ self.target.singleton_methods.include?( "#{method_name}=".to_sym )
111
+ if options[:predicate]
112
+ raise ScriptError, "setting %p collides with method #%s?" % [ name, method_name ] if
113
+ self.target.singleton_methods.include?( "#{method_name}?".to_sym )
114
+ end
57
115
  end
58
116
  end
59
117
 
@@ -110,9 +168,7 @@ class Configurability::SettingInstaller
110
168
 
111
169
  ### Add a default for +name+ to the CONFIG_DEFAULTS constant of the target, creating
112
170
  ### it if necessary.
113
- def add_default( name, options )
114
- default_value = options[ :default ]
115
-
171
+ def add_default( name, default_value )
116
172
  self.target.send( "#{name}=", default_value )
117
173
  if self.target.respond_to?( :const_defined? )
118
174
  defaults = if self.target.const_defined?( :CONFIG_DEFAULTS, false )
@@ -14,7 +14,7 @@ module Configurability
14
14
 
15
15
 
16
16
  # Library version constant
17
- VERSION = '4.1.0'
17
+ VERSION = '5.0.0'
18
18
 
19
19
  # Version-control revision constant
20
20
  REVISION = %q$Revision$
@@ -618,6 +618,95 @@ describe Configurability do
618
618
  end
619
619
 
620
620
 
621
+ it "allows a setting to be declared with a single alias" do
622
+ mod.configurability( :testconfig ) do
623
+ setting :environment, alias: :env, default: 'development'
624
+ end
625
+
626
+ expect {
627
+ mod.environment = 'production'
628
+ }.to change { mod.environment }.
629
+ from( 'development' ).
630
+ to( 'production' )
631
+
632
+ expect {
633
+ mod.env = 'staging'
634
+ }.to change { mod.environment }.
635
+ from( 'production' ).
636
+ to( 'staging' )
637
+
638
+ expect( mod.env ).to eq( 'staging' )
639
+
640
+ expect( mod.defaults ).to include(
641
+ environment: 'development',
642
+ )
643
+ expect( mod.defaults ).not_to include( :env )
644
+ end
645
+
646
+
647
+ it "allows a setting to be declared with multiple aliases" do
648
+ mod.configurability( :testconfig ) do
649
+ setting :environment, alias: [:env, :host], default: 'development'
650
+ end
651
+
652
+ expect {
653
+ mod.environment = 'production'
654
+ }.to change { mod.environment }.
655
+ from( 'development' ).
656
+ to( 'production' )
657
+
658
+ expect {
659
+ mod.env = 'staging'
660
+ }.to change { mod.environment }.
661
+ from( 'production' ).
662
+ to( 'staging' )
663
+
664
+ expect {
665
+ mod.host = 'development'
666
+ }.to change { mod.environment }.
667
+ from( 'staging' ).
668
+ to( 'development' )
669
+
670
+ expect( mod.env ).to eq( 'development' )
671
+ expect( mod.host ).to eq( 'development' )
672
+
673
+ expect( mod.defaults ).to include(
674
+ environment: 'development',
675
+ )
676
+ expect( mod.defaults ).not_to include( :env )
677
+ end
678
+
679
+
680
+ it "errors when declaring duplicate settings" do
681
+ expect {
682
+ mod.configurability( :testconfig ) do
683
+ setting :environment, default: 'development'
684
+ setting :environment, default: 'production'
685
+ end
686
+ }.to raise_error( ScriptError, /collides with method/i )
687
+ end
688
+
689
+
690
+ it "errors when declaring an alias that clobbers an existing setting" do
691
+ expect {
692
+ mod.configurability( :testconfig ) do
693
+ setting :environment, default: 'development'
694
+ setting :env, alias: :environment, default: 'production'
695
+ end
696
+ }.to raise_error( ScriptError, /collides with method/i )
697
+ end
698
+
699
+
700
+ it "errors when declaring an alias that clobbers an existing alias" do
701
+ expect {
702
+ mod.configurability( :testconfig ) do
703
+ setting :host, alias: :environment, default: 'development'
704
+ setting :env, alias: :environment, default: 'production'
705
+ end
706
+ }.to raise_error( ScriptError, /collides with method/i )
707
+ end
708
+
709
+
621
710
  it "installs the current config after it's done if it's already loaded" do
622
711
  config = OpenStruct.new( testconfig: {
623
712
  environment: 'production',
@@ -667,7 +756,7 @@ describe Configurability do
667
756
  end
668
757
 
669
758
 
670
- it "supports inheritance of defaults" do
759
+ it "supports overriding defaults for child classes" do
671
760
  parent_class = Class.new
672
761
  parent_class.extend( Configurability )
673
762
  parent_class.configurability( :testconfig ) do
@@ -676,7 +765,7 @@ describe Configurability do
676
765
 
677
766
  child_class = Class.new( parent_class )
678
767
  child_class.configurability( :testconfig ) do
679
- setting :environment, default: :staging
768
+ setting_default :environment, :staging
680
769
  setting :apikey, default: 'foom'
681
770
  end
682
771
 
@@ -688,6 +777,25 @@ describe Configurability do
688
777
  end
689
778
 
690
779
 
780
+ it "uses the setting block for setting up subclass defaults" do
781
+ superclass = Class.new
782
+ superclass.extend( described_class )
783
+ superclass.configurability( :testconfig ) do
784
+ setting :data_dir, default: 'this/that' do |dir|
785
+ Pathname( dir )
786
+ end
787
+ end
788
+
789
+ subclass = Class.new( superclass )
790
+ subclass.configurability( :testconfig ) do
791
+ setting_default :data_dir, 'an/other/place'
792
+ end
793
+
794
+ expect( subclass.data_dir ).to be_a( Pathname )
795
+ expect( subclass.data_dir.to_s ).to eq( 'an/other/place' )
796
+ end
797
+
798
+
691
799
  it "allows the use of class variables instead of class-instance variables for settings on a Class" do
692
800
  superclass = Class.new
693
801
  superclass.extend( Configurability )
@@ -743,6 +851,29 @@ describe Configurability do
743
851
  }.to change { mod.use_whitelist? }.from( false ).to( true )
744
852
  end
745
853
 
854
+
855
+ it "can parse and recall comments for a setting" do
856
+ mod.configurability( :testconfig ) do
857
+ setting :use_whitelist
858
+
859
+ # Set the runtime environment
860
+ setting :environment
861
+
862
+ ##
863
+ # A multiline example
864
+ # to illustrate comments are
865
+ # unmolested.
866
+ setting :apikey do |key|
867
+ raise "Invalid API key!" unless key.nil? || key.to_s =~ /\A\p{Xdigit}{32}\z/
868
+ key
869
+ end
870
+ end
871
+
872
+ expect( mod.use_whitelist_comments ).to be_empty
873
+ expect( mod.environment_comments ).to match( /^# Set the runtime environment$/ )
874
+ expect( mod.apikey_comments.count("\n") ).to eq( 4 )
875
+ expect( mod.apikey_comments ).to match( /comments are\n# unmolested/m )
876
+ end
746
877
  end
747
878
 
748
879
 
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,41 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: configurability
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.0
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Granger
8
8
  - Mahlon E. Smith
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain:
12
12
  - |
13
13
  -----BEGIN CERTIFICATE-----
14
- MIIENDCCApygAwIBAgIBATANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdnZWQv
15
- REM9RmFlcmllTVVEL0RDPW9yZzAeFw0xOTEwMDkwMDM2NTdaFw0yMDEwMDgwMDM2
16
- NTdaMCIxIDAeBgNVBAMMF2dlZC9EQz1GYWVyaWVNVUQvREM9b3JnMIIBojANBgkq
17
- hkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAvyVhkRzvlEs0fe7145BYLfN6njX9ih5H
18
- L60U0p0euIurpv84op9CNKF9tx+1WKwyQvQP7qFGuZxkSUuWcP/sFhDXL1lWUuIl
19
- M4uHbGCRmOshDrF4dgnBeOvkHr1fIhPlJm5FO+Vew8tSQmlDsosxLUx+VB7DrVFO
20
- 5PU2AEbf04GGSrmqADGWXeaslaoRdb1fu/0M5qfPTRn5V39sWD9umuDAF9qqil/x
21
- Sl6phTvgBrG8GExHbNZpLARd3xrBYLEFsX7RvBn2UPfgsrtvpdXjsHGfpT3IPN+B
22
- vQ66lts4alKC69TE5cuKasWBm+16A4aEe3XdZBRNmtOu/g81gvwA7fkJHKllJuaI
23
- dXzdHqq+zbGZVSQ7pRYHYomD0IiDe1DbIouFnPWmagaBnGHwXkDT2bKKP+s2v21m
24
- ozilJg4aar2okb/RA6VS87o+d7g6LpDDMMQjH4G9OPnJENLdhu8KnPw/ivSVvQw7
25
- N2I4L/ZOIe2DIVuYH7aLHfjZDQv/mNgpAgMBAAGjdTBzMAkGA1UdEwQCMAAwCwYD
26
- VR0PBAQDAgSwMB0GA1UdDgQWBBRyjf55EbrHagiRLqt5YAd3yb8k4DAcBgNVHREE
27
- FTATgRFnZWRARmFlcmllTVVELm9yZzAcBgNVHRIEFTATgRFnZWRARmFlcmllTVVE
28
- Lm9yZzANBgkqhkiG9w0BAQsFAAOCAYEAFqsr6o0SvQRgjQVmhbQvExRnCMCoW1yb
29
- FJiN7A5RA2Iy2E61OG1Ul5nGmaDmx/PNB/6JIbIV3B9Uq8aTZx4uOjK7r8vMl1/t
30
- ZfY7r6HejJfXlcO2m6JDMbpdyEVv916LncBkzZRz6vnnNCx+31f15FKddxujpAFd
31
- qpn3JRQY+oj7ZkoccL/IUiDpxQWeS3oOoz9qr2kVTp8R50InZimt79FqCl/1m66W
32
- kdOuf+wM3DDx7Rt4IVNHrhGlyfMr7xjKW1Q3gll+pMN1DT6Ajx/t3JDSEg7BnnEW
33
- r7AciSO6J4ApUdqyG+coLFlGdtgFTgRHv7ihbQtDI7Z/LV7A4Spn1j2PK3j0Omri
34
- kSl1hPVigRytfgdVGiLXzvkkrkgj9EknCaj5UHbac7XvVBrljXj9hsnnqTANaKsg
35
- jBZSA+N+xUTgUWpXjjwsLZjzJkhWATJWq+krNXcqpwXo6HsjmdUxoFMt63RBb+sI
36
- XrxOxp8o0uOkU7FdLSGsyqJ2LzsR4obN
14
+ MIIEbDCCAtSgAwIBAgIBATANBgkqhkiG9w0BAQsFADA+MQwwCgYDVQQDDANnZWQx
15
+ GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
16
+ HhcNMjUwMTAxMDMzMTA5WhcNMjYwMTAxMDMzMTA5WjA+MQwwCgYDVQQDDANnZWQx
17
+ GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
18
+ ggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC/JWGRHO+USzR97vXjkFgt
19
+ 83qeNf2KHkcvrRTSnR64i6um/ziin0I0oX23H7VYrDJC9A/uoUa5nGRJS5Zw/+wW
20
+ ENcvWVZS4iUzi4dsYJGY6yEOsXh2CcF46+QevV8iE+UmbkU75V7Dy1JCaUOyizEt
21
+ TH5UHsOtUU7k9TYARt/TgYZKuaoAMZZd5qyVqhF1vV+7/Qzmp89NGflXf2xYP26a
22
+ 4MAX2qqKX/FKXqmFO+AGsbwYTEds1mksBF3fGsFgsQWxftG8GfZQ9+Cyu2+l1eOw
23
+ cZ+lPcg834G9DrqW2zhqUoLr1MTly4pqxYGb7XoDhoR7dd1kFE2a067+DzWC/ADt
24
+ +QkcqWUm5oh1fN0eqr7NsZlVJDulFgdiiYPQiIN7UNsii4Wc9aZqBoGcYfBeQNPZ
25
+ soo/6za/bWajOKUmDhpqvaiRv9EDpVLzuj53uDoukMMwxCMfgb04+ckQ0t2G7wqc
26
+ /D+K9JW9DDs3Yjgv9k4h7YMhW5gftosd+NkNC/+Y2CkCAwEAAaN1MHMwCQYDVR0T
27
+ BAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFHKN/nkRusdqCJEuq3lgB3fJvyTg
28
+ MBwGA1UdEQQVMBOBEWdlZEBGYWVyaWVNVUQub3JnMBwGA1UdEgQVMBOBEWdlZEBG
29
+ YWVyaWVNVUQub3JnMA0GCSqGSIb3DQEBCwUAA4IBgQBjrBzCKWzXFigswYSPzGO8
30
+ 9atBtY/eQdcN6KCL+PTzQBD9yePGF7H/xsww3awRauP+D1VUjCFbiiC3Qb0Ww0Qd
31
+ OVA0s10T9KpZ8nb2XyKocSK7TfgDhcyr0V4H2MPxwK9SWYjGGh8z9z9HmT0i3PyX
32
+ fXOSzzEoG6u26HIOg0nxSpitEjiAHBekQxy9ka5NuQbxoxMg+eIHU4rU9IUhu0Rf
33
+ wl4wuvPVE3UQK0v0uqT6rJukEKQ1iNgK5R8klgEIv79XhQPgTkMt31FGfrwOp6HB
34
+ OE0HMwOwY9B0w3aOxxdMQyyRxaZVv3eWE5RimQI7T0TUaxPngtS33ByMZjTeidxi
35
+ ESIUEPVXoBCkFgLW1EVlBb+rG7WLYod4eVll4tKA42Bi2Ju90tqiJ1YQiyuRfCnp
36
+ 8qAqdfV+4u6Huu1KzAuDQCheyEyISsLST37sU/irV3czV6BiFipWag1XiJciRT3A
37
+ wZqCfTNVHTdtsCbfdA1DsA3RdG2iEH3TOHzv1Rqzqh4=
37
38
  -----END CERTIFICATE-----
38
- date: 2020-02-19 00:00:00.000000000 Z
39
+ date: 2025-01-29 00:00:00.000000000 Z
39
40
  dependencies:
40
41
  - !ruby/object:Gem::Dependency
41
42
  name: loggability
@@ -51,20 +52,34 @@ dependencies:
51
52
  - - "~>"
52
53
  - !ruby/object:Gem::Version
53
54
  version: '0.15'
55
+ - !ruby/object:Gem::Dependency
56
+ name: prism
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.3'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.3'
54
69
  - !ruby/object:Gem::Dependency
55
70
  name: rake-deveiate
56
71
  requirement: !ruby/object:Gem::Requirement
57
72
  requirements:
58
73
  - - "~>"
59
74
  - !ruby/object:Gem::Version
60
- version: '0.10'
75
+ version: '0.17'
61
76
  type: :development
62
77
  prerelease: false
63
78
  version_requirements: !ruby/object:Gem::Requirement
64
79
  requirements:
65
80
  - - "~>"
66
81
  - !ruby/object:Gem::Version
67
- version: '0.10'
82
+ version: '0.17'
68
83
  - !ruby/object:Gem::Dependency
69
84
  name: simplecov
70
85
  requirement: !ruby/object:Gem::Requirement
@@ -93,12 +108,10 @@ dependencies:
93
108
  - - "~>"
94
109
  - !ruby/object:Gem::Version
95
110
  version: '3.9'
96
- description: |-
97
- Configurability is a unified, non-intrusive, assume-nothing configuration system
98
- for Ruby. It lets you keep the configuration for multiple objects in a single
99
- config file, load the file when it's convenient for you, and distribute the
100
- configuration when you're ready, sending it everywhere it needs to go with a
101
- single action.
111
+ description: Configurability is a unified, non-intrusive, assume-nothing configuration
112
+ system for Ruby. It lets you keep the configuration for multiple objects in a single
113
+ config file, load the file when it’s convenient for you, and distribute the configuration
114
+ when you’re ready, sending it everywhere it needs to go with a single action.
102
115
  email:
103
116
  - ged@faeriemud.org
104
117
  - mahlon@martini.nu
@@ -127,14 +140,19 @@ files:
127
140
  homepage: https://configur.ability.guide/
128
141
  licenses:
129
142
  - BSD-3-Clause
130
- metadata: {}
131
- post_install_message:
143
+ metadata:
144
+ homepage_uri: https://configur.ability.guide/
145
+ documentation_uri: http://deveiate.org/code/configurability
146
+ changelog_uri: http://deveiate.org/code/configurability/History_md.html
147
+ source_uri: https://hg.sr.ht/~ged/Configurability
148
+ bug_tracker_uri: https://todo.sr.ht/~ged/Configurability
149
+ post_install_message:
132
150
  rdoc_options: []
133
151
  require_paths:
134
152
  - lib
135
153
  required_ruby_version: !ruby/object:Gem::Requirement
136
154
  requirements:
137
- - - "~>"
155
+ - - ">="
138
156
  - !ruby/object:Gem::Version
139
157
  version: '2.5'
140
158
  required_rubygems_version: !ruby/object:Gem::Requirement
@@ -143,8 +161,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
161
  - !ruby/object:Gem::Version
144
162
  version: '0'
145
163
  requirements: []
146
- rubygems_version: 3.1.2
147
- signing_key:
164
+ rubygems_version: 3.5.22
165
+ signing_key:
148
166
  specification_version: 4
149
167
  summary: Configurability is a unified, non-intrusive, assume-nothing configuration
150
168
  system for Ruby.
metadata.gz.sig CHANGED
Binary file