Class: OData::Query

Inherits:
Object
  • Object
show all
Defined in:
lib/odata/query.rb,
lib/odata/query/result.rb,
lib/odata/query/criteria.rb

Overview

OData::Query provides the query interface for requesting Entities matching specific criteria from an OData::EntitySet. This class should not be instantiated directly, but can be. Normally you will access a Query by first asking for one from the OData::EntitySet you want to query.

Defined Under Namespace

Classes: Criteria, Result

Instance Method Summary collapse

Constructor Details

#initialize(entity_set) ⇒ Query

Create a new Query for the provided EntitySet


9
10
11
12
# File 'lib/odata/query.rb', line 9

def initialize(entity_set)
  @entity_set = entity_set
  setup_empty_criteria_set
end

Instance Method Details

#[](property) ⇒ Object

Instantiates an OData::Query::Criteria for the named property.


16
17
18
19
20
# File 'lib/odata/query.rb', line 16

def [](property)
  property_instance = @entity_set.new_entity.get_property(property)
  property_instance = property if property_instance.nil?
  OData::Query::Criteria.new(property: property_instance)
end

#countInteger

Executes the query to get a count of entities.


117
118
119
120
# File 'lib/odata/query.rb', line 117

def count
  url_chunk = "#{entity_set.name}/$count?#{assemble_criteria}"
  entity_set.service.execute(url_chunk).body.to_i
end

#empty?Boolean

Checks whether a query will return any results by calling #count


124
125
126
# File 'lib/odata/query.rb', line 124

def empty?
  self.count == 0
end

#entity_setOData::EntitySet

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.

The EntitySet for this query.


131
132
133
# File 'lib/odata/query.rb', line 131

def entity_set
  @entity_set
end

#executeOData::Query::Result

Execute the query.


110
111
112
113
# File 'lib/odata/query.rb', line 110

def execute
  response = entity_set.service.execute(self.to_s)
  OData::Query::Result.new(self, response)
end

#expand(*associations) ⇒ self

Specify associations to expand in the result.


65
66
67
68
# File 'lib/odata/query.rb', line 65

def expand(*associations)
  criteria_set[:expand] += associations
  self
end

#include_countself

Add inline count criteria to query. Not Supported in CRM2011


97
98
99
100
# File 'lib/odata/query.rb', line 97

def include_count
  criteria_set[:inline_count] = true
  self
end

#limit(value) ⇒ self

Add limit criteria to query.


89
90
91
92
# File 'lib/odata/query.rb', line 89

def limit(value)
  criteria_set[:top] = value.to_i
  self
end

#order_by(*properties) ⇒ self

Specify properties to order the result by. Can use 'desc' like 'Name desc'


57
58
59
60
# File 'lib/odata/query.rb', line 57

def order_by(*properties)
  criteria_set[:orderby] += properties
  self
end

#select(*properties) ⇒ self

Specify properties to select within the result.


73
74
75
76
# File 'lib/odata/query.rb', line 73

def select(*properties)
  criteria_set[:select] += properties
  self
end

#skip(value) ⇒ self

Add skip criteria to query.


81
82
83
84
# File 'lib/odata/query.rb', line 81

def skip(value)
  criteria_set[:skip] = value.to_i
  self
end

#to_sString

Convert Query to string.


104
105
106
# File 'lib/odata/query.rb', line 104

def to_s
  [entity_set.name, assemble_criteria].compact.join('?')
end

#where(criteria) ⇒ Object

Adds a filter criteria to the query. For filter syntax see msdn.microsoft.com/en-us/library/gg309461.aspx Syntax:

Property Operator Value

For example:

Name eq 'Customer Service'

Operators: eq, ne, gt, ge, lt, le, and, or, not

Value

can be 'null', can use single quotes

36
37
38
39
# File 'lib/odata/query.rb', line 36

def where(criteria)
  criteria_set[:filter] << criteria
  self
end