Class: Frodo::Query

Inherits:
Object
  • Object
show all
Defined in:
lib/frodo/query.rb,
lib/frodo/query/criteria.rb,
lib/frodo/query/in_batches.rb,
lib/frodo/query/criteria/date_functions.rb,
lib/frodo/query/criteria/lambda_operators.rb,
lib/frodo/query/criteria/string_functions.rb,
lib/frodo/query/criteria/geography_functions.rb,
lib/frodo/query/criteria/comparison_operators.rb

Overview

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

Defined Under Namespace

Modules: InBatches Classes: Criteria

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(entity_set, options = {}) ⇒ Query

Create a new Query for the provided EntitySet

Parameters:

  • entity_set (Frodo::EntitySet)
  • options (Hash) (defaults to: {})

    Query options



15
16
17
18
19
# File 'lib/frodo/query.rb', line 15

def initialize(entity_set, options = {})
  @entity_set = entity_set
  @options    = options
  setup_empty_criteria_set
end

Instance Attribute Details

#optionsObject (readonly)

Returns the value of attribute options.



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

def options
  @options
end

Instance Method Details

#[](property) ⇒ Object

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

Parameters:



23
24
25
26
27
# File 'lib/frodo/query.rb', line 23

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

#countInteger

Build a query to count of an entity set

Returns:

  • (Integer)


137
138
139
# File 'lib/frodo/query.rb', line 137

def count
  "#{entity_set.name}/$count"
end

#entity_setFrodo::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.

Returns:



144
145
146
# File 'lib/frodo/query.rb', line 144

def entity_set
  @entity_set
end

#expand(*associations) ⇒ self

Specify associations to expand in the result.

Parameters:

  • associations (Array<Symbol>)

Returns:

  • (self)


91
92
93
94
# File 'lib/frodo/query.rb', line 91

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

#find(key) ⇒ Object

Build a query to find an entity with the supplied key value.

Parameters:

  • key (to_s)

    primary key to lookup

Returns:

  • the path and querystring [String]



32
33
34
35
36
37
38
# File 'lib/frodo/query.rb', line 32

def find(key)
  pathname = "#{entity_set.name}(#{key})"
  select_criteria = if list_criteria(:select)
                      list_criteria(:select).map { |k, v| "#{k}=#{v}" }.join('&')
                    end
  [pathname, select_criteria].compact.join('?')
end

#include_countself

Add inline count criteria to query. Not Supported in CRM2011

Returns:

  • (self)


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

def include_count
  criteria_set[:inline_count] = true
  self
end

#limit(value) ⇒ self

Add limit criteria to query.

Parameters:

  • value (to_i)

Returns:

  • (self)


115
116
117
118
# File 'lib/frodo/query.rb', line 115

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’

Parameters:

  • properties (Array<Symbol>)

Returns:

  • (self)


83
84
85
86
# File 'lib/frodo/query.rb', line 83

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

#paramsHash

The parameter hash for this query.

Returns:

  • (Hash)

    Params hash



150
151
152
# File 'lib/frodo/query.rb', line 150

def params
  assemble_criteria || {}
end

#search(term) ⇒ Object

Adds a fulltext search term to the query NOTE: May not be implemented by the service

Parameters:

  • term (String)


62
63
64
65
# File 'lib/frodo/query.rb', line 62

def search(term)
  criteria_set[:search] << term
  self
end

#select(*properties) ⇒ self

Specify properties to select within the result.

Parameters:

  • properties (Array<Symbol>)

Returns:

  • (self)


99
100
101
102
# File 'lib/frodo/query.rb', line 99

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

#serviceFrodo::Service

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 service for this query

Returns:



157
158
159
# File 'lib/frodo/query.rb', line 157

def service
  @service ||= entity_set.service
end

#skip(value) ⇒ self

Add skip criteria to query.

Parameters:

  • value (to_i)

Returns:

  • (self)


107
108
109
110
# File 'lib/frodo/query.rb', line 107

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

#to_sString

Convert Query to string.

Returns:

  • (String)


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

def to_s
  criteria = params.map { |k, v| "#{k}=#{v}" }.join('&')
  [entity_set.name, params.any? ? criteria : nil].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

Parameters:

  • criteria


54
55
56
57
# File 'lib/frodo/query.rb', line 54

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