class OData::AbstractQuery::Options::SelectOption
Attributes
properties[R]
Public Class Methods
applies_to?(query)
click to toggle source
# File lib/o_data/abstract_query/options/select_option.rb, line 17 def self.applies_to?(query) return false if query.segments.empty? (query.segments.last.is_a?(OData::AbstractQuery::Segments::CollectionSegment) || query.segments.last.is_a?(OData::AbstractQuery::Segments::NavigationPropertySegment)) end
new(query, properties = [])
click to toggle source
Calls superclass method
OData::AbstractQuery::Option::new
# File lib/o_data/abstract_query/options/select_option.rb, line 11 def initialize(query, properties = []) @properties = properties super(query, self.class.option_name) end
option_name()
click to toggle source
# File lib/o_data/abstract_query/options/select_option.rb, line 5 def self.option_name '$select' end
parse!(query, key, value = nil)
click to toggle source
# File lib/o_data/abstract_query/options/select_option.rb, line 22 def self.parse!(query, key, value = nil) return nil unless key == self.option_name if query.segments.last.respond_to?(:navigation_property) navigation_property = query.segments.last.navigation_property raise OData::AbstractQuery::Errors::InvalidOptionValue.new(query, self.option_name) if navigation_property.to_end.polymorphic? end if query.segments.last.respond_to?(:entity_type) entity_type = query.segments.last.entity_type properties = value.to_s.strip == "*" ? entity_type.properties : value.to_s.split(/\s*,\s*/).collect { |path| if md = path.match(/^([A-Za-z_]+)$/) property_name = md[1] property = entity_type.properties.find { |p| p.name == property_name } raise OData::AbstractQuery::Errors::PropertyNotFound.new(query, property_name) if property.blank? property else raise OData::AbstractQuery::Errors::PropertyNotFound.new(query, path) end } query.Option(self, properties) else raise OData::AbstractQuery::Errors::InvalidOptionContext.new(query, self.option_name) unless value.blank? end end
Public Instance Methods
entity_type()
click to toggle source
# File lib/o_data/abstract_query/options/select_option.rb, line 53 def entity_type return nil if self.query.segments.empty? return nil unless self.query.segments.last.respond_to?(:entity_type) @entity_type ||= self.query.segments.last.entity_type end
valid?()
click to toggle source
# File lib/o_data/abstract_query/options/select_option.rb, line 59 def valid? entity_type = self.entity_type return false if entity_type.blank? @properties.is_a?(Array) && @properties.all? { |property| property.is_a?(OData::AbstractSchema::Property) && !!entity_type.properties.find { |p| p == property } } end
value()
click to toggle source
# File lib/o_data/abstract_query/options/select_option.rb, line 68 def value "'" + @properties.collect(&:name).join(',') + "'" end