Class: Parse::Object

Inherits:
Hash
  • Object
show all
Defined in:
lib/parse/object.rb

Overview

Represents an individual Parse API object.

Direct Known Subclasses

Installation, Model, User

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(class_name, data = nil) ⇒ Object

Returns a new instance of Object.



16
17
18
19
20
21
22
# File 'lib/parse/object.rb', line 16

def initialize(class_name, data = nil)
  @class_name = class_name
  @op_fields = {}
  if data
    parse data
  end
end

Instance Attribute Details

#class_nameObject (readonly)

Returns the value of attribute class_name.



11
12
13
# File 'lib/parse/object.rb', line 11

def class_name
  @class_name
end

#created_atObject (readonly)

Returns the value of attribute created_at.



12
13
14
# File 'lib/parse/object.rb', line 12

def created_at
  @created_at
end

#parse_object_idObject (readonly) Also known as: id

Returns the value of attribute parse_object_id.



10
11
12
# File 'lib/parse/object.rb', line 10

def parse_object_id
  @parse_object_id
end

#updated_atObject (readonly)

Returns the value of attribute updated_at.



13
14
15
# File 'lib/parse/object.rb', line 13

def updated_at
  @updated_at
end

Instance Method Details

#array_add(field, value) ⇒ Object



148
149
150
# File 'lib/parse/object.rb', line 148

def array_add(field, value)
  array_op(field, Protocol::KEY_ADD, value)
end

#array_add_relation(field, value) ⇒ Object



152
153
154
# File 'lib/parse/object.rb', line 152

def array_add_relation(field, value)
  array_op(field, Protocol::KEY_ADD_RELATION, value)
end

#array_add_unique(field, value) ⇒ Object



156
157
158
# File 'lib/parse/object.rb', line 156

def array_add_unique(field, value)
  array_op(field, Protocol::KEY_ADD_UNIQUE, value)
end

#array_remove(field, value) ⇒ Object



160
161
162
# File 'lib/parse/object.rb', line 160

def array_remove(field, value)
  array_op(field, Protocol::KEY_REMOVE, value)
end

#decrement(field, amount = 1) ⇒ Object

Decrement the given field by an amount, which defaults to 1. Saves immediately to reflect decremented A synonym for increment(field, -amount).



181
182
183
# File 'lib/parse/object.rb', line 181

def decrement(field, amount = 1)
  increment(field, -amount)
end

#eql?(other) ⇒ Boolean Also known as: ==

Returns:

  • (Boolean)


24
25
26
# File 'lib/parse/object.rb', line 24

def eql?(other)
  Parse.object_pointer_equality?(self, other)
end

#getObject

make it easier to deal with the ambiguity of whether you’re passed a pointer or object



43
44
45
# File 'lib/parse/object.rb', line 43

def get
  self
end

#hashObject



30
31
32
# File 'lib/parse/object.rb', line 30

def hash
  Parse.object_pointer_hash(self)
end

#increment(field, amount = 1) ⇒ Object

Increment the given field by an amount, which defaults to 1. Saves immediately to reflect incremented



165
166
167
168
169
170
171
172
173
174
175
176
177
# File 'lib/parse/object.rb', line 165

def increment(field, amount = 1)
  #value = (self[field] || 0) + amount
  #self[field] = value
  #if !@parse_object_id
  #  # TODO - warn that the object must be stored first
  #  return nil
  #end

  body = {field => Parse::Increment.new(amount)}.to_json
  data = Parse.client.request(self.uri, :put, body)
  parse data
  self
end

#inspectObject



120
121
122
# File 'lib/parse/object.rb', line 120

def inspect
  "#{@class_name}:#{@parse_object_id} #{super}"
end

#new?Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/parse/object.rb', line 47

def new?
  self["objectId"].nil?
end

#parse_deleteObject

Delete the remote Parse API object.



139
140
141
142
143
144
145
146
# File 'lib/parse/object.rb', line 139

def parse_delete
  if @parse_object_id
    response = Parse.client.delete self.uri
  end

  self.clear
  self
end

#pointerObject



38
39
40
# File 'lib/parse/object.rb', line 38

def pointer
  Parse::Pointer.new(rest_api_hash) unless new?
end

#refreshObject

Update the fields of the local Parse object with the current values from the API.



126
127
128
129
130
131
132
133
134
135
136
# File 'lib/parse/object.rb', line 126

def refresh
  if @parse_object_id
    data = Parse.get @class_name, @parse_object_id
    clear
    if data
      parse data
    end
  end

  self
end

#rest_api_hashObject

full REST api representation of object



95
96
97
# File 'lib/parse/object.rb', line 95

def rest_api_hash
  self.merge(Parse::Protocol::KEY_CLASS_NAME => class_name)
end

#safe_hashObject

representation of object to send on saves



80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/parse/object.rb', line 80

def safe_hash
  Hash[self.map do |key, value|
    if Protocol::RESERVED_KEYS.include?(key)
      nil
    elsif value.is_a?(Hash) && value[Protocol::KEY_TYPE] == Protocol::TYPE_RELATION
      nil
    elsif value.nil?
      [key, Protocol::DELETE_OP]
    else
      [key, Parse.pointerize_value(value)]
    end
  end.compact]
end

#saveObject

Write the current state of the local object to the API. If the object has never been saved before, this will create a new object, otherwise it will update the existing stored object.



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/parse/object.rb', line 54

def save
  if @parse_object_id
    method = :put
    self.merge!(@op_fields) # use operations instead of our own view of the columns
  else
    method = :post
  end

  body = safe_hash.to_json
  data = Parse.client.request(self.uri, method, body)

  if data
    # array operations can return mutated view of array which needs to be parsed
    parse Parse.parse_json(class_name, data)
  end

  if @class_name == Parse::Protocol::CLASS_USER
    self.delete("password")
    self.delete(:username)
    self.delete(:password)
  end

  self
end

#should_call_to_h?(value) ⇒ Boolean

Handle the addition of Array#to_h in Ruby 2.1

Returns:

  • (Boolean)


100
101
102
# File 'lib/parse/object.rb', line 100

def should_call_to_h?(value)
  value.respond_to?(:to_h) && !value.kind_of?(Array)
end

#to_h(*a) ⇒ Object Also known as: as_json, to_hash



104
105
106
107
108
# File 'lib/parse/object.rb', line 104

def to_h(*a)
  Hash[rest_api_hash.map do |key, value|
    [key, should_call_to_h?(value) ? value.to_h : value]
  end]
end

#to_json(*a) ⇒ Object



112
113
114
# File 'lib/parse/object.rb', line 112

def to_json(*a)
  to_h.to_json(*a)
end

#to_sObject



116
117
118
# File 'lib/parse/object.rb', line 116

def to_s
  "#{@class_name}:#{@parse_object_id} #{super}"
end

#uriObject



34
35
36
# File 'lib/parse/object.rb', line 34

def uri
  Protocol.class_uri @class_name, @parse_object_id
end