ruby-conf 2.4.0 → 2.5.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.
data/Gemfile CHANGED
@@ -1,11 +1,6 @@
1
1
  source "http://rubygems.org"
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- # gem "activesupport", ">= 2.3.5"
5
2
 
6
- # Add dependencies to develop your gem here.
7
- # Include everything needed to run rake, tests, features, etc.
8
- group :development do
3
+ group :development, :test do
9
4
  gem "rspec"
10
5
  gem "rr"
11
6
  gem "yard"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.4.0
1
+ 2.5.0
data/lib/ruby-conf.rb CHANGED
@@ -2,15 +2,47 @@
2
2
  #
3
3
  # @author Hollin Wilkins & Curtis Schofield & Mason Bo-bay-son
4
4
 
5
- $RUBY_CONF = nil
5
+ require 'find'
6
+ require 'digest/md5'
7
+
8
+ module RubyConf
9
+
10
+ class Loader < BasicObject
11
+ @@conf = @@path = @@mtime = @@md5 = nil
12
+
13
+ class << self
14
+ def nil?() @@conf.nil? end
15
+ def __rc_loaded_conf() { path:@@path, mtime:@@mtime, md5:@@md5 } end
16
+ def __rc_conf() @@conf end
17
+ def __rc_set_conf(conf = nil) @@conf, @@path, @@mtime, @@md5 = conf, nil, nil, nil end
18
+ def __rc_load(path)
19
+ __rc_set_conf
20
+ @@path, @@mtime, @@md5 = path, File.mtime(path).to_i, Digest::MD5.hexdigest(File.read(path)) if load(path) && @@conf
21
+ end
22
+ def method_missing(name, *args, &block)
23
+ if @@mtime && @@mtime != File.mtime(@@path).to_i && @@md5 != Digest::MD5.hexdigest(File.read(@@path))
24
+ __rc_load(@@path)
25
+ end
6
26
 
7
- module Magic
8
- attr_accessor :__rc_chain
9
- def __rc_gather() "#{to_s}#{__rc_chain.nil? ? "" : " #{__rc_chain.__rc_gather}"}" end
10
- end
27
+ if @@conf.nil?
28
+ Find.find('.') do |path|
29
+ next unless @@conf.nil? && path =~ /\.(?:rb|config|conf)$/
30
+ if path =~ /\.ruby-conf$/ || File.read(path) =~ /^\s*\#\s*\:\s*ruby-conf\s*$/mi
31
+ break if __rc_load(path)
32
+ end
33
+ end
34
+ end
35
+ @@conf.__send__(name, *args, &block)
36
+ end
37
+ def to_s() @@conf.to_s end
38
+ def inspect() @@conf.inspect end
39
+ end
40
+ end
11
41
 
12
- class RubyConf < BasicObject
13
- @@__rc_configs = {}
42
+ module Magic
43
+ attr_accessor :__rc_chain
44
+ def __rc_gather() "#{to_s}#{__rc_chain.nil? ? "" : " #{__rc_chain.__rc_gather}"}" end
45
+ end
14
46
 
15
47
  class Config
16
48
  attr_reader :__rc_attributes, :__rc_parent, :__rc_name, :__rc_chains, :__rc_locked
@@ -152,39 +184,44 @@ class RubyConf < BasicObject
152
184
  def inspect() __rc_build_inspect end
153
185
  end
154
186
 
155
- def self.define(name = nil, options = {}, &block)
156
- config = Config.new(name, &block)
157
- @@__rc_configs[name.to_sym] = config unless name.nil?
158
-
159
- const = options.fetch(:as, name)
160
- if const && const.to_s[/^[A-Z]/]
161
- const = const.to_sym
162
- ::Object.const_set(const, config) if !::Object.const_defined?(const) || ::Object.const_get(const).is_a?(Config)
163
- end
164
-
165
- if $RUBY_CONF.nil? && (name.nil? || name.to_s =~ /^(?:Rails)?Conf/)
166
- $RUBY_CONF = if ::Object.const_defined?(:Rails)
167
- cfg = config[:"#{::Rails.env}"] || config[:"#{::Rails.env}_conf"] || config[:"#{::Rails.env}_config"]
168
- cfg && cfg.detach || config
169
- else
170
- config
171
- end
187
+ @@__rc_configs = {}
188
+ class << self
189
+ def clear()
190
+ Loader::__rc_set_conf
191
+ @@__rc_configs.clear
172
192
  end
173
193
 
174
- config
175
- end
194
+ def [](name) @@__rc_configs[name.to_sym] end
195
+ def method_missing(name, *args) @@__rc_configs[name.to_sym] end
196
+ def respond_to?(name) @@__rc_configs.key?(name.to_sym) end
176
197
 
177
- def self.[](name) @@__rc_configs[name.to_sym] end
198
+ def define(name = nil, options = {}, &block)
199
+ config = Config.new(name, &block)
200
+ @@__rc_configs[name.to_sym] = config unless name.nil?
178
201
 
179
- def self.method_missing(name, *args) @@__rc_configs[name.to_sym] end
202
+ const = options.fetch(:as, name)
203
+ if const && const.to_s[/^[A-Z]/]
204
+ const = const.to_sym
205
+ ::Object.const_set(const, config) if !::Object.const_defined?(const) || ::Object.const_get(const).is_a?(Config)
206
+ end
180
207
 
181
- def self.respond_to?(name) @@__rc_configs.key?(name.to_sym) end
208
+ if Loader::__rc_conf.nil? && (name.nil? || name.to_s =~ /^(?:Rails)?Conf/)
209
+ default_conf = if ::Object.const_defined?(:Rails)
210
+ cfg = config[:"#{::Rails.env}"] || config[:"#{::Rails.env}_conf"] || config[:"#{::Rails.env}_config"]
211
+ cfg && cfg.detach || config
212
+ else
213
+ config
214
+ end
215
+ Loader::__rc_set_conf(default_conf)
216
+ end
182
217
 
183
- def self.clear()
184
- $RUBY_CONF = nil
185
- @@__rc_configs.keys.each do |config|
186
- remove_const(config.to_sym) if config.to_s[/^[A-Z]/] && const_defined?(config.to_sym)
218
+ config
187
219
  end
188
- @@__rc_configs.clear
189
220
  end
221
+
190
222
  end
223
+
224
+ RUBY_CONF = RubyConf::Loader
225
+
226
+
227
+
data/ruby-conf.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "ruby-conf"
8
- s.version = "2.4.0"
8
+ s.version = "2.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Curtis Schofield & Hollin Wilkins & Mason"]
@@ -28,7 +28,10 @@ Gem::Specification.new do |s|
28
28
  "VERSION",
29
29
  "lib/ruby-conf.rb",
30
30
  "ruby-conf.gemspec",
31
+ "spec/lib/a_not_conf.rb",
31
32
  "spec/lib/ruby-conf_spec.rb",
33
+ "spec/lib/test_conf.rb.tmpl",
34
+ "spec/lib/z_not_loaded.rb",
32
35
  "spec/spec_helper.rb"
33
36
  ]
34
37
  s.homepage = "http://github.com/blazingpair/ruby-conf"
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ raise "this is missing the ruby-conf comment directive and should not be loaded"
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'ruby-conf'
3
2
 
4
3
  describe RubyConf do
5
4
 
@@ -195,8 +194,10 @@ TEXT
195
194
  let(:inherited_config) do
196
195
  RubyConf.define "inherited_config" do
197
196
  basic do
197
+ movie "b"
198
198
  thing do
199
199
  origin "swamp"
200
+ type "monster"
200
201
  end
201
202
  end
202
203
 
@@ -209,14 +210,25 @@ TEXT
209
210
  city :inherits => basic do
210
211
  thing do
211
212
  origin "ocean"
213
+ name "bob"
212
214
  end
213
215
  end
214
216
 
217
+ chained :inherits => city do
218
+ thing do
219
+ origin "space"
220
+ end
221
+ end
215
222
  end
216
223
  end
217
224
  it "pre-loads a config with a existing config" do
218
225
  inherited_config.laboritory.thing.origin.should == inherited_config.basic.thing.origin
219
226
  end
227
+ it "chains inherited configs" do
228
+ inherited_config.chained.movie.should == "b"
229
+ inherited_config.chained.thing.origin.should == "space"
230
+ inherited_config.chained.thing.name.should == "bob"
231
+ end
220
232
  it "does not overwrite values" do
221
233
  inherited_config.city.thing.origin.should == "ocean"
222
234
  end
@@ -365,13 +377,48 @@ TEXT
365
377
 
366
378
  describe "Automatically sets the RAILS_CONF variable" do
367
379
 
380
+ after do
381
+ dir = Dir["./**/test_conf.rb.tmpl"].first[/^(.*?)\/test_conf.rb.tmpl$/, 1]
382
+ File.delete("#{dir}/test_conf.rb") if File.exists?("#{dir}/test_conf.rb")
383
+ end
384
+
385
+ it "will autoload the first ruby-conf that it can find if none is provided" do
386
+ dir = Dir["./**/test_conf.rb.tmpl"].first[/^(.*?)\/test_conf.rb.tmpl$/, 1]
387
+
388
+ val = Random.rand.to_s
389
+ File.write("#{dir}/test_conf.rb", File.read("#{dir}/test_conf.rb.tmpl").gsub('{{VALUE}}', val))
390
+
391
+ RUBY_CONF.should be_nil
392
+ RUBY_CONF.ident.should == "FOUND AND LOADED BASIC CONFIG #{val}"
393
+ loaded = RUBY_CONF.__rc_loaded_conf
394
+
395
+ FileUtils.touch(loaded[:path], mtime: 100)
396
+ File.mtime(loaded[:path]).to_i.should_not == loaded[:mtime]
397
+ RUBY_CONF.ident.should == "FOUND AND LOADED BASIC CONFIG #{val}"
398
+ RUBY_CONF.__rc_loaded_conf[:mtime].should == loaded[:mtime]
399
+
400
+ val = Random.rand.to_s
401
+ File.write("#{dir}/test_conf.rb", File.read("#{dir}/test_conf.rb.tmpl").gsub('{{VALUE}}', val))
402
+ FileUtils.touch(loaded[:path], mtime: 100)
403
+ RUBY_CONF.ident.should == "FOUND AND LOADED BASIC CONFIG #{val}"
404
+ RUBY_CONF.__rc_loaded_conf[:mtime].should_not == loaded[:mtime]
405
+
406
+ RubyConf.clear
407
+ module ::Rails
408
+ def self.env() "foo" end
409
+ end
410
+ ::Object.const_defined?(:Rails).should be_true
411
+ RUBY_CONF.should be_nil
412
+ RUBY_CONF.ident.should == "FOUND AND LOADED RAILS ENV CONFIG #{val}"
413
+ end
414
+
368
415
  it "sets the first unnamed config as default" do
369
- $RUBY_CONF.should be_nil
416
+ RUBY_CONF.should be_nil
370
417
  first = RubyConf.define { ident "first" }
371
- $RUBY_CONF.should_not be_nil
418
+ RUBY_CONF.should_not be_nil
372
419
  second = RubyConf.define { ident "second" }
373
- $RUBY_CONF.should == first
374
- $RUBY_CONF.ident.should == "first"
420
+ RUBY_CONF.__rc_conf.should == first
421
+ RUBY_CONF.ident.should == "first"
375
422
  end
376
423
 
377
424
  it "sets the proper config based on Rails environment and detaches, if it exists" do
@@ -380,36 +427,35 @@ TEXT
380
427
  end
381
428
  ::Object.const_defined?(:Rails).should be_true
382
429
 
383
- $RUBY_CONF.should be_nil
430
+ RUBY_CONF.should be_nil
384
431
  RubyConf.define do
385
432
  foo { ident "correct" }
386
433
  bar { ident "wrong" }
387
434
  end
388
- $RUBY_CONF.ident.should == "correct"
435
+ RUBY_CONF.ident.should == "correct"
389
436
 
390
437
  RubyConf.clear
391
- $RUBY_CONF.should be_nil
438
+ RUBY_CONF.should be_nil
392
439
  RubyConf.define do
393
440
  foo_conf { ident "correct" }
394
441
  bar_conf { ident "wrong" }
395
442
  end
396
- $RUBY_CONF.ident.should == "correct"
443
+ RUBY_CONF.ident.should == "correct"
397
444
 
398
445
  RubyConf.clear
399
- $RUBY_CONF.should be_nil
446
+ RUBY_CONF.should be_nil
400
447
  RubyConf.define do
401
448
  foo_config { ident "correct" }
402
449
  bar_config { ident "wrong" }
403
450
  end
404
- $RUBY_CONF.ident.should == "correct"
451
+ RUBY_CONF.ident.should == "correct"
405
452
 
406
453
  RubyConf.clear
407
- $RUBY_CONF.should be_nil
454
+ RUBY_CONF.should be_nil
408
455
  RubyConf.define do
409
456
  ident "correct"
410
457
  end
411
- $RUBY_CONF.ident.should == "correct"
412
-
458
+ RUBY_CONF.ident.should == "correct"
413
459
  end
414
460
  end
415
461
  end
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #this has the ruby-conf comment directive should be auto-loaded when required
4
+ #:ruby-conf
5
+
6
+ RubyConf.define do
7
+ ident "FOUND AND LOADED BASIC CONFIG {{VALUE}}"
8
+ foo do
9
+ ident "FOUND AND LOADED RAILS ENV CONFIG {{VALUE}}"
10
+ end
11
+ end
12
+
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #:ruby-conf
4
+
5
+ raise "this has the ruby-conf comment directive, but another file should have already won"
data/spec/spec_helper.rb CHANGED
@@ -3,6 +3,7 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
3
  require 'rspec'
4
4
  require 'rr'
5
5
  require 'ruby-conf'
6
+ require 'fileutils'
6
7
 
7
8
  # Requires supporting files with custom matchers and macros, etc,
8
9
  # in ./support/ and its subdirectories.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-conf
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 2.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -95,7 +95,10 @@ files:
95
95
  - VERSION
96
96
  - lib/ruby-conf.rb
97
97
  - ruby-conf.gemspec
98
+ - spec/lib/a_not_conf.rb
98
99
  - spec/lib/ruby-conf_spec.rb
100
+ - spec/lib/test_conf.rb.tmpl
101
+ - spec/lib/z_not_loaded.rb
99
102
  - spec/spec_helper.rb
100
103
  homepage: http://github.com/blazingpair/ruby-conf
101
104
  licenses:
@@ -112,7 +115,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
112
115
  version: '0'
113
116
  segments:
114
117
  - 0
115
- hash: 121205113869847411
118
+ hash: 3183998097160756917
116
119
  required_rubygems_version: !ruby/object:Gem::Requirement
117
120
  none: false
118
121
  requirements: