Class: Munson::Query

Inherits:
Object
  • Object
show all
Defined in:
lib/munson/query.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client = nil) ⇒ Query

Description of method

Parameters:



8
9
10
11
12
13
14
15
16
17
18
# File 'lib/munson/query.rb', line 8

def initialize(client = nil)
  @client   = client
  @headers  = {}
  @values    = {
    include: [],
    fields:  [],
    filter:  [],
    sort:    [],
    page:    {}
  }
end

Instance Attribute Details

#valuesObject (readonly)

Returns the value of attribute values.



3
4
5
# File 'lib/munson/query.rb', line 3

def values
  @values
end

Instance Method Details

#fetchObject



20
21
22
23
24
25
26
27
# File 'lib/munson/query.rb', line 20

def fetch
  if @client
    response = @client.agent.get(params: to_params, headers: @headers)
    ResponseMapper.new(response.body).collection
  else
    raise Munson::ClientNotSet, "Client was not set. Query#new(client)"
  end
end

#fields(*args) ⇒ Object

Hash resouce_name: [array of attribs]



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

def fields(*args)
  @values[:fields] += args
  self
end

#filter(*args) ⇒ Object



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

def filter(*args)
  @values[:filter] += args
  self
end

#find(id) ⇒ Object



29
30
31
32
33
34
35
36
# File 'lib/munson/query.rb', line 29

def find(id)
  if @client
    response = @client.agent.get(id: id, params: to_params, headers: @headers)
    ResponseMapper.new(response.body).resource
  else
    raise Munson::ClientNotSet, "Client was not set. Query#new(client)"
  end
end

#headers(opts = {}) ⇒ Munson::Query

Chainably set headers

Examples:

set a header

Munson::Query.new.headers("X-API-TOKEN" => "banana")

set headers

Munson::Query.new.headers("X-API-TOKEN" => "banana", "X-API-VERSION" => "1.3")

Returns:



80
81
82
83
# File 'lib/munson/query.rb', line 80

def headers(opts={})
  @headers.merge!(opts)
  self
end

#include(*args) ⇒ Munson::Query

Chainably include related resources.

Examples:

including a resource

Munson::Query.new.include(:user)

including a related resource

Munson::Query.new.include("user.addresses")

including multiple resources

Munson::Query.new.include("user.addresses", "user.images")

Parameters:

  • *args (Array<String,Symbol>)

    relationships to include

Returns:

See Also:



100
101
102
103
# File 'lib/munson/query.rb', line 100

def include(*args)
  @values[:include] += args
  self
end

#page(opts = {}) ⇒ Munson::Query

Chainably set page options

Examples:

set a limit and offset

Munson::Query.new.page(limit: 10, offset: 5)

set a size and number

Munson::Query.new.page(size: 10, number: 5)

Returns:



66
67
68
69
# File 'lib/munson/query.rb', line 66

def page(opts={})
  @values[:page].merge!(opts)
  self
end

#sort(*args) ⇒ Munson::Query

Note:

Default order is ascending

Chainably sort results

Examples:

sorting by a single field

Munsun::Query.new.sort(:created_at)

sorting by a multiple fields

Munsun::Query.new.sort(:created_at, :age)

specifying sort direction

Munsun::Query.new.sort(:created_at, age: :desc)

specifying sort direction

Munsun::Query.new.sort(score: :desc, :created_at)

Parameters:

  • *args (Hash<Symbol,Symbol>, Symbol)

    fields to sort by

Returns:

See Also:



124
125
126
127
128
# File 'lib/munson/query.rb', line 124

def sort(*args)
  validate_sort_args(args.select{|arg| arg.is_a?(Hash)})
  @values[:sort] += args
  self
end

#to_paramsObject



47
48
49
50
51
52
53
54
55
# File 'lib/munson/query.rb', line 47

def to_params
  str = {}
  str[:filter]  = filter_to_query_value unless @values[:filter].empty?
  str[:fields]  = fields_to_query_value unless @values[:fields].empty?
  str[:include] = include_to_query_value unless @values[:include].empty?
  str[:sort]    = sort_to_query_value unless @values[:sort].empty?
  str[:page]    = @values[:page] unless @values[:page].empty?
  str
end

#to_query_stringString

Returns query as a query string.

Returns:

  • (String)

    query as a query string



39
40
41
# File 'lib/munson/query.rb', line 39

def to_query_string
  Faraday::Utils.build_nested_query(to_params)
end

#to_sObject



43
44
45
# File 'lib/munson/query.rb', line 43

def to_s
  to_query_string
end