Class: OData4::Schema
- Inherits:
-
Object
- Object
- OData4::Schema
- Defined in:
- lib/odata4/schema.rb,
lib/odata4/schema/enum_type.rb,
lib/odata4/schema/complex_type.rb
Defined Under Namespace
Classes: ComplexType, EnumType
Instance Attribute Summary collapse
-
#metadata ⇒ Object
readonly
The schema’s metadata (i.e its XML definition).
-
#service ⇒ Object
readonly
The schema’s parent service.
Instance Method Summary collapse
-
#actions ⇒ Array<String>
Returns a list of actions defined by the schema.
-
#complex_types ⇒ Hash<String, OData4::Schema::ComplexType>
Returns a list of ‘ComplexType`s defined by the schema.
-
#entity_types ⇒ Array<String>
Returns a list of entities defined by the schema.
-
#enum_types ⇒ Hash<String, OData4::Schema::EnumType>
Returns a list of EnumTypes defined by the schema.
-
#functions ⇒ Array<String>
Returns a list of functions defined by the schema.
-
#get_property_type(entity_name, property_name) ⇒ String
Get the property type for an entity from metadata.
-
#initialize(schema_definition, service) ⇒ Schema
constructor
Creates a new schema.
-
#namespace ⇒ String
Returns the schema’s ‘Namespace` attribute (mandatory).
-
#navigation_properties ⇒ Hash<Hash<OData4::NavigationProperty>>
Returns a hash for finding an association through an entity type’s defined NavigationProperty elements.
-
#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.
-
#type_definitions ⇒ Array<String>
Returns a list of type definitions defined by the schema.
Constructor Details
#initialize(schema_definition, service) ⇒ Schema
Creates a new schema.
15 16 17 18 |
# File 'lib/odata4/schema.rb', line 15 def initialize(schema_definition, service) @metadata = schema_definition @service = service end |
Instance Attribute Details
#metadata ⇒ Object (readonly)
The schema’s metadata (i.e its XML definition)
9 10 11 |
# File 'lib/odata4/schema.rb', line 9 def @metadata end |
#service ⇒ Object (readonly)
The schema’s parent service
7 8 9 |
# File 'lib/odata4/schema.rb', line 7 def service @service end |
Instance Method Details
#actions ⇒ Array<String>
Returns a list of actions defined by the schema.
28 29 30 31 32 |
# File 'lib/odata4/schema.rb', line 28 def actions @actions ||= .xpath('//Action').map do |action| action.attributes['Name'].value end end |
#complex_types ⇒ Hash<String, OData4::Schema::ComplexType>
Returns a list of ‘ComplexType`s defined by the schema.
44 45 46 47 48 49 50 51 |
# File 'lib/odata4/schema.rb', line 44 def complex_types @complex_types ||= .xpath('//ComplexType').map do |entity| [ entity.attributes['Name'].value, ComplexType.new(entity, self) ] end.to_h end |
#entity_types ⇒ Array<String>
Returns a list of entities defined by the schema.
36 37 38 39 40 |
# File 'lib/odata4/schema.rb', line 36 def entity_types @entity_types ||= .xpath('//EntityType').map do |entity| entity.attributes['Name'].value end end |
#enum_types ⇒ Hash<String, OData4::Schema::EnumType>
Returns a list of EnumTypes defined by the schema.
55 56 57 58 59 60 61 62 |
# File 'lib/odata4/schema.rb', line 55 def enum_types @enum_types ||= .xpath('//EnumType').map do |entity| [ entity.attributes['Name'].value, EnumType.new(entity, self) ] end.to_h end |
#functions ⇒ Array<String>
Returns a list of functions defined by the schema.
66 67 68 69 70 |
# File 'lib/odata4/schema.rb', line 66 def functions @functions ||= .xpath('//Function').map do |function| function.attributes['Name'].value end end |
#get_property_type(entity_name, property_name) ⇒ String
Get the property type for an entity from metadata.
102 103 104 |
# File 'lib/odata4/schema.rb', line 102 def get_property_type(entity_name, property_name) .xpath("//EntityType[@Name='#{entity_name}']/Property[@Name='#{property_name}']").first.attributes['Type'].value end |
#namespace ⇒ String
Returns the schema’s ‘Namespace` attribute (mandatory).
22 23 24 |
# File 'lib/odata4/schema.rb', line 22 def namespace @namespace ||= .attributes['Namespace'].value end |
#navigation_properties ⇒ Hash<Hash<OData4::NavigationProperty>>
Returns a hash for finding an association through an entity type’s defined NavigationProperty elements.
83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/odata4/schema.rb', line 83 def @navigation_properties ||= .xpath('//EntityType').map do |entity_type_def| [ entity_type_def.attributes['Name'].value, entity_type_def.xpath('./NavigationProperty').map do |nav_property_def| [ nav_property_def.attributes['Name'].value, ::OData4::NavigationProperty.build(nav_property_def) ] end.to_h ] end.to_h end |
#primary_key_for(entity_name) ⇒ String
Get the primary key for the supplied Entity.
110 111 112 |
# File 'lib/odata4/schema.rb', line 110 def primary_key_for(entity_name) .xpath("//EntityType[@Name='#{entity_name}']/Key/PropertyRef").first.attributes['Name'].value 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.
119 120 121 122 123 124 125 126 127 128 |
# File 'lib/odata4/schema.rb', line 119 def properties_for_entity(entity_name) type_definition = .xpath("//EntityType[@Name='#{entity_name}']").first raise ArgumentError, "Unknown EntityType: #{entity_name}" if type_definition.nil? properties_to_return = {} type_definition.xpath('./Property').each do |property_xml| property_name, property = process_property_from_xml(property_xml) properties_to_return[property_name] = property end properties_to_return end |
#type_definitions ⇒ Array<String>
Returns a list of type definitions defined by the schema.
74 75 76 77 78 |
# File 'lib/odata4/schema.rb', line 74 def type_definitions @typedefs ||= .xpath('//TypeDefinition').map do |typedef| typedef.attributes['Name'].value end end |