configurability 4.2.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/History.md +13 -0
- data/README.md +55 -5
- data/lib/configurability/setting_installer.rb +66 -10
- data/lib/configurability.rb +1 -1
- data/spec/configurability_spec.rb +133 -2
- data.tar.gz.sig +0 -0
- metadata +43 -28
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3d72bd8604379adbc7d7cc9fcaad9cbf5e05f506b4d5f2b91bcee03b31d980d
|
4
|
+
data.tar.gz: 82d58d94493be733dd8141dce382c644667c439bddfc29e3656c93938695dbd9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ad8db05f08251e67fb781321f3c245d26f4619a0a5b1e506b1c90f360241a9c881362c27f980b243fffd535baaeeb50136f8b7f30e18265a63b22bba77c2ef5
|
7
|
+
data.tar.gz: d572f4feb1372d71b3676f1e128dfafb38b3b3ccf947873385e3e6d87d61321fee5c04c2e12e2244fcd337cc9c989c9c3ec6f59c6610e567dd4609bd174bff85
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/History.md
CHANGED
@@ -2,6 +2,19 @@
|
|
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
|
+
|
5
18
|
## v4.2.0 [2020-12-28] Michael Granger <ged@faeriemud.org>
|
6
19
|
|
7
20
|
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-
|
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
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# -*- ruby -*-
|
2
|
-
|
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
|
-
|
52
|
-
|
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[:
|
55
|
-
|
56
|
-
|
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,
|
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 )
|
data/lib/configurability.rb
CHANGED
@@ -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
|
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
|
-
|
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,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: configurability
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
@@ -11,30 +11,32 @@ bindir: bin
|
|
11
11
|
cert_chain:
|
12
12
|
- |
|
13
13
|
-----BEGIN CERTIFICATE-----
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
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=
|
36
38
|
-----END CERTIFICATE-----
|
37
|
-
date:
|
39
|
+
date: 2025-01-29 00:00:00.000000000 Z
|
38
40
|
dependencies:
|
39
41
|
- !ruby/object:Gem::Dependency
|
40
42
|
name: loggability
|
@@ -50,6 +52,20 @@ dependencies:
|
|
50
52
|
- - "~>"
|
51
53
|
- !ruby/object:Gem::Version
|
52
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'
|
53
69
|
- !ruby/object:Gem::Dependency
|
54
70
|
name: rake-deveiate
|
55
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,9 +110,8 @@ dependencies:
|
|
94
110
|
version: '3.9'
|
95
111
|
description: Configurability is a unified, non-intrusive, assume-nothing configuration
|
96
112
|
system for Ruby. It lets you keep the configuration for multiple objects in a single
|
97
|
-
config file, load the file when it
|
98
|
-
|
99
|
-
single action.
|
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.
|
100
115
|
email:
|
101
116
|
- ged@faeriemud.org
|
102
117
|
- mahlon@martini.nu
|
@@ -146,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
161
|
- !ruby/object:Gem::Version
|
147
162
|
version: '0'
|
148
163
|
requirements: []
|
149
|
-
rubygems_version: 3.
|
164
|
+
rubygems_version: 3.5.22
|
150
165
|
signing_key:
|
151
166
|
specification_version: 4
|
152
167
|
summary: Configurability is a unified, non-intrusive, assume-nothing configuration
|
metadata.gz.sig
CHANGED
Binary file
|