Module: Parse

Defined in:
lib/parse/push.rb,
lib/parse/user.rb,
lib/parse/util.rb,
lib/parse/cloud.rb,
lib/parse/error.rb,
lib/parse/query.rb,
lib/parse/client.rb,
lib/parse/object.rb,
lib/parse/protocol.rb,
lib/parse/datatypes.rb

Defined Under Namespace

Modules: Cloud, Protocol Classes: Bytes, Client, Date, Decrement, File, GeoPoint, Increment, Object, ParseError, ParseProtocolError, Pointer, Push, Query, User

Constant Summary collapse

@@client =

A singleton client for use by methods in Object. Always use Parse.client to retrieve the client object.

nil

Class Method Summary collapse

Class Method Details

.clientObject



119
120
121
122
123
124
# File 'lib/parse/client.rb', line 119

def Parse.client
  if !@@client
    raise ParseError, "API not initialized"
  end
  @@client
end

.destroyObject

Used mostly for testing. Lets you delete the api key global vars.



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

def Parse.destroy
  @@client = nil
  self
end

.get(class_name, object_id = nil) ⇒ Object

Perform a simple retrieval of a simple object, or all objects of a given class. If object_id is supplied, a single object will be retrieved. If object_id is not supplied, then all objects of the given class will be retrieved and returned in an Array.



130
131
132
133
# File 'lib/parse/client.rb', line 130

def Parse.get(class_name, object_id = nil)
  data = Parse.client.get( Protocol.class_uri(class_name, object_id) )
  Parse.parse_json class_name, data
end

.init(data = {}) ⇒ Object

Initialize the singleton instance of Client which is used by all API methods. Parse.init must be called before saving or retrieving any objects.



102
103
104
105
106
107
108
109
110
111
# File 'lib/parse/client.rb', line 102

def Parse.init(data = {})
  defaulted = {:application_id => ENV["PARSE_APPLICATION_ID"],
               :api_key => ENV["PARSE_REST_API_KEY"]}
  defaulted.merge!(data)

  # use less permissive key if both are specified
  defaulted[:master_key] = ENV["PARSE_MASTER_API_KEY"] unless data[:master_key] || defaulted[:api_key]

  @@client = Client.new(defaulted)
end

.parse_datatype(obj) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/parse/util.rb', line 35

def Parse.parse_datatype(obj)
  type = obj[Protocol::KEY_TYPE]

  case type
    when Protocol::TYPE_POINTER
      Parse::Pointer.new obj
    when Protocol::TYPE_BYTES
      Parse::Bytes.new obj
    when Protocol::TYPE_DATE
      Parse::Date.new obj
    when Protocol::TYPE_GEOPOINT
      Parse::GeoPoint.new obj
    when Protocol::TYPE_FILE
      Parse::File.new obj
  end
end

.parse_json(class_name, obj) ⇒ Object

Parse a JSON representation into a fully instantiated class. obj can be either a string or a Hash as parsed by JSON.parse

Parameters:



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/parse/util.rb', line 8

def Parse.parse_json(class_name, obj)

  if obj.nil?
    nil

  # Array
  elsif obj.is_a? Array
    obj.collect { |o| parse_json(class_name, o) }

  # Hash
  elsif obj.is_a? Hash

    # If it's a datatype hash
    if obj.has_key?(Protocol::KEY_TYPE)
      parse_datatype obj
    elsif obj.size == 1 && obj.has_key?(Protocol::KEY_RESULTS) && obj[Protocol::KEY_RESULTS].is_a?(Array)
      obj[Protocol::KEY_RESULTS].collect { |o| parse_json(class_name, o) }
    else # otherwise it must be a regular object, so deep parse it avoiding re-JSON.parsing raw Strings
      Parse::Object.new class_name, Hash[obj.map{|k,v| [k, parse_json(nil, v)]}]
    end

  # primitive
  else
    obj
  end
end