module Her::Model::ORM::ClassMethods
Public Instance Methods
blank_relation()
click to toggle source
@private
# File lib/her/model/orm.rb, line 292 def blank_relation @blank_relation ||= superclass.blank_relation.clone.tap { |r| r.parent = self } if superclass.respond_to?(:blank_relation) @blank_relation ||= Relation.new(self) end
build(attributes = {})
click to toggle source
Build a new resource with the given attributes. If the request_new_object_on_build flag is set, the new object is requested via API
.
# File lib/her/model/orm.rb, line 275 def build(attributes = {}) params = attributes return new(params) unless request_new_object_on_build? path = build_request_path(params.merge(primary_key => 'new')) method = method_for(:new) resource = nil request(params.merge(:_method => method, :_path => path)) do |parsed_data, response| if response.success? resource = new_from_parsed_data(parsed_data) end end resource end
default_scope(block = nil)
click to toggle source
Define the default scope for the model
@example
class User include Her::Model default_scope lambda { where(:admin => 1) } enc User.all # Called via GET "/users?admin=1" User.new.admin # => 1
# File lib/her/model/orm.rb, line 209 def default_scope(block = nil) @_her_default_scope ||= (!respond_to?(:default_scope) && superclass.respond_to?(:default_scope)) ? superclass.default_scope : scoped @_her_default_scope = @_her_default_scope.instance_exec(&block) unless block.nil? @_her_default_scope end
destroy_existing(id, params = {})
click to toggle source
Destroy an existing resource
@example
User.destroy_existing(1) # Called via DELETE "/users/1"
# File lib/her/model/orm.rb, line 248 def destroy_existing(id, params = {}) request(params.merge(:_method => method_for(:destroy), :_path => build_request_path(params.merge(primary_key => id)))) do |parsed_data, response| data = parse(parsed_data[:data]) metadata = parsed_data[:metadata] response_errors = parsed_data[:errors] record = new(data.merge(:_destroyed => response.success?, :metadata => metadata)) record.response_errors = response_errors record end end
method_for(action = nil, method = nil)
click to toggle source
Return or change the HTTP
method used to create or update records
@param [Symbol, String] action The behavior in question (`:create` or `:update`) @param [Symbol, String] method The HTTP
method to use (`'PUT'`, `:post`, etc.)
# File lib/her/model/orm.rb, line 263 def method_for(action = nil, method = nil) @method_for ||= (superclass.respond_to?(:method_for) ? superclass.method_for : {}) return @method_for if action.nil? action = action.to_s.downcase.to_sym return @method_for[action] if method.nil? @method_for[action] = method.to_s.downcase.to_sym end
save_existing(id, params)
click to toggle source
Save an existing resource and return it
@example
@user = User.save_existing(1, { :fullname => "Tobias Fünke" }) # Called via PUT "/users/1"
# File lib/her/model/orm.rb, line 230 def save_existing(id, params) save_existing!(id, params) rescue Her::Errors::ResourceInvalid => e e.resource end
save_existing!(id, params)
click to toggle source
Similar to .save_existing but raises ResourceInvalid if save fails
# File lib/her/model/orm.rb, line 237 def save_existing!(id, params) resource = new(params.merge(primary_key => id)) resource.save! resource end
scope(name, code)
click to toggle source
Create a new chainable scope
@example
class User include Her::Model scope :admins, lambda { where(:admin => 1) } scope :page, lambda { |page| where(:page => page) } enc User.admins # Called via GET "/users?admin=1" User.page(2).all # Called via GET "/users?page=2"
# File lib/her/model/orm.rb, line 183 def scope(name, code) # Add the scope method to the class (class << self; self end).send(:define_method, name) do |*args| instance_exec(*args, &code) end # Add the scope method to the default/blank relation scoped.define_singleton_method(name) { |*args| instance_exec(*args, &code) } end
scoped()
click to toggle source
@private
# File lib/her/model/orm.rb, line 194 def scoped @_her_default_scope || blank_relation end