Module: Angus::Remote::ServiceDirectory
- Defined in:
- lib/angus/remote/service_directory.rb
Constant Summary collapse
- SERVICES_CONFIGURATION_FILE =
Path to the configuration file that has the information about the doc_url and api_url
'config/services.yml'
Class Method Summary collapse
-
.api_url(code_name, version = nil) ⇒ Object
Returns the api url from the configuration file.
-
.doc_url(code_name, version = nil) ⇒ Object
Returns the documentation url from the configuration file.
-
.get_service_definition(code_name, version = nil) ⇒ Angus::SDoc::Definitions::Service
Requests a service definition.
-
.join_proxy(code_name, version, remote_code_name) ⇒ Angus::SDoc::Definitions::Service
Queries a service for definitions of proxy operations for the given remote service.
-
.lookup(code_name, version = nil) ⇒ Object
Builds and returns a Client object for the service and version received.
-
.proxy_doc_url(code_name, version, remote_code_name) ⇒ String
Returns the documentation url for proxy operations hosted by the service.
-
.service_configuration(code_name) ⇒ Hash
Returns the connection configuration for a given service.
-
.service_definition(code_name, version = nil) ⇒ Angus::SDoc::Definitions::Service
Returns the service’s definition for the given service name and version.
-
.service_version(code_name) ⇒ String
Returns the configured version.
Class Method Details
.api_url(code_name, version = nil) ⇒ Object
Returns the api url from the configuration file
If no version given, it reads the version from the configuration file.
76 77 78 79 80 81 82 |
# File 'lib/angus/remote/service_directory.rb', line 76 def self.api_url(code_name, version = nil) version ||= service_version(code_name) config = service_configuration(code_name) config["v#{version}"]["api_url"] end |
.doc_url(code_name, version = nil) ⇒ Object
Returns the documentation url from the configuration file
If no version given, it reads the version from the configuration file.
47 48 49 50 51 52 53 |
# File 'lib/angus/remote/service_directory.rb', line 47 def self.doc_url(code_name, version = nil) version ||= service_version(code_name) config = service_configuration(code_name) config["v#{version}"]['doc_url'] end |
.get_service_definition(code_name, version = nil) ⇒ Angus::SDoc::Definitions::Service
Requests a service definition.
173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/angus/remote/service_directory.rb', line 173 def self.get_service_definition(code_name, version = nil) version ||= service_version(code_name) doc_url = self.doc_url(code_name, version) if doc_url.match('file://(.*)') || doc_url.match('file:///(.*)') Angus::SDoc::DefinitionsReader.service_definition($1) else definition_hash = fetch_remote_service_definition(doc_url) Angus::SDoc::DefinitionsReader.build_service_definition(definition_hash) end end |
.join_proxy(code_name, version, remote_code_name) ⇒ Angus::SDoc::Definitions::Service
Queries a service for definitions of proxy operations for the given remote service.
Merges those definitions and returns the result.
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/angus/remote/service_directory.rb', line 145 def self.join_proxy(code_name, version, remote_code_name) service_definition = self.service_definition(code_name, version) @service_definitions_proxies ||= [] if @service_definitions_proxies.include?([code_name, version, remote_code_name]) return service_definition end proxy_doc_url = self.proxy_doc_url(code_name, version, remote_code_name) definition_hash = fetch_remote_service_definition(proxy_doc_url) proxy_service_definition = Angus::SDoc::DefinitionsReader.build_service_definition(definition_hash) service_definition.merge(proxy_service_definition) service_definition end |
.lookup(code_name, version = nil) ⇒ Object
Builds and returns a Client object for the service and version received
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/angus/remote/service_directory.rb', line 19 def self.lookup(code_name, version = nil) version ||= service_version(code_name) @clients_cache ||= {} if @clients_cache.include?([code_name, version]) return @clients_cache[[code_name, version]] end begin service_definition = self.service_definition(code_name, version) client = Angus::Remote::Builder.build(code_name, service_definition, self.api_url(code_name, version)) @clients_cache[[code_name, version]] = client rescue Errno::ECONNREFUSED raise RemoteConnectionError.new(self.api_url(code_name, version)) end end |
.proxy_doc_url(code_name, version, remote_code_name) ⇒ String
Returns the documentation url for proxy operations hosted by the service.
62 63 64 65 66 |
# File 'lib/angus/remote/service_directory.rb', line 62 def self.proxy_doc_url(code_name, version, remote_code_name) doc_url = self.doc_url(code_name, version) "#{doc_url}/proxy/#{remote_code_name}" end |
.service_configuration(code_name) ⇒ Hash
Returns the connection configuration for a given service.
108 109 110 111 112 113 |
# File 'lib/angus/remote/service_directory.rb', line 108 def self.service_configuration(code_name) @services_configuration ||= YAML.load_file(SERVICES_CONFIGURATION_FILE) @services_configuration[code_name] or raise ServiceConfigurationNotFound.new(code_name) end |
.service_definition(code_name, version = nil) ⇒ Angus::SDoc::Definitions::Service
Returns the service’s definition for the given service name and version
123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/angus/remote/service_directory.rb', line 123 def self.service_definition(code_name, version = nil) version ||= service_version(code_name) @service_definitions_cache ||= {} if @service_definitions_cache.include?([code_name, version]) return @service_definitions_cache[[code_name, version]] end service_definition = self.get_service_definition(code_name, version) @service_definitions_cache[[code_name, version]] = service_definition end |
.service_version(code_name) ⇒ String
Returns the configured version.
91 92 93 94 95 96 97 98 99 |
# File 'lib/angus/remote/service_directory.rb', line 91 def self.service_version(code_name) versions = service_configuration(code_name).keys if versions.length == 1 versions.first.gsub(/^v/, '') else raise TooManyServiceVersions.new(code_name) end end |