Module: Coradoc::Reference::Address::Scheme
- Defined in:
- lib/coradoc/reference/address.rb
Overview
Registry of scheme modules. Each module provides:
scheme_name -> Symbol
matches?(raw) -> Boolean
parse(raw) -> Address
serialize(addr) -> String
register always forces builtin registration first, so an
external scheme registered before first use is never clobbered
by the lazy builtin pass. The catch-all anchor scheme is always
tried LAST on match, so external schemes are never shadowed by
it no matter when they register.
Class Method Summary collapse
- .ensure_builtins_registered! ⇒ Object
- .for(name) ⇒ Object
- .match(raw) ⇒ Object
- .names ⇒ Object
- .register(mod) ⇒ Object
- .reset! ⇒ Object
Class Method Details
.ensure_builtins_registered! ⇒ Object
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/coradoc/reference/address.rb', line 128 def ensure_builtins_registered! MUTEX.synchronize do return if @builtins_registered @registering_builtins = true begin BUILTIN_SCHEME_ORDER.each do |name| const_name = name.to_s.split('_').map(&:capitalize).join register(Address.const_get(const_name)) end @builtins_registered = true ensure @registering_builtins = false end end end |
.for(name) ⇒ Object
118 119 120 |
# File 'lib/coradoc/reference/address.rb', line 118 def for(name) @registered.find { |m| m.scheme_name == name.to_sym } end |
.match(raw) ⇒ Object
122 123 124 125 126 |
# File 'lib/coradoc/reference/address.rb', line 122 def match(raw) catch_all, specific = @registered.partition { |m| m.scheme_name == CATCH_ALL_SCHEME } (specific + catch_all).find { |m| m.matches?(raw) } end |
.names ⇒ Object
114 115 116 |
# File 'lib/coradoc/reference/address.rb', line 114 def names @registered.map(&:scheme_name) end |
.register(mod) ⇒ Object
108 109 110 111 112 |
# File 'lib/coradoc/reference/address.rb', line 108 def register(mod) ensure_builtins_registered! unless @registering_builtins @registered.delete_if { |m| m.scheme_name == mod.scheme_name } @registered << mod end |
.reset! ⇒ Object
145 146 147 148 |
# File 'lib/coradoc/reference/address.rb', line 145 def reset! @registered.clear @builtins_registered = false end |