Sha256: 0c92bcbf98f03803a60b41222ac2b44c575311ca7350d9bf429b4fd0123e6149

Contents?: true

Size: 1.87 KB

Versions: 10

Compression:

Stored size: 1.87 KB

Contents

# 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 ServiceStore
  
  # Returns complete hash loaded from services.yml
  def self.config
    # cache hash loaded from YAML, ensure it has the keys we expect. 
    unless defined? @@services_config_list
      yaml_path = File.expand_path("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
  
  # Returns hash keyed by unique service name, value service definition
  # hash. 
  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
    end
    return @@service_definitions
  end
  
  def self.service_definition_for(service_id)
    return service_definitions[service_id]
  end
  
  # pass in string unique key OR a service definition hash, 
  # and a current UmlautRequest.
  # get back instantiated Service object. 
  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
  
  
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
umlaut-3.0.0alpha10 app/models/service_store.rb
umlaut-3.0.0alpha9 app/models/service_store.rb
umlaut-3.0.0alpha8 app/models/service_store.rb
umlaut-3.0.0alpha7 app/models/service_store.rb
umlaut-3.0.0alpha6 app/models/service_store.rb
umlaut-3.0.0alpha5 app/models/service_store.rb
umlaut-3.0.0alpha4 app/models/service_store.rb
umlaut-3.0.0alpha3 app/models/service_store.rb
umlaut-3.0.0alpha2 app/models/service_store.rb
umlaut-3.0.0alpha1 app/models/service_store.rb