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_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.
78 79 80 81 82 83 84 |
# File 'lib/angus/remote/service_directory.rb', line 78 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.
49 50 51 52 53 54 55 |
# File 'lib/angus/remote/service_directory.rb', line 49 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.
161 162 163 164 165 166 167 168 169 170 171 |
# File 'lib/angus/remote/service_directory.rb', line 161 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, code_name, version) 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.
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/angus/remote/service_directory.rb', line 133 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, code_name, version) 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
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/angus/remote/service_directory.rb', line 21 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), service_settings(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.
64 65 66 67 68 |
# File 'lib/angus/remote/service_directory.rb', line 64 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_definition(code_name, version = nil) ⇒ Angus::SDoc::Definitions::Service
Returns the service’s definition for the given service name and version
111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/angus/remote/service_directory.rb', line 111 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.
93 94 95 96 97 98 99 100 101 |
# File 'lib/angus/remote/service_directory.rb', line 93 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 |