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
-
#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.
-
#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
17 18 19 20 21 |
# File 'lib/odata/entity.rb', line 17 def initialize( = {}) @type = [:type] @namespace = [:namespace] @service_name = [:service_name] end |
Instance Attribute Details
#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.
73 74 75 76 77 78 79 80 |
# File 'lib/odata/entity.rb', line 73 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') entity end |
.with_properties(new_properties = {}, options = {}) ⇒ Object
Create Entity with provided properties and options.
55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/odata/entity.rb', line 55 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
32 33 34 35 36 37 38 39 40 |
# File 'lib/odata/entity.rb', line 32 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
45 46 47 48 49 |
# File 'lib/odata/entity.rb', line 45 def []=(property_name, value) properties[property_name.to_s].value = value rescue NoMethodError raise ArgumentError, "Unknown property: #{property_name}" end |
#is_new? ⇒ Boolean
115 116 117 |
# File 'lib/odata/entity.rb', line 115 def is_new? self[primary_key].nil? end |
#name ⇒ String
Returns name of Entity from Service specified type.
25 26 27 |
# File 'lib/odata/entity.rb', line 25 def name @name ||= type.gsub(/#{namespace}\./, '') end |
#primary_key ⇒ String
Returns the primary key for the Entity.
111 112 113 |
# File 'lib/odata/entity.rb', line 111 def primary_key service.primary_key_for(name) end |
#to_xml ⇒ String
Converts Entity to its XML representation.
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/odata/entity.rb', line 84 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 |