Skip to content

Commit

Permalink
Added support for increment/decrement object operations, and cleaned …
Browse files Browse the repository at this point in the history
…up parse() and parse_refresh()
  • Loading branch information
aalpern committed Jan 25, 2012
1 parent 37fb3ab commit 66e6598
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 10 deletions.
46 changes: 36 additions & 10 deletions lib/parse/object.rb
Expand Up @@ -27,15 +27,18 @@ def initialize(class_name, data = nil)
# merge the hash keys, and then insure that the reserved
# fields do not occur in the underlying hash storage.
def parse(data)
@parse_object_id = data[Protocol::KEY_OBJECT_ID]
@created_at = data[Protocol::KEY_CREATED_AT]
if @created_at
@created_at = DateTime.parse @created_at
if !data
return
end

@updated_at = data[Protocol::KEY_UPDATED_AT]
if @updated_at
@updated_at = DateTime.parse @updated_at
@parse_object_id ||= data[Protocol::KEY_OBJECT_ID]

if data[Protocol::KEY_CREATED_AT]
@created_at = DateTime.parse data[Protocol::KEY_CREATED_AT]
end

if data[Protocol::KEY_UPDATED_AT]
@updated_at = DateTime.parse data[Protocol::KEY_UPDATED_AT]
end

self.merge! data
Expand All @@ -62,23 +65,46 @@ def parse_save

def parse_refresh
if @parse_object_id
data = Protocol.client.get(@class_name, @parse_object_id)
data = Parse.client.get(Protocol.class_uri(@class_name, @parse_object_id))
if data
parse data
end
self
end
self
end

def parse_delete
if @parse_object_id
uri = Protocol.class_uri @class_name, @parse_object_id

response = parse.client.session.request(:delete, uri, {})
response = Parse.client.request(:delete, uri, {})
response
end
nil
end

def parse_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

if amount != 0
op = amount > 0 ? Protocol::OP_INCREMENT : Protocol::OP_DECREMENT
body = "{\"#{field}\": {\"__op\": \"#{op}\", \"amount\" : #{amount.abs}}}"
puts body
data = Parse.client.request( Protocol.class_uri(@class_name, @parse_object_id), :put, body)
parse data
end
self
end

def parse_decrement(field, amount = 1)
parse_increment field, -amount
end

end

end
6 changes: 6 additions & 0 deletions lib/parse/protocol.rb
Expand Up @@ -31,6 +31,12 @@ module Protocol
# to indicate that the response contains an array of objects.
RESPONSE_KEY_RESULTS = "results"

# Operation name for incrementing an objects field value remotely
OP_INCREMENT = "Increment"

# Operation name for decrementing an objects field value remotely
OP_DECREMENT = "Decrement"

# Construct a uri referencing a given Parse object
# class or instance (of object_id is non-nil).
def self.class_uri(class_name, object_id = nil)
Expand Down

0 comments on commit 66e6598

Please sign in to comment.