class Parse::Object
Attributes
auto_camel_case[RW]
parse_class_name[RW]
parse_client[RW]
acl[RW]
created_at[RW]
obj_id[RW]
obj_id=[RW]
parse_object_id[RW]
updated_at[RW]
Public Class Methods
count(condition=nil, &block)
click to toggle source
# File lib/parse/object.rb, line 88 def count condition=nil, &block opts = {:limit => 0, :count => true} if condition opts[:where] = condition elsif block opts[:where] = block end find(:all, opts).query_count end
count!(condition=nil, &block)
click to toggle source
# File lib/parse/object.rb, line 98 def count! condition=nil, &block opts = {:limit => 0, :count => true} if condition opts[:where] = condition elsif block opts[:where] = block end find!(:all, opts).query_count end
create(parse_class_name, mod=::Object)
click to toggle source
# File lib/parse/object.rb, line 29 def create parse_class_name, mod=::Object raise 'already defined' if mod.const_defined? parse_class_name if RESERVED_PARSE_CLASS.has_key? parse_class_name.to_s eval RESERVED_PARSE_CLASS[parse_class_name.to_s] else klass = Class.new(Parse::Object) klass.parse_class_name = parse_class_name.to_sym klass.auto_camel_case = true mod.const_set parse_class_name, klass register_parse_class klass end end
find(object_id_or_conditions, opts={})
click to toggle source
# File lib/parse/object.rb, line 51 def find object_id_or_conditions, opts={} raw_results = parse_client.find(self.parse_class_name, object_id_or_conditions, opts) results = [raw_results].flatten results.map! {|hash| self.new hash} # TODO: should be recursive if raw_results.is_a? Array results.query_count = raw_results.query_count end results end
find!(object_id_or_conditions, opts={})
click to toggle source
TODO: need refactoring
# File lib/parse/object.rb, line 66 def find! object_id_or_conditions, opts={} raw_results = parse_client.find!(self.parse_class_name, object_id_or_conditions, opts) results = [raw_results].flatten results.map! {|hash| self.new hash} if raw_results.is_a? Array results.query_count = raw_results.query_count end results end
find_all(opts={})
click to toggle source
# File lib/parse/object.rb, line 80 def find_all opts={} find :all, opts end
find_all!(opts={})
click to toggle source
# File lib/parse/object.rb, line 84 def find_all! opts={} find! :all, opts end
find_by_id(object_id, opts={})
click to toggle source
# File lib/parse/object.rb, line 61 def find_by_id object_id, opts={} find(object_id, opts).first end
find_by_id!(object_id, opts={})
click to toggle source
# File lib/parse/object.rb, line 76 def find_by_id! object_id, opts={} find!(object_id, opts).first end
new(hash={})
click to toggle source
# File lib/parse/object.rb, line 111 def initialize hash={} body_hash = nil hash = string_keyed_hash hash if hash.has_key? 'objectId' @parse_object_id = hash['objectId'] @raw_hash = hash @updated_hash = {} body_hash = @raw_hash else @raw_hash = {} @updated_hash = hash body_hash = @updated_hash end @deleted = false hash.each do |k, v| if v.is_a? Hash body_hash[k] = case v['__type'] when nil Parse::ACL.new v when 'Date' ParseDate.parse v['iso'] when 'File' ParseFile.new v when 'Pointer' Parse::Pointer.new v, self when 'Relation' Parse::Relation.new self, k, v when 'GeoPoint' Parse::GeoPoint.new v else v end end end end
register_parse_class(parse_class)
click to toggle source
# File lib/parse/object.rb, line 25 def register_parse_class parse_class @@parse_class_vs_class_table[parse_class.parse_class_name] = parse_class end
reserved_column?(c)
click to toggle source
# File lib/parse/object.rb, line 21 def reserved_column? c reserved_columns.include? c end
reserved_columns()
click to toggle source
# File lib/parse/object.rb, line 17 def reserved_columns %w(objectId) end
Public Instance Methods
create(hash, use_master_key=false)
click to toggle source
# File lib/parse/object.rb, line 188 def create hash, use_master_key=false check_deleted! hash = string_keyed_hash hash @updated_hash = @raw_hash.dup.update(@updated_hash).update hash @updated_hash.reject! do |k, v| v.is_a?(Parse::Relation) && !v.changed? end method = use_master_key ? :create! : :create parse_client.send(method, self.parse_class_name, @updated_hash) do |response| @parse_object_id = response['objectId'] @created_at = ParseDate.parse response['createdAt'] @updated_at = @created_at @raw_hash.update @updated_hash @raw_hash.update response @updated_hash.clear end end
create!(hash={})
click to toggle source
# File lib/parse/object.rb, line 206 def create! hash={} create hash, true end
delete(use_master_key=false)
click to toggle source
# File lib/parse/object.rb, line 226 def delete use_master_key=false raise 'You cannot delete new object' if new? check_deleted! method = use_master_key ? :delete! : :delete parse_client.send(method, parse_class_name, parse_object_id) do |response| @deleted = true end end
delete!()
click to toggle source
# File lib/parse/object.rb, line 235 def delete! delete true end
deleted?()
click to toggle source
# File lib/parse/object.rb, line 157 def deleted? @deleted end
get_column(name)
click to toggle source
# File lib/parse/object.rb, line 246 def get_column name name = name.to_s ret = @updated_hash[name] if ret.nil? && self.class.auto_camel_case ret = @updated_hash[name.camelize :lower] end if ret.nil? ret = @raw_hash[name] if ret.nil? && self.class.auto_camel_case ret = @raw_hash[name.camelize :lower] end end ret end
method_missing(name, *args, &block)
click to toggle source
Calls superclass method
# File lib/parse/object.rb, line 304 def method_missing name, *args, &block if name =~ /^\w+$/ && args.empty? && block.nil? get_column name elsif name[-1] == '=' && args.size == 1 && block.nil? set_column name[0..-2], args.first else super end end
new?()
click to toggle source
# File lib/parse/object.rb, line 149 def new? !@deleted && @raw_hash.empty? end
parse_class_name()
click to toggle source
# File lib/parse/object.rb, line 165 def parse_class_name self.class.parse_class_name end
parse_client()
click to toggle source
# File lib/parse/object.rb, line 161 def parse_client self.class.parse_client end
pointer()
click to toggle source
# File lib/parse/object.rb, line 266 def pointer Pointer.new 'className' => parse_class_name, 'objectId' => parse_object_id end
save(hash=@updated_hash, use_master_key=false)
click to toggle source
# File lib/parse/object.rb, line 169 def save hash=@updated_hash, use_master_key=false check_deleted! unless hash.is_a? Hash hash = @updated_hash use_master_key = hash end hash = string_keyed_hash hash if new? create hash, use_master_key else update hash, use_master_key end end
save!(hash=@updated_hash)
click to toggle source
# File lib/parse/object.rb, line 184 def save! hash=@updated_hash save hash, true end
set_column(name, value)
click to toggle source
# File lib/parse/object.rb, line 261 def set_column name, value check_deleted! @updated_hash[name] = value end
to_h()
click to toggle source
# File lib/parse/object.rb, line 270 def to_h {"__type" => self.class.name}.update(@raw_hash).update(@updated_hash) ret = {} {"__type" => self.class.name}.update(@raw_hash).update(@updated_hash).each do |k, v| ret[k] = case v when Parse::Pointer v.to_h when Parse::Object v.to_h when Parse::Relation '<Ralations>' else v.to_s end end ret =begin Hash[ *({"__type" => self.class.name}.update(@raw_hash.dup).update(@updated_hash.dup).to_a.map do |a| [a[0], a[1].to_h] end.flatten(1)) ] =end end
to_json(*args)
click to toggle source
# File lib/parse/object.rb, line 296 def to_json *args to_h.to_json end
to_s()
click to toggle source
# File lib/parse/object.rb, line 300 def to_s to_h.to_s end
update(hash, use_master_key=false)
click to toggle source
# File lib/parse/object.rb, line 210 def update hash, use_master_key=false check_deleted! hash = string_keyed_hash hash method = use_master_key ? :update! : :update parse_client.send(method, parse_class_name, parse_object_id, hash) do |response| @raw_hash.update @updated_hash @raw_hash.update response @updated_at = ParseDate.parse response['updatedAt'] @updated_hash.clear end end
update!(hash)
click to toggle source
# File lib/parse/object.rb, line 222 def update! hash update hash, true end
updated?()
click to toggle source
# File lib/parse/object.rb, line 153 def updated? !@deleted && !@updated_hash.empty? end
Private Instance Methods
check_deleted!()
click to toggle source
# File lib/parse/object.rb, line 316 def check_deleted! raise 'This object has already been deleted.' if deleted? end