Module: Parse
- Defined in:
- lib/parse/push.rb,
lib/parse/user.rb,
lib/parse/util.rb,
lib/parse/batch.rb,
lib/parse/cloud.rb,
lib/parse/error.rb,
lib/parse/model.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: ArrayOp, Batch, Bytes, Client, Date, File, GeoPoint, Increment, Model, 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
- .client ⇒ Object
-
.destroy ⇒ Object
Used mostly for testing.
-
.get(class_name, object_id = nil) ⇒ Object
Perform a simple retrieval of a simple object, or all objects of a given class.
-
.init(data = {}) ⇒ Object
Initialize the singleton instance of Client which is used by all API methods.
-
.init_from_cloud_code(path = "../config/global.json") ⇒ Object
A convenience method for using global.json.
- .object_pointer_equality?(a, b) ⇒ Boolean
- .object_pointer_hash(v) ⇒ Object
- .parse_datatype(obj) ⇒ Object
-
.parse_json(class_name, obj) ⇒ Object
Parse a JSON representation into a fully instantiated class.
- .pointerize_value(obj) ⇒ Object
Class Method Details
.client ⇒ Object
205 206 207 208 209 210 |
# File 'lib/parse/client.rb', line 205 def Parse.client if !@@client raise ParseError, "API not initialized" end @@client end |
.destroy ⇒ Object
Used mostly for testing. Lets you delete the api key global vars.
200 201 202 203 |
# File 'lib/parse/client.rb', line 200 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.
216 217 218 219 220 221 222 223 224 225 |
# File 'lib/parse/client.rb', line 216 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 rescue ParseProtocolError => e if e.code == Protocol::ERROR_OBJECT_NOT_FOUND_FOR_GET e. += ": #{class_name}:#{object_id}" end raise 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.
177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/parse/client.rb', line 177 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 |
.init_from_cloud_code(path = "../config/global.json") ⇒ Object
A convenience method for using global.json
190 191 192 193 194 195 196 197 |
# File 'lib/parse/client.rb', line 190 def Parse.init_from_cloud_code(path="../config/global.json") global = JSON.parse(Object::File.open(path).read) # warning: toplevel constant File referenced by Parse::Object::File application_name = global["applications"]["_default"]["link"] application_id = global["applications"][application_name]["applicationId"] master_key = global["applications"][application_name]["masterKey"] Parse.init :application_id => application_id, :master_key => master_key end |
.object_pointer_equality?(a, b) ⇒ Boolean
71 72 73 74 75 76 77 78 |
# File 'lib/parse/util.rb', line 71 def Parse.object_pointer_equality?(a, b) classes = [Parse::Object, Parse::Pointer] return false unless classes.any? { |c| a.kind_of?(c) } && classes.any? { |c| b.kind_of?(c) } return true if a.equal?(b) return false if a.new? || b.new? a.class_name == b.class_name && a.id == b.id end |
.object_pointer_hash(v) ⇒ Object
80 81 82 83 84 85 86 |
# File 'lib/parse/util.rb', line 80 def Parse.object_pointer_hash(v) if v.new? v.object_id else v.class_name.hash ^ v.id.hash end end |
.parse_datatype(obj) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/parse/util.rb', line 36 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 when Protocol::TYPE_OBJECT # used for relation queries, e.g. "?include=post" Parse::Object.new obj[Protocol::KEY_CLASS_NAME], Hash[obj.map{|k,v| [k, parse_json(nil, v)]}] 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
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 34 |
# 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) } elsif class_name # 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)]}] else # plain old hash obj end # primitive else obj end end |
.pointerize_value(obj) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/parse/util.rb', line 55 def Parse.pointerize_value(obj) if obj.kind_of?(Parse::Object) obj.pointer elsif obj.is_a?(Array) obj.map do |v| Parse.pointerize_value(v) end elsif obj.is_a?(Hash) Hash[obj.map do |k, v| [k, Parse.pointerize_value(v)] end] else obj end end |