Class: OData4::Service
- Inherits:
-
Object
- Object
- OData4::Service
- Defined in:
- lib/odata4/service.rb,
lib/odata4/service/request.rb,
lib/odata4/service/response.rb,
lib/odata4/service/response/xml.rb,
lib/odata4/service/response/atom.rb,
lib/odata4/service/response/json.rb,
lib/odata4/service/response/plain.rb
Overview
Encapsulates the basic details and functionality needed to interact with an OData4 service.
Defined Under Namespace
Constant Summary collapse
- HTTP_TIMEOUT =
20
- METADATA_TIMEOUTS =
[20, 60]
- MIME_TYPES =
{ atom: 'application/atom+xml', json: 'application/json', xml: 'application/xml', plain: 'text/plain' }
Instance Attribute Summary collapse
-
#options ⇒ Object
readonly
Options to pass around.
-
#service_url ⇒ Object
readonly
The OData4 Service’s URL.
Class Method Summary collapse
-
.open(service_url, options = {}) ⇒ OData4::Service
Opens the service based on the requested URL and adds the service to Registry.
Instance Method Summary collapse
-
#[](entity_set_name) ⇒ OData4::EntitySet
Retrieves the EntitySet associated with a specific EntityType by name.
-
#complex_types ⇒ Hash<String, OData4::Schema::ComplexType>
Returns a list of ‘ComplexType`s used by the service.
-
#entity_container ⇒ Object
Returns the service’s EntityContainer (singleton).
-
#entity_sets ⇒ Object
Returns a hash of EntitySet names and their respective EntityType names.
-
#entity_types ⇒ Object
Returns a list of ‘EntityType`s exposed by the service.
-
#enum_types ⇒ Hash<String, OData4::Schema::EnumType>
Returns a list of ‘EnumType`s used by the service.
-
#execute(url_chunk, options = {}) ⇒ OData4::Service::Response
Execute a request against the service.
-
#get_property_type(entity_name, property_name) ⇒ String
Get the property type for an entity from metadata.
-
#initialize(service_url, options = {}) ⇒ OData4::Service
constructor
Opens the service based on the requested URL and adds the service to Registry.
-
#inspect ⇒ Object
Returns a more compact inspection of the service object.
-
#log_level ⇒ Fixnum|Symbol
Returns the log level set via initial options, or the default log level (‘Logger::WARN`) if none was specified.
-
#logger ⇒ Logger
Returns the logger instance used by the service.
-
#logger=(custom_logger) ⇒ Object
Allows the logger to be set to a custom ‘Logger` instance.
-
#metadata ⇒ Nokogiri::XML
Returns the service’s metadata definition.
-
#metadata_url ⇒ String
Returns the service’s metadata URL.
-
#name ⇒ String
Returns user supplied name for service, or its URL.
-
#namespace ⇒ String
Returns the default namespace, that is, the namespace of the schema that contains the service’s EntityContainer.
-
#primary_key_for(entity_name) ⇒ String
Get the primary key for the supplied Entity.
-
#properties_for_entity(entity_name) ⇒ Hash
private
Get the list of properties and their various options for the supplied Entity name.
-
#schemas ⇒ Object
Returns all of the service’s schemas.
Constructor Details
#initialize(service_url, options = {}) ⇒ OData4::Service
Opens the service based on the requested URL and adds the service to Registry
30 31 32 33 34 35 |
# File 'lib/odata4/service.rb', line 30 def initialize(service_url, = {}) @service_url = service_url @options = .merge() OData4::ServiceRegistry.add(self) register_custom_types end |
Instance Attribute Details
#options ⇒ Object (readonly)
Options to pass around
11 12 13 |
# File 'lib/odata4/service.rb', line 11 def @options end |
#service_url ⇒ Object (readonly)
The OData4 Service’s URL
9 10 11 |
# File 'lib/odata4/service.rb', line 9 def service_url @service_url end |
Class Method Details
.open(service_url, options = {}) ⇒ OData4::Service
Opens the service based on the requested URL and adds the service to Registry
43 44 45 |
# File 'lib/odata4/service.rb', line 43 def self.open(service_url, = {}) Service.new(service_url, ) end |
Instance Method Details
#[](entity_set_name) ⇒ OData4::EntitySet
Retrieves the EntitySet associated with a specific EntityType by name
92 93 94 |
# File 'lib/odata4/service.rb', line 92 def [](entity_set_name) entity_container[entity_set_name] end |
#complex_types ⇒ Hash<String, OData4::Schema::ComplexType>
Returns a list of ‘ComplexType`s used by the service.
115 116 117 118 119 120 121 |
# File 'lib/odata4/service.rb', line 115 def complex_types @complex_types ||= schemas.map do |namespace, schema| schema.complex_types.map do |name, complex_type| [ "#{namespace}.#{name}", complex_type ] end.to_h end.reduce({}, :merge) end |
#entity_container ⇒ Object
Returns the service’s EntityContainer (singleton)
78 79 80 |
# File 'lib/odata4/service.rb', line 78 def entity_container @entity_container ||= EntityContainer.new(self) end |
#entity_sets ⇒ Object
Returns a hash of EntitySet names and their respective EntityType names
84 85 86 |
# File 'lib/odata4/service.rb', line 84 def entity_sets entity_container.entity_sets end |
#entity_types ⇒ Object
Returns a list of ‘EntityType`s exposed by the service
105 106 107 108 109 110 111 |
# File 'lib/odata4/service.rb', line 105 def entity_types @entity_types ||= schemas.map do |namespace, schema| schema.entity_types.map do |entity_type| "#{namespace}.#{entity_type}" end end.flatten end |
#enum_types ⇒ Hash<String, OData4::Schema::EnumType>
Returns a list of ‘EnumType`s used by the service
125 126 127 128 129 130 131 |
# File 'lib/odata4/service.rb', line 125 def enum_types @enum_types ||= schemas.map do |namespace, schema| schema.enum_types.map do |name, enum_type| [ "#{namespace}.#{name}", enum_type ] end.to_h end.reduce({}, :merge) end |
#execute(url_chunk, options = {}) ⇒ OData4::Service::Response
Execute a request against the service
143 144 145 |
# File 'lib/odata4/service.rb', line 143 def execute(url_chunk, = {}) Request.new(self, url_chunk, ).execute end |
#get_property_type(entity_name, property_name) ⇒ String
Get the property type for an entity from metadata.
152 153 154 155 156 |
# File 'lib/odata4/service.rb', line 152 def get_property_type(entity_name, property_name) namespace, _, entity_name = entity_name.rpartition('.') raise ArgumentError, 'Namespace missing' if namespace.nil? || namespace.empty? schemas[namespace].get_property_type(entity_name, property_name) end |
#inspect ⇒ Object
Returns a more compact inspection of the service object
134 135 136 |
# File 'lib/odata4/service.rb', line 134 def inspect "#<#{self.class.name}:#{self.object_id} name='#{name}' service_url='#{self.service_url}'>" end |
#log_level ⇒ Fixnum|Symbol
Returns the log level set via initial options, or the default log level (‘Logger::WARN`) if none was specified.
183 184 185 |
# File 'lib/odata4/service.rb', line 183 def log_level [:log_level] || Logger::WARN end |
#logger ⇒ Logger
Returns the logger instance used by the service. When Ruby on Rails has been detected, the service will use ‘Rails.logger`. The log level will NOT be changed.
When no Rails has been detected, a default logger will be used that logs to STDOUT with the log level supplied via options, or the default log level if none was given.
196 197 198 199 200 201 202 203 204 205 206 |
# File 'lib/odata4/service.rb', line 196 def logger @logger ||= lambda do if defined?(Rails) Rails.logger else logger = Logger.new(STDOUT) logger.level = log_level logger end end.call end |
#logger=(custom_logger) ⇒ Object
Allows the logger to be set to a custom ‘Logger` instance.
210 211 212 |
# File 'lib/odata4/service.rb', line 210 def logger=(custom_logger) @logger = custom_logger end |
#metadata ⇒ Nokogiri::XML
Returns the service’s metadata definition.
61 62 63 |
# File 'lib/odata4/service.rb', line 61 def @metadata ||= lambda { }.call end |
#metadata_url ⇒ String
Returns the service’s metadata URL.
55 56 57 |
# File 'lib/odata4/service.rb', line 55 def "#{service_url}/$metadata" end |
#name ⇒ String
Returns user supplied name for service, or its URL
49 50 51 |
# File 'lib/odata4/service.rb', line 49 def name @name ||= [:name] || service_url end |
#namespace ⇒ String
Returns the default namespace, that is, the namespace of the schema that contains the service’s EntityContainer.
99 100 101 |
# File 'lib/odata4/service.rb', line 99 def namespace entity_container.namespace end |
#primary_key_for(entity_name) ⇒ String
Get the primary key for the supplied Entity.
162 163 164 165 166 |
# File 'lib/odata4/service.rb', line 162 def primary_key_for(entity_name) namespace, _, entity_name = entity_name.rpartition('.') raise ArgumentError, 'Namespace missing' if namespace.nil? || namespace.empty? schemas[namespace].primary_key_for(entity_name) end |
#properties_for_entity(entity_name) ⇒ Hash
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Get the list of properties and their various options for the supplied Entity name.
173 174 175 176 177 |
# File 'lib/odata4/service.rb', line 173 def properties_for_entity(entity_name) namespace, _, entity_name = entity_name.rpartition('.') raise ArgumentError, 'Namespace missing' if namespace.nil? || namespace.empty? schemas[namespace].properties_for_entity(entity_name) end |