Class: Parse::Object

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

Overview

Represents an individual Parse API object.

Direct Known Subclasses

Model, User

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(class_name, data = nil) ⇒ Object

Returns a new instance of Object.



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

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.



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

def class_name
  @class_name
end

#created_atObject (readonly)

Returns the value of attribute created_at.



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

def created_at
  @created_at
end

#parse_object_idObject (readonly) Also known as: id

Returns the value of attribute parse_object_id.



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

def parse_object_id
  @parse_object_id
end

#updated_atObject (readonly)

Returns the value of attribute updated_at.



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

def updated_at
  @updated_at
end

Instance Method Details

#array_add(field, value) ⇒ Object



142
143
144
# File 'lib/parse/object.rb', line 142

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

#array_add_relation(field, value) ⇒ Object



146
147
148
# File 'lib/parse/object.rb', line 146

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

#array_add_unique(field, value) ⇒ Object



150
151
152
# File 'lib/parse/object.rb', line 150

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

#array_remove(field, value) ⇒ Object



154
155
156
# File 'lib/parse/object.rb', line 154

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).



175
176
177
# File 'lib/parse/object.rb', line 175

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

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

Returns:

  • (Boolean)


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

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



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

def get
  self
end

#hashObject



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

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



159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'lib/parse/object.rb', line 159

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



114
115
116
# File 'lib/parse/object.rb', line 114

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

#new?Boolean

Returns:

  • (Boolean)


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

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

#parse_deleteObject

Delete the remote Parse API object.



133
134
135
136
137
138
139
140
# File 'lib/parse/object.rb', line 133

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

  self.clear
  self
end

#pointerObject



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

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.



120
121
122
123
124
125
126
127
128
129
130
# File 'lib/parse/object.rb', line 120

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



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

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

#safe_hashObject

representation of object to send on saves



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

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.



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

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

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



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

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

#to_json(*a) ⇒ Object



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

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

#to_sObject



110
111
112
# File 'lib/parse/object.rb', line 110

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

#uriObject



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

def uri
  Protocol.class_uri @class_name, @parse_object_id
end