Class: Lurch::Query
- Inherits:
-
Object
- Object
- Lurch::Query
- Defined in:
- lib/lurch/query.rb
Instance Method Summary collapse
-
#all ⇒ Object
def link(uri) # TODO: fail if type already set # TODO: set uri and merge in query params from provided uri if any self end.
- #delete(resource) ⇒ Object
- #fields(type, fields = nil) ⇒ Object
- #filter(params) ⇒ Object
- #find(id) ⇒ Object
- #include(*relationship_paths) ⇒ Object
-
#initialize(store, inflector) ⇒ Query
constructor
A new instance of Query.
- #insert(changeset) ⇒ Object
- #inspect ⇒ Object
- #page(params) ⇒ Object
- #save(changeset) ⇒ Object
- #sort(*sort_keys) ⇒ Object
- #type(type) ⇒ Object
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
#all ⇒ Object
def link(uri)
# TODO: fail if type already set
# TODO: set uri and merge in query params from provided uri if any
self
end
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
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
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
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 |
#inspect ⇒ Object
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
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 |