Class: Parse::Object

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

Overview

Direct Known Subclasses

Installation, Model, User

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(class_name, data = nil, client = nil) ⇒ Object

Returns a new instance of Object.



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

def initialize(class_name, data = nil, client = nil)
  @class_name = class_name
  @op_fields = {}
  parse data if data
  @client = client
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

#clientObject

Returns the value of attribute client.



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

def client
  @client
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



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

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

#array_add_relation(field, value) ⇒ Object



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

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

#array_add_unique(field, value) ⇒ Object



165
166
167
# File 'lib/parse/object.rb', line 165

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

#array_remove(field, value) ⇒ Object



169
170
171
# File 'lib/parse/object.rb', line 169

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

#array_remove_relation(field, value) ⇒ Object



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

def array_remove_relation(field, value)
  array_op(field, Protocol::KEY_REMOVE_RELATION, 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).



192
193
194
# File 'lib/parse/object.rb', line 192

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



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



175
176
177
178
179
180
181
182
183
184
185
186
187
# File 'lib/parse/object.rb', line 175

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 = @client.request(uri, :put, body)
  parse data
  self
end

#inspectObject



128
129
130
# File 'lib/parse/object.rb', line 128

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.



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

def parse_delete
  @client.delete uri if @parse_object_id

  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.



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

def refresh
  if @parse_object_id
    data = Parse.get(@class_name, @parse_object_id, @client)
    @op_fields = {}
    clear
    parse data if data
  end

  self
end

#rest_api_hashObject

full REST api representation of object



103
104
105
# File 'lib/parse/object.rb', line 103

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

#safe_hashObject

representation of object to send on saves



87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/parse/object.rb', line 87

def safe_hash
  Hash[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.



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/parse/object.rb', line 59

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

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

  if data
    # array ops can return mutated view of array which needs to be parsed
    object = Parse.parse_json(class_name, data)
    object = Parse.copy_client(@client, object)
    parse object
  end

  if @class_name == Parse::Protocol::CLASS_USER
    delete('password')
    delete(:username)
    delete(:password)
  end

  self
end

#should_call_to_h?(value) ⇒ Boolean

Handle the addition of Array#to_h in Ruby 2.1

Returns:

  • (Boolean)


108
109
110
# File 'lib/parse/object.rb', line 108

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

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



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

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



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

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

#to_sObject



124
125
126
# File 'lib/parse/object.rb', line 124

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

#update_attributes(data = {}) ⇒ Object



51
52
53
54
# File 'lib/parse/object.rb', line 51

def update_attributes(data = {})
  data.each_pair { |k, v| self[k] = v }
  save
end

#uriObject



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

def uri
  Protocol.class_uri @class_name, @parse_object_id
end