Class: ServiceStore
- Inherits:
-
Object
- Object
- ServiceStore
- Defined in:
- app/models/service_store.rb
Overview
Loads Service definitions from Rails.root/config/umlaut_services.yml instantiates services from definitions, by id.
It’s terrible we need to do this globally like this, but too hard to back out of legacy design now.
Class Method Summary collapse
-
.config ⇒ Object
Returns complete hash loaded from services.yml.
-
.instantiate_service!(service, request) ⇒ Object
pass in string unique key OR a service definition hash, and a current UmlautRequest.
- .service_definition_for(service_id) ⇒ Object
-
.service_definitions ⇒ Object
Returns hash keyed by unique service name, value service definition hash.
Class Method Details
.config ⇒ Object
Returns complete hash loaded from services.yml
9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'app/models/service_store.rb', line 9 def self.config # cache hash loaded from YAML, ensure it has the keys we expect. unless defined? @@services_config_list yaml_path = File.("config/umlaut_services.yml", Rails.root) if File.exists? yaml_path @@services_config_list = YAML::load(File.open( yaml_path )) else @@services_config_list = {} end @@services_config_list["default"] ||= {} @@services_config_list["default"]["services"] ||= {} end return @@services_config_list end |
.instantiate_service!(service, request) ⇒ Object
pass in string unique key OR a service definition hash, and a current UmlautRequest. get back instantiated Service object.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'app/models/service_store.rb', line 47 def self.instantiate_service!(service, request) definition = service.kind_of?(Hash) ? service : service_definition_for(service.to_s) if definition.nil? raise "Service '#{service}'' does not exist in umlaut-services.yml" end className = definition["type"] || definition["service_id"] classConst = Kernel.const_get(className) service = classConst.new(definition) service.request = request return service end |
.service_definition_for(service_id) ⇒ Object
40 41 42 |
# File 'app/models/service_store.rb', line 40 def self.service_definition_for(service_id) return service_definitions[service_id] end |
.service_definitions ⇒ Object
Returns hash keyed by unique service name, value service definition hash.
26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'app/models/service_store.rb', line 26 def self.service_definitions unless defined? @@service_definitions @@service_definitions = {} config.each_pair do |group_name, group| @@service_definitions.merge!( group["services"] ) if group["services"] end # set service_id key in each based on hash key @@service_definitions.each_pair do |key, hash| hash["service_id"] = key end end return @@service_definitions end |