constance 1.0.0 → 1.1.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/README.md CHANGED
@@ -48,6 +48,10 @@ or using a block:
48
48
  self.caller_search_mapping = {/(\/app\/|\/lib\/)/ => {'Journey' => 'Fantastic::Journey'}} # go through the caller stack to see if was called from a local or gem file that had app or lib in the path
49
49
  end
50
50
 
51
+ ### Replacing existing constants
52
+
53
+ Constance::Resolver.will_replace(Journey)
54
+
51
55
  ### Example
52
56
 
53
57
  Non-verbose debug logging:
@@ -9,10 +9,14 @@ module ActiveSupport
9
9
  puts "Loading missing constant from_module: #{from_mod.inspect} const_name: #{const_name.inspect}\ncaller was:\n#{caller.pretty_inspect}" if Constance.debug? && Constance.verbose?
10
10
  result = Constance::Resolver.resolve(from_mod, const_name)
11
11
  if result
12
- puts "Loaded missing constant from_module: #{from_mod.inspect} const_name: #{const_name.inspect} using Constance::Resolver. Got: #{result.inspect}" if Constance.debug?
12
+ puts "Loaded missing constant from_module: #{from_mod.inspect} const_name: #{const_name.inspect} using Constance::Resolver. Got: #{result.inspect}" if result && Constance.debug?
13
13
  else
14
14
  result = load_missing_constant_constance_renamed(from_mod, const_name)
15
- puts "Loaded missing constant from_module: #{from_mod.inspect} const_name: #{const_name.inspect} using ActiveSupport::Dependencies. Got: #{result.inspect}}" if Constance.debug?
15
+ puts "Loaded missing constant from_module: #{from_mod.inspect} const_name: #{const_name.inspect} using ActiveSupport::Dependencies. Got: #{result.inspect}}" if result && Constance.debug?
16
+ end
17
+ unless result
18
+ result = Constance::Resolver::Store[const_name.to_sym]
19
+ puts "Loaded missing constant from_module: #{from_mod.inspect} const_name: #{const_name.inspect} using Constance::Resolver. Got: #{result.inspect}" if result && Constance.debug?
16
20
  end
17
21
  result
18
22
  end
@@ -2,6 +2,8 @@ require 'constance/config'
2
2
 
3
3
  module Constance
4
4
  class Resolver
5
+ Store = {}
6
+
5
7
  # return a constant or if returns nil, Rails will use ActiveSupport::Dependencies.load_missing_constant
6
8
  def self.resolve(from_mod, const_name)
7
9
  if Constance.caller_search_mapping
@@ -14,7 +16,8 @@ module Constance
14
16
  klass = Constance.proc.call(from_mod, const_name)
15
17
  puts "#{self.class.name} proc did not resolve" if Constance.verbose? && !klass
16
18
  end
17
- if klass
19
+ # if got something and didn't ask to replace it
20
+ if klass && !Store[const_name.to_sym]
18
21
  puts "#{self.class.name} setting #{const_name} => #{klass} on ActiveSupport::Dependencies::Reference @store" if Constance.verbose?
19
22
  ActiveSupport::Dependencies::Reference.instance_variable_get(:@store)[const_name] = klass if klass
20
23
  end
@@ -31,5 +34,14 @@ module Constance
31
34
  end
32
35
  end
33
36
  end
37
+
38
+ def self.will_replace(const)
39
+ Store[const.to_s.to_sym] = const
40
+ begin
41
+ Object.send(:remove_const, const)
42
+ rescue
43
+ puts "#{self.class.name} removed #{const.to_s.to_sym} with:\n#{$!.message}\n#{$!.backtrace}" if Constance.verbose?
44
+ end
45
+ end
34
46
  end
35
47
  end
@@ -1,3 +1,3 @@
1
1
  module Constance
2
- VERSION = '1.0.0'
2
+ VERSION = '1.1.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: constance
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: