Class: Lurch::Query

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

Instance Method Summary collapse

Constructor Details

#initialize(store, inflector) ⇒ Query

Returns a new instance of Query.



3
4
5
6
7
8
9
10
11
# File 'lib/lurch/query.rb', line 3

def initialize(store, inflector)
  @store = store
  @inflector = inflector
  @filter = {}
  @include = []
  @fields = Hash.new { [] }
  @sort = []
  @page = {}
end

Instance Method Details

#allObject

def link(uri)

# TODO: fail if type already set
# TODO: set uri and merge in query params from provided uri if any
self

end

Raises:

  • (ArgumentError)


50
51
52
53
# File 'lib/lurch/query.rb', line 50

def all
  raise ArgumentError, "No type specified for query" if @type.nil?
  @store.load_from_url(uri_builder.resources_uri(@type, to_query))
end

#delete(resource) ⇒ Object

Raises:

  • (ArgumentError)


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

def delete(resource)
  raise ArgumentError, "No type specified for query" if @type.nil?
  raise ArgumentError, "Type mismatch" if @type != resource.type
  @store.delete(resource, to_query)
end

#fields(type, fields = nil) ⇒ Object



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

def fields(type, fields = nil)
  type, fields = [@type, type] if type.is_a?(Array) && fields.nil?
  @fields[type] += fields
  self
end

#filter(params) ⇒ Object



13
14
15
16
# File 'lib/lurch/query.rb', line 13

def filter(params)
  @filter.merge!(params)
  self
end

#find(id) ⇒ Object

Raises:

  • (ArgumentError)


55
56
57
58
59
# File 'lib/lurch/query.rb', line 55

def find(id)
  raise ArgumentError, "No type specified for query" if @type.nil?
  raise ArgumentError, "Can't perform find for `nil`" if id.nil?
  @store.peek(@type, id) || @store.load_from_url(uri_builder.resource_uri(@type, id, to_query))
end

#include(*relationship_paths) ⇒ Object



18
19
20
21
# File 'lib/lurch/query.rb', line 18

def include(*relationship_paths)
  @include += relationship_paths
  self
end

#insert(changeset) ⇒ Object

Raises:

  • (ArgumentError)


67
68
69
70
71
# File 'lib/lurch/query.rb', line 67

def insert(changeset)
  raise ArgumentError, "No type specified for query" if @type.nil?
  raise ArgumentError, "Type mismatch" if @type != changeset.type
  @store.insert(changeset, to_query)
end

#inspectObject



79
80
81
82
83
84
# File 'lib/lurch/query.rb', line 79

def inspect
  type = @type.nil? ? "" : "[#{Inflector.classify(@type)}]"
  query = to_query
  query = query.empty? ? "" : " #{query.inspect}"
  "#<#{self.class}#{type}#{query}>"
end

#page(params) ⇒ Object



34
35
36
37
# File 'lib/lurch/query.rb', line 34

def page(params)
  @page.merge!(params)
  self
end

#save(changeset) ⇒ Object

Raises:

  • (ArgumentError)


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

def save(changeset)
  raise ArgumentError, "No type specified for query" if @type.nil?
  raise ArgumentError, "Type mismatch" if @type != changeset.type
  @store.save(changeset, to_query)
end

#sort(*sort_keys) ⇒ Object



29
30
31
32
# File 'lib/lurch/query.rb', line 29

def sort(*sort_keys)
  @sort += sort_keys.map { |sort_key| sort_key.is_a?(Hash) ? sort_key : { sort_key => :asc } }
  self
end

#type(type) ⇒ Object



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

def type(type)
  @type = Inflector.decode_type(type)
  self
end