configurability 4.2.0 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|