Module: Angus::Remote::ServiceDirectory
- Defined in:
- lib/angus/remote/service_directory.rb
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(*args) ⇒ 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_settings(code_name, version = nil) ⇒ Object
Returns the documentation url from the configuration file.
-
.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.
83 84 85 86 87 88 89 |
# File 'lib/angus/remote/service_directory.rb', line 83 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.
54 55 56 57 58 59 60 |
# File 'lib/angus/remote/service_directory.rb', line 54 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.
166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/angus/remote/service_directory.rb', line 166 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.
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/angus/remote/service_directory.rb', line 138 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(*args) ⇒ Object
Builds and returns a Client object for the service and version received
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/angus/remote/service_directory.rb', line 17 def self.lookup(*args) if args.length == 1 definition = args.first code_name = definition.delete(:code_name) version = definition.delete(:version) set_service_configuration(code_name, version, definition) else code_name, version = args end 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 => e raise RemoteConnectionError.new("#{self.api_url(code_name, version)} - #{e.class}: #{e.}") end end |
.proxy_doc_url(code_name, version, remote_code_name) ⇒ String
Returns the documentation url for proxy operations hosted by the service.
69 70 71 72 73 |
# File 'lib/angus/remote/service_directory.rb', line 69 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
116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/angus/remote/service_directory.rb', line 116 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_settings(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.
238 239 240 241 242 243 244 245 246 247 248 249 250 |
# File 'lib/angus/remote/service_directory.rb', line 238 def self.service_settings(code_name, version = nil) version ||= service_version(code_name) config = service_configuration(code_name) service_settings = config["v#{version}"] or raise ServiceConfigurationNotFound.new(code_name, version) service_settings['code_name'] = code_name service_settings['version'] = version service_settings end |
.service_version(code_name) ⇒ String
Returns the configured version.
98 99 100 101 102 103 104 105 106 |
# File 'lib/angus/remote/service_directory.rb', line 98 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 |