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