Module: RSMP::SXL::Registry
- Defined in:
- lib/rsmp/sxl/registry.rb
Overview
Registry of SXL interface classes keyed by SXL name and connection side.
Class Method Summary collapse
- .build(proxy, sxl, side) ⇒ Object
- .build_for(proxy, sxl) ⇒ Object
- .default_class(side) ⇒ Object
- .fetch(name, side) ⇒ Object
- .register(name, side, klass) ⇒ Object
- .register_interface(klass) ⇒ Object
- .side_for(klass) ⇒ Object
- .sxl_name_for(klass) ⇒ Object
Class Method Details
.build(proxy, sxl, side) ⇒ Object
19 20 21 22 |
# File 'lib/rsmp/sxl/registry.rb', line 19 def self.build(proxy, sxl, side) klass = fetch(sxl['name'], side) || default_class(side) klass.new(proxy: proxy, name: sxl['name'], version: sxl['version']) end |
.build_for(proxy, sxl) ⇒ Object
24 25 26 27 28 29 30 31 32 33 |
# File 'lib/rsmp/sxl/registry.rb', line 24 def self.build_for(proxy, sxl) case proxy when RSMP::SiteProxy build(proxy, sxl, :supervisor) when RSMP::SupervisorProxy build(proxy, sxl, :site) else raise ArgumentError, "Unknown proxy class #{proxy.class}" end end |
.default_class(side) ⇒ Object
35 36 37 |
# File 'lib/rsmp/sxl/registry.rb', line 35 def self.default_class(side) side.to_sym == :site ? SiteInterface : SupervisorInterface end |
.fetch(name, side) ⇒ Object
15 16 17 |
# File 'lib/rsmp/sxl/registry.rb', line 15 def self.fetch(name, side) @interfaces[[name.to_s, side.to_sym]] end |
.register(name, side, klass) ⇒ Object
7 8 9 |
# File 'lib/rsmp/sxl/registry.rb', line 7 def self.register(name, side, klass) @interfaces[[name.to_s, side.to_sym]] = klass end |
.register_interface(klass) ⇒ Object
11 12 13 |
# File 'lib/rsmp/sxl/registry.rb', line 11 def self.register_interface(klass) register sxl_name_for(klass), side_for(klass), klass end |
.side_for(klass) ⇒ Object
39 40 41 42 43 44 |
# File 'lib/rsmp/sxl/registry.rb', line 39 def self.side_for(klass) return :site if klass < SiteInterface return :supervisor if klass < SupervisorInterface raise ArgumentError, "Cannot infer SXL interface side for #{klass}" end |
.sxl_name_for(klass) ⇒ Object
46 47 48 49 50 51 52 |
# File 'lib/rsmp/sxl/registry.rb', line 46 def self.sxl_name_for(klass) namespace = klass.name.split('::')[0...-1].join('::') owner = Object.const_get(namespace) return owner.sxl_name if owner.respond_to?(:sxl_name) raise ArgumentError, "Cannot infer SXL name for #{klass}" end |