class OData::AbstractQuery::Options::OrderbyOption
Attributes
pairs[R]
Public Class Methods
applies_to?(query)
click to toggle source
# File lib/o_data/abstract_query/options/orderby_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, pairs = [])
click to toggle source
Calls superclass method
OData::AbstractQuery::Option::new
# File lib/o_data/abstract_query/options/orderby_option.rb, line 11 def initialize(query, pairs = []) @pairs = pairs super(query, self.class.option_name) end
option_name()
click to toggle source
# File lib/o_data/abstract_query/options/orderby_option.rb, line 5 def self.option_name '$orderby' end
parse!(query, key, value = nil)
click to toggle source
# File lib/o_data/abstract_query/options/orderby_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 raise OData::AbstractQuery::Errors::InvalidOptionContext.new(query, self) unless query.segments.last.respond_to?(:countable?) && query.segments.last.countable? if query.segments.last.respond_to?(:entity_type) entity_type = query.segments.last.entity_type pairs = value.to_s.split(/\s*,\s*/).collect { |path| if md = path.match(/^([A-Za-z_]+(?:\/[A-Za-z_]+)*)(?:\s+(asc|desc))?$/) property_name = md[1] order = md[2].blank? ? :asc : md[2].to_sym property = entity_type.properties.find { |p| p.name == property_name } raise OData::AbstractQuery::Errors::PropertyNotFound.new(query, property_name) if property.blank? [property, order] else raise OData::AbstractQuery::Errors::PropertyNotFound.new(query, path) end } query.Option(self, pairs.empty? ? [[entity_type.key_property, :asc]] : pairs) 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/orderby_option.rb, line 56 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/orderby_option.rb, line 62 def valid? entity_type = self.entity_type return false if entity_type.blank? @pairs.is_a?(Array) && @pairs.all? { |pair| property, value = pair property.is_a?(OData::AbstractSchema::Property) && !!entity_type.properties.find { |p| p.name == property.name } } end
value()
click to toggle source
# File lib/o_data/abstract_query/options/orderby_option.rb, line 73 def value "'" + @pairs.collect { |p| "#{p.first.name} #{p.last}" }.join(',') + "'" end