Class: OData::Entity
- Inherits:
-
Object
- Object
- OData::Entity
- Defined in:
- lib/odata/entity.rb
Overview
An OData::Entity represents a single record returned by the service. All Entities have a type and belong to a specific namespace. They are written back to the service via the EntitySet they came from. OData::Entity instances should not be instantiated directly; instead, they should either be read or instantiated from their respective OData::EntitySet.
Instance Attribute Summary collapse
-
#links ⇒ Object
readonly
Links to other OData entitites.
-
#namespace ⇒ Object
readonly
The OData::Service’s namespace.
-
#service_name ⇒ Object
readonly
The OData::Service’s identifying name.
-
#type ⇒ Object
readonly
The Entity type name.
Class Method Summary collapse
-
.from_xml(xml_doc, options = {}) ⇒ OData::Entity
Create Entity from XML document with provided options.
-
.with_properties(new_properties = {}, options = {}) ⇒ Object
Create Entity with provided properties and options.
Instance Method Summary collapse
-
#[](property_name) ⇒ *
Get property value.
-
#[]=(property_name, value) ⇒ Object
Set property value.
- #associations ⇒ Object
-
#initialize(options = {}) ⇒ Entity
constructor
Initializes a bare Entity.
- #is_new? ⇒ Boolean
-
#name ⇒ String
Returns name of Entity from Service specified type.
-
#primary_key ⇒ String
Returns the primary key for the Entity.
-
#to_xml ⇒ String
Converts Entity to its XML representation.
Constructor Details
#initialize(options = {}) ⇒ Entity
Initializes a bare Entity
19 20 21 22 23 24 |
# File 'lib/odata/entity.rb', line 19 def initialize( = {}) @type = [:type] @namespace = [:namespace] @service_name = [:service_name] @links = [:links] || {} end |
Instance Attribute Details
#links ⇒ Object (readonly)
Links to other OData entitites
15 16 17 |
# File 'lib/odata/entity.rb', line 15 def links @links end |
#namespace ⇒ Object (readonly)
The OData::Service’s namespace
11 12 13 |
# File 'lib/odata/entity.rb', line 11 def namespace @namespace end |
#service_name ⇒ Object (readonly)
The OData::Service’s identifying name
13 14 15 |
# File 'lib/odata/entity.rb', line 13 def service_name @service_name end |
#type ⇒ Object (readonly)
The Entity type name
9 10 11 |
# File 'lib/odata/entity.rb', line 9 def type @type end |
Class Method Details
.from_xml(xml_doc, options = {}) ⇒ OData::Entity
Create Entity from XML document with provided options.
80 81 82 83 84 85 86 87 88 |
# File 'lib/odata/entity.rb', line 80 def self.from_xml(xml_doc, = {}) return nil if xml_doc.nil? entity = OData::Entity.new() process_properties(entity, xml_doc) process_feed_property(entity, xml_doc, 'title') process_feed_property(entity, xml_doc, 'summary') process_links(entity, xml_doc) entity end |
.with_properties(new_properties = {}, options = {}) ⇒ Object
Create Entity with provided properties and options.
62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/odata/entity.rb', line 62 def self.with_properties(new_properties = {}, = {}) entity = OData::Entity.new() entity.instance_eval do service.properties_for_entity(name).each do |name, instance| set_property(name, instance) end new_properties.each do |property_name, property_value| self[property_name.to_s] = property_value end end entity end |
Instance Method Details
#[](property_name) ⇒ *
Get property value
35 36 37 38 39 40 41 42 43 |
# File 'lib/odata/entity.rb', line 35 def [](property_name) if properties[property_name.to_s].is_a?(::OData::ComplexType) properties[property_name.to_s] else properties[property_name.to_s].value end rescue NoMethodError raise ArgumentError, "Unknown property: #{property_name}" end |
#[]=(property_name, value) ⇒ Object
Set property value
48 49 50 51 52 |
# File 'lib/odata/entity.rb', line 48 def []=(property_name, value) properties[property_name.to_s].value = value rescue NoMethodError raise ArgumentError, "Unknown property: #{property_name}" end |
#associations ⇒ Object
54 55 56 |
# File 'lib/odata/entity.rb', line 54 def associations @associations ||= OData::Association::Proxy.new(self) end |
#is_new? ⇒ Boolean
123 124 125 |
# File 'lib/odata/entity.rb', line 123 def is_new? self[primary_key].nil? end |
#name ⇒ String
Returns name of Entity from Service specified type.
28 29 30 |
# File 'lib/odata/entity.rb', line 28 def name @name ||= type.gsub(/#{namespace}\./, '') end |
#primary_key ⇒ String
Returns the primary key for the Entity.
119 120 121 |
# File 'lib/odata/entity.rb', line 119 def primary_key service.primary_key_for(name) end |
#to_xml ⇒ String
Converts Entity to its XML representation.
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/odata/entity.rb', line 92 def to_xml builder = Nokogiri::XML::Builder.new do |xml| xml.entry('xmlns' => 'http://www.w3.org/2005/Atom', 'xmlns:data' => 'http://schemas.microsoft.com/ado/2007/08/dataservices', 'xmlns:metadata' => 'http://schemas.microsoft.com/ado/2007/08/dataservices/metadata', 'xmlns:georss' => 'http://www.georss.org/georss', 'xmlns:gml' => 'http://www.opengis.net/gml', 'xml:base' => 'http://services.odata.org/OData/OData.svc/') do xml.category(term: "#{namespace}.#{type}", scheme: 'http://schemas.microsoft.com/ado/2007/08/dataservices/scheme') xml. { xml.name } xml.content(type: 'application/xml') do xml['metadata'].properties do properties.each do |name, property| next if name == primary_key property.to_xml(xml) end end end end end builder.to_xml end |