parse-stack 1.5.1 → 1.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/Changes.md +15 -1
  3. data/Gemfile.lock +10 -10
  4. data/README.md +23 -9
  5. data/bin/console +3 -0
  6. data/lib/parse/api/analytics.rb +1 -1
  7. data/lib/parse/api/objects.rb +1 -1
  8. data/lib/parse/api/users.rb +1 -1
  9. data/lib/parse/client.rb +77 -40
  10. data/lib/parse/client/caching.rb +9 -5
  11. data/lib/parse/client/protocol.rb +47 -0
  12. data/lib/parse/client/request.rb +66 -37
  13. data/lib/parse/client/response.rb +39 -21
  14. data/lib/parse/model/acl.rb +4 -9
  15. data/lib/parse/model/associations/belongs_to.rb +97 -9
  16. data/lib/parse/model/associations/collection_proxy.rb +89 -29
  17. data/lib/parse/model/associations/has_many.rb +301 -28
  18. data/lib/parse/model/associations/has_one.rb +98 -4
  19. data/lib/parse/model/associations/pointer_collection_proxy.rb +48 -16
  20. data/lib/parse/model/associations/relation_collection_proxy.rb +61 -36
  21. data/lib/parse/model/bytes.rb +11 -5
  22. data/lib/parse/model/classes/installation.rb +50 -3
  23. data/lib/parse/model/classes/role.rb +7 -2
  24. data/lib/parse/model/classes/session.rb +21 -4
  25. data/lib/parse/model/classes/user.rb +122 -22
  26. data/lib/parse/model/core/actions.rb +7 -3
  27. data/lib/parse/model/core/properties.rb +14 -13
  28. data/lib/parse/model/core/querying.rb +16 -10
  29. data/lib/parse/model/core/schema.rb +2 -3
  30. data/lib/parse/model/date.rb +18 -12
  31. data/lib/parse/model/file.rb +77 -19
  32. data/lib/parse/model/geopoint.rb +70 -12
  33. data/lib/parse/model/model.rb +84 -8
  34. data/lib/parse/model/object.rb +225 -94
  35. data/lib/parse/model/pointer.rb +94 -13
  36. data/lib/parse/model/push.rb +76 -4
  37. data/lib/parse/query.rb +356 -41
  38. data/lib/parse/query/constraints.rb +399 -29
  39. data/lib/parse/query/ordering.rb +21 -8
  40. data/lib/parse/stack.rb +1 -0
  41. data/lib/parse/stack/version.rb +2 -1
  42. data/lib/parse/webhooks.rb +0 -24
  43. data/lib/parse/webhooks/payload.rb +54 -1
  44. data/lib/parse/webhooks/registration.rb +13 -2
  45. metadata +2 -2
@@ -5,18 +5,112 @@ require_relative '../pointer'
5
5
  require_relative 'collection_proxy'
6
6
  require_relative 'pointer_collection_proxy'
7
7
  require_relative 'relation_collection_proxy'
8
- # a given Parse Pointer. The key of the property is implied to be the
9
- # name of the class/parse table that contains the foreign associated record.
10
- # All belongs to relationship column types have the special data type of :pointer.
8
+
11
9
  module Parse
12
10
  module Associations
13
-
11
+ # The `has_one` creates a one-to-one association with another Parse class.
12
+ # This association says that the other class in the association contains a
13
+ # foreign pointer column which references instances of this class. If your
14
+ # model contains a column that is a Parse pointer to another class, you should
15
+ # use `belongs_to` for that association instead.
16
+ #
17
+ # Defining a `has_one` property generates a helper query method to fetch a
18
+ # particular record from a foreign class. This is useful for setting up the
19
+ # inverse relationship accessors of a `belongs_to`. In the case of the
20
+ # `has_one` relationship, the `:field` option represents the name of the
21
+ # column of the foreign class where the Parse pointer is stored. By default,
22
+ # the lower-first camel case version of the Parse class name is used.
23
+ #
24
+ # In the example below, a `Band` has a local column named `manager` which has
25
+ # a pointer to a `Parse::User` (_:user_) record. This setups up the accessor for `Band`
26
+ # objects to access the band's manager.
27
+ #
28
+ # Since we know there is a column named `manager` in the `Band` class that
29
+ # points to a single `Parse::User`, you can setup the inverse association
30
+ # read accessor in the `Parse::User` class. Note, that to change the
31
+ # association, you need to modify the `manager` property on the band instance
32
+ # since it contains the `belongs_to` property.
33
+ #
34
+ # # every band has a manager
35
+ # class Band < Parse::Object
36
+ # belongs_to :manager, as: :user
37
+ # end
38
+ #
39
+ # band = Band.first id: '12345'
40
+ # # the user represented by this manager
41
+ # user = band.manger
42
+ #
43
+ # # every user manages a band
44
+ # class Parse::User
45
+ # # inverse relationship to `Band.belongs_to :manager`
46
+ # has_one :band, field: :manager
47
+ # end
48
+ #
49
+ # user = Parse::User.first
50
+ #
51
+ # user.band # similar to performing: Band.first(:manager => user)
52
+ #
53
+ #
54
+ # You may optionally use `has_one` with scopes, in order to fine tune the
55
+ # query result. Using the example above, you can customize the query with
56
+ # a scope that only fetches the association if the band is approved. If
57
+ # the association cannot be fetched, `nil` is returned.
58
+ #
59
+ # # adding to previous example
60
+ # class Band < Parse::Object
61
+ # property :approved, :boolean
62
+ # property :approved_date, :date
63
+ # end
64
+ #
65
+ # # every user manages a band
66
+ # class Parse::User
67
+ # has_one :recently_approved, ->{ where(order: :approved_date.desc) }, field: :manager, as: :band
68
+ # has_one :band_by_status, ->(status) { where(approved: status) }, field: :manager, as: :band
69
+ # end
70
+ #
71
+ # # gets the band most recently approved
72
+ # user.recently_approved
73
+ # # equivalent: Band.first(manager: user, order: :approved_date.desc)
74
+ #
75
+ # # fetch the managed band that is not approved
76
+ # user.band_by_status(false)
77
+ # # equivalent: Band.first(manager: user, approved: false)
78
+ #
79
+ # @see Parse::Associations::BelongsTo
80
+ # @see Parse::Associations::HasMany
14
81
  module HasOne
15
82
 
83
+ # @!method self.has_one(key, scope = nil, opts = {})
84
+ # Creates a one-to-one association with another Parse model.
85
+ # @param [Symbol] key The singularized version of the foreign class and the name of the
86
+ # *foreign* column in the foreign Parse table where the pointer is stored.
87
+ # @param [Proc] scope A proc that can customize the query by applying
88
+ # additional constraints when fetching the associated record. Works similarly as
89
+ # ActiveModel associations described in section {http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html Customizing the Query}
90
+ # @option opts [Symbol] :field override the name of the remote column
91
+ # where the pointer is stored. By default this is inferred as
92
+ # the columnized of the key parameter.
93
+ # @option opts [Symbol] :as override the inferred Parse::Object subclass.
94
+ # By default this is inferred as the singularized camel case version of
95
+ # the key parameter. This option allows you to override the Parse model used
96
+ # to perform the query for the association, while allowing you to have a
97
+ # different accessor name.
98
+ # @option opts [Boolean] scope_only Setting this option to `true`,
99
+ # makes the association fetch based only on the scope provided and does
100
+ # not use the local instance object as a foreign pointer in the query.
101
+ # This allows for cases where another property of the local class, is
102
+ # needed to match the resulting records in the association.
103
+ # @see String#columnize
104
+ # @see Associations::HasMany.has_many
105
+ # @return [Parse::Object] a Parse::Object subclass when using the accessor
106
+ # when fetching the association.
107
+
108
+ # @!visibility private
16
109
  def self.included(base)
17
110
  base.extend(ClassMethods)
18
111
  end
19
112
 
113
+ # @!visibility private
20
114
  module ClassMethods
21
115
 
22
116
  # has one are not property but instance scope methods
@@ -7,21 +7,31 @@ require 'active_support/inflector'
7
7
  require 'active_support/core_ext/object'
8
8
  require_relative 'collection_proxy'
9
9
 
10
- # A PointerCollectionProxy is a collection proxy that only allows Parse Pointers (Objects)
11
- # to be part of the collection. This is done by typecasting the collection to a particular
12
- # Parse class. Ex. An Artist may have several Song objects. Therefore an Artist could have a
13
- # column :songs, that is an array (collection) of Song (Parse::Object) objects.
14
- # Because this collection is typecasted, we can do some more interesting things.
15
- module Parse
16
10
 
11
+ module Parse
12
+ # A PointerCollectionProxy is a collection proxy that only allows Parse Pointers (Objects)
13
+ # to be part of the collection. This is done by typecasting the collection to a particular
14
+ # Parse class. Ex. An Artist may have several Song objects. Therefore an Artist could have a
15
+ # column :songs, that is an array (collection) of Song (Parse::Object subclass) objects.
17
16
  class PointerCollectionProxy < CollectionProxy
18
17
 
18
+ # @!attribute [rw] collection
19
+ # The internal backing store of the collection.
20
+ # @return [Array<Parse::Object>]
21
+ # @see CollectionProxy#collection
19
22
  def collection=(c)
20
23
  notify_will_change!
21
24
  @collection = c
22
25
  end
23
- # When we add items, we will verify that they are of type Parse::Pointer at a minimum.
24
- # If they are not, and it is a hash, we check to see if it is a Parse hash.
26
+
27
+ # Add Parse::Objects to the collection.
28
+ # @overload add(parse_object)
29
+ # Add a Parse::Object or Parse::Pointer to this collection.
30
+ # @param parse_object [Parse::Object,Parse::Pointer] the object to add
31
+ # @overload add(parse_objects)
32
+ # Add an array of Parse::Objects or Parse::Pointers to this collection.
33
+ # @param parse_objects [Array<Parse::Object,Parse::Pointer>] the array to append.
34
+ # @return [Array<Parse::Object>] the collection
25
35
  def add(*items)
26
36
  notify_will_change! if items.count > 0
27
37
  items.flatten.parse_objects.each do |item|
@@ -30,7 +40,14 @@ module Parse
30
40
  @collection
31
41
  end
32
42
 
33
- # removes items from the collection
43
+ # Removes Parse::Objects from the collection.
44
+ # @overload remove(parse_object)
45
+ # Remove a Parse::Object or Parse::Pointer to this collection.
46
+ # @param parse_object [Parse::Object,Parse::Pointer] the object to remove
47
+ # @overload remove(parse_objects)
48
+ # Remove an array of Parse::Objects or Parse::Pointers from this collection.
49
+ # @param parse_objects [Array<Parse::Object,Parse::Pointer>] the array of objects to remove.
50
+ # @return [Array<Parse::Object>] the collection
34
51
  def remove(*items)
35
52
  notify_will_change! if items.count > 0
36
53
  items.flatten.parse_objects.each do |item|
@@ -39,36 +56,51 @@ module Parse
39
56
  @collection
40
57
  end
41
58
 
59
+ # Atomically add a set of Parse::Objects to this collection.
60
+ # This is done by making the API request directly with Parse server; the
61
+ # local object is not updated with changes.
62
+ # @see CollectionProxy#add!
63
+ # @see #add_unique!
42
64
  def add!(*items)
43
65
  super(items.flatten.parse_pointers)
44
66
  end
45
67
 
68
+ # Atomically add a set of Parse::Objects to this collection for those not already
69
+ # in the collection.
70
+ # This is done by making the API request directly with Parse server; the
71
+ # local object is not updated with changes.
72
+ # @see CollectionProxy#add_unique!
73
+ # @see #add!
46
74
  def add_unique!(*items)
47
75
  super(items.flatten.parse_pointers)
48
76
  end
49
77
 
78
+ # Atomically remove a set of Parse::Objects to this collection.
79
+ # This is done by making the API request directly with Parse server; the
80
+ # local object is not updated with changes.
81
+ # @see CollectionProxy#remove!
50
82
  def remove!(*items)
51
83
  super(items.flatten.parse_pointers)
52
84
  end
53
85
 
54
- # We define a fetch and fetch! methods on array
55
- # that contain pointer objects. This will make requests for each object
56
- # in the array that is of pointer state (object with unfetch data) and fetch
57
- # them in parallel.
58
-
86
+ # Force fetch the set of pointer objects in this collection.
87
+ # @see Array.fetch_objects!
59
88
  def fetch!
60
89
  collection.fetch_objects!
61
90
  end
62
91
 
92
+ # Fetch the set of pointer objects in this collection.
93
+ # @see Array.fetch_objects
63
94
  def fetch
64
95
  collection.fetch_objects
65
96
  end
66
- # Even though we may have full Parse Objects in the collection, when updating
67
- # or storing them in Parse, we actually just want Parse::Pointer objects.
97
+
98
+ # Encode the collection as a JSON object of Parse::Pointers.
68
99
  def as_json(*args)
69
100
  collection.parse_pointers.as_json
70
101
  end
71
102
 
103
+ # @return [Array<Parse::Pointer>] an array of pointers representing this collection.
72
104
  def parse_pointers
73
105
  collection.parse_pointers
74
106
  end
@@ -6,39 +6,44 @@ require 'active_support/inflector'
6
6
  require 'active_support/core_ext/object'
7
7
  require_relative 'pointer_collection_proxy'
8
8
 
9
- # The RelationCollectionProxy is similar to a PointerCollectionProxy except that
10
- # there is no actual "array" object in Parse. Parse treats relation through an
11
- # intermediary table (a.k.a. join table). Whenever a developer wants the
12
- # contents of a collection, the foreign table needs to be queried instead.
13
- # In this scenario, the parse_class: initializer argument should be passed in order to
14
- # know which remote table needs to be queried in order to fetch the items of the collection.
15
- #
16
- # Unlike managing an array of Pointers, relations in Parse are done throug atomic operations,
17
- # which have a specific API. The design of this proxy is to maintain two sets of lists,
18
- # items to be added to the relation and a separate list of items to be removed from the
19
- # relation.
20
- #
21
- # Because this relationship is based on queryable Parse table, we are also able to
22
- # not just get all the items in a collection, but also provide additional constraints to
23
- # get matching items within the relation collection.
24
- #
25
- # When creating a Relation proxy, all the delegate methods defined in the superclasses
26
- # need to be implemented, in addition to a few others with the key parameter:
27
- # _relation_query and _commit_relation_updates . :'key'_relation_query should return a
28
- # Parse::Query object that is properly tied to the foreign table class related to this object column.
29
- # Example, if an Artist has many Song objects, then the query to be returned by this method
30
- # should be a Parse::Query for the class 'Song'.
31
- # Because relation changes are separate from object changes, you can call save on a
32
- # relation collection to save the current add and remove operations. Because the delegate needs
33
- # to be informed of the changes being committed, it will be notified
34
- # through :'key'_commit_relation_updates message. The delegate is also in charge of
35
- # clearing out the change information for the collection if saved successfully.
36
-
37
9
  module Parse
38
-
10
+ # The RelationCollectionProxy is similar to a PointerCollectionProxy except that
11
+ # there is no actual "array" object in Parse. Parse treats relation through an
12
+ # intermediary table (a.k.a. join table). Whenever a developer wants the
13
+ # contents of a collection, the foreign table needs to be queried instead.
14
+ # In this scenario, the parse_class: initializer argument should be passed in order to
15
+ # know which remote table needs to be queried in order to fetch the items of the collection.
16
+ #
17
+ # Unlike managing an array of Pointers, relations in Parse are done throug atomic operations,
18
+ # which have a specific API. The design of this proxy is to maintain two sets of lists,
19
+ # items to be added to the relation and a separate list of items to be removed from the
20
+ # relation.
21
+ #
22
+ # Because this relationship is based on queryable Parse table, we are also able to
23
+ # not just get all the items in a collection, but also provide additional constraints to
24
+ # get matching items within the relation collection.
25
+ #
26
+ # When creating a Relation proxy, all the delegate methods defined in the superclasses
27
+ # need to be implemented, in addition to a few others with the key parameter:
28
+ # _relation_query and _commit_relation_updates . :'key'_relation_query should return a
29
+ # Parse::Query object that is properly tied to the foreign table class related to this object column.
30
+ # Example, if an Artist has many Song objects, then the query to be returned by this method
31
+ # should be a Parse::Query for the class 'Song'.
32
+ # Because relation changes are separate from object changes, you can call save on a
33
+ # relation collection to save the current add and remove operations. Because the delegate needs
34
+ # to be informed of the changes being committed, it will be notified
35
+ # through :'key'_commit_relation_updates message. The delegate is also in charge of
36
+ # clearing out the change information for the collection if saved successfully.
37
+ # @see PointerCollectionProxy
39
38
  class RelationCollectionProxy < PointerCollectionProxy
40
39
 
41
40
  define_attribute_methods :additions, :removals
41
+ # @!attribute [r] removals
42
+ # The objects that have been newly removed to this collection
43
+ # @return [Array<Parse::Object>]
44
+ # @!attribute [r] additions
45
+ # The objects that have been newly added to this collection
46
+ # @return [Array<Parse::Object>]
42
47
  attr_reader :additions, :removals
43
48
 
44
49
  def initialize(collection = nil, delegate: nil, key: nil, parse_class: nil)
@@ -65,9 +70,14 @@ module Parse
65
70
  end
66
71
 
67
72
 
68
- # add the current items to the relation. The process of adding it
69
- # is adding it to the @additions array and making sure it is
70
- # removed from the @removals array.
73
+ # Add Parse::Objects to the relation.
74
+ # @overload add(parse_object)
75
+ # Add a Parse::Object or Parse::Pointer to this relation.
76
+ # @param parse_object [Parse::Object,Parse::Pointer] the object to add
77
+ # @overload add(parse_objects)
78
+ # Add an array of Parse::Objects or Parse::Pointers to this relation.
79
+ # @param parse_objects [Array<Parse::Object,Parse::Pointer>] the array to append.
80
+ # @return [Array<Parse::Object>] the collection
71
81
  def add(*items)
72
82
  items = items.flatten.parse_objects
73
83
  return @collection if items.empty?
@@ -85,9 +95,14 @@ module Parse
85
95
  @collection
86
96
  end
87
97
 
88
- # removes the current items from the relation.
89
- # The process of removing is deleting it from the @removals array,
90
- # and adding it to the @additions array.
98
+ # Removes Parse::Objects from the relation.
99
+ # @overload remove(parse_object)
100
+ # Remove a Parse::Object or Parse::Pointer to this relation.
101
+ # @param parse_object [Parse::Object,Parse::Pointer] the object to remove
102
+ # @overload remove(parse_objects)
103
+ # Remove an array of Parse::Objects or Parse::Pointers from this relation.
104
+ # @param parse_objects [Array<Parse::Object,Parse::Pointer>] the array of objects to remove.
105
+ # @return [Array<Parse::Object>] the collection
91
106
  def remove(*items)
92
107
  items = items.flatten.parse_objects
93
108
  return @collection if items.empty?
@@ -103,31 +118,41 @@ module Parse
103
118
  @collection
104
119
  end
105
120
 
121
+ # Atomically add a set of Parse::Objects to this relation.
122
+ # This is done by making the API request directly with Parse server; the
123
+ # local object is not updated with changes.
106
124
  def add!(*items)
107
125
  return false unless @delegate.respond_to?(:op_add_relation!)
108
126
  items = items.flatten.parse_pointers
109
127
  @delegate.send :op_add_relation!, @key, items
110
128
  end
111
129
 
130
+ # Atomically add a set of Parse::Objects to this relation.
131
+ # This is done by making the API request directly with Parse server; the
132
+ # local object is not updated with changes.
112
133
  def add_unique!(*items)
113
134
  return false unless @delegate.respond_to?(:op_add_relation!)
114
135
  items = items.flatten.parse_pointers
115
136
  @delegate.send :op_add_relation!, @key, items
116
137
  end
117
138
 
139
+ # Atomically remove a set of Parse::Objects to this relation.
140
+ # This is done by making the API request directly with Parse server; the
141
+ # local object is not updated with changes.
118
142
  def remove!(*items)
119
143
  return false unless @delegate.respond_to?(:op_remove_relation!)
120
144
  items = items.flatten.parse_pointers
121
145
  @delegate.send :op_remove_relation!, @key, items
122
146
  end
123
147
 
124
- # save the changes if any
148
+ # Save the changes to the relation
125
149
  def save
126
150
  unless @removals.empty? && @additions.empty?
127
151
  forward :"#{@key}_commit_relation_updates"
128
152
  end
129
153
  end
130
154
 
155
+ # @see #add
131
156
  def <<(*list)
132
157
  list.each { |d| add(d) }
133
158
  @collection
@@ -6,31 +6,37 @@ require 'active_support/core_ext/object'
6
6
  require_relative "model"
7
7
  require 'base64'
8
8
 
9
- # Support for Bytes type in Parse
9
+
10
10
  module Parse
11
11
 
12
+ # Support for the Bytes type in Parse
12
13
  class Bytes < Model
13
14
  ATTRIBUTES = {__type: :string, base64: :string }.freeze
15
+ # @return [String] the base64 string representing the content
14
16
  attr_accessor :base64
15
- def parse_class; TYPE_BYTES; end;
17
+ # @return [TYPE_BYTES]
18
+ def self.parse_class; TYPE_BYTES; end;
19
+ # @return [TYPE_BYTES]
16
20
  def parse_class; self.class.parse_class; end;
17
21
  alias_method :__type, :parse_class
18
22
 
19
23
  # initialize with a base64 string or a Bytes object
24
+ # @param bytes [String] The content as base64 string.
20
25
  def initialize(bytes = "")
21
26
  @base64 = (bytes.is_a?(Bytes) ? bytes.base64 : bytes).dup
22
27
  end
23
28
 
29
+ # @return [Hash]
24
30
  def attributes
25
31
  ATTRIBUTES
26
32
  end
27
33
 
28
- # takes a string and base64 encodes it
34
+ # Base64 encode and set the instance contents
29
35
  def encode(s)
30
36
  @base64 = Base64.encode64(s)
31
37
  end
32
38
 
33
- # decode the internal data
39
+ # Get the content as decoded base64 bytes
34
40
  def decoded
35
41
  Base64.decode64(@base64 || "")
36
42
  end
@@ -43,7 +49,7 @@ module Parse
43
49
  end
44
50
  end
45
51
 
46
- # two Bytes objects are equal if they have the same base64 signature
52
+ # Two Parse::Bytes objects are equal if they have the same base64 signature
47
53
  def ==(u)
48
54
  return false unless u.is_a?(self.class)
49
55
  @base64 == u.base64
@@ -3,23 +3,70 @@
3
3
  require_relative '../object'
4
4
 
5
5
  module Parse
6
-
6
+ # This class represents the data and columns contained in the standard Parse
7
+ # `_Installation` collection. This class is also responsible for managing the
8
+ # device tokens for mobile devices in order to use push notifications. All queries done
9
+ # to send pushes using Parse::Push are performed against the Installation collection.
10
+ # An installation object represents an instance of your app being installed
11
+ # on a device. These objects are used to store subscription data for
12
+ # installations which have subscribed to one or more push notification channels.
13
+ # @see Push
7
14
  class Installation < Parse::Object
8
- parse_class Parse::Model::CLASS_INSTALLATION
9
15
 
16
+ parse_class Parse::Model::CLASS_INSTALLATION
17
+ # This field only has meaning for Android installations that use the GCM
18
+ # push type. It is reserved for directing Parse to send pushes to this
19
+ # installation with an alternate GCM sender ID. This field should generally
20
+ # not be set unless you are uploading installation data from another push
21
+ # provider. If you set this field, then you must set the GCM API key
22
+ # corresponding to this GCM sender ID in your Parse application’s push settings.
23
+ # @return [String]
10
24
  property :gcm_sender_id, :string, field: :GCMSenderId
25
+ # A unique identifier for this installation’s client application. In iOS, this is the Bundle Identifier.
26
+ # @return [String]
11
27
  property :app_identifier
28
+ # The display name of the client application to which this installation belongs.
29
+ # @return [String]
12
30
  property :app_name
31
+ # The version string of the client application to which this installation belongs.
32
+ # @return [String]
13
33
  property :app_version
34
+ # A number field representing the last known application badge for iOS installations.
35
+ # @return [Integer]
14
36
  property :badge, :integer
37
+ # An array of the channels to which a device is currently subscribed.
38
+ # Note that **channelUris** (the Microsoft-generated push URIs for Windows devices) is
39
+ # not supported at this time.
40
+ # @return [Array]
15
41
  property :channels, :array
42
+ # The Apple or Google generated token used to deliver messages to the APNs
43
+ # or GCM push networks respectively.
44
+ # @return [String]
16
45
  property :device_token
46
+ # @return [Integer]
17
47
  property :device_token_last_modified, :integer
18
- property :device_type
48
+ # The type of device, “ios”, “android”, “winrt”, “winphone”, or “dotnet” (readonly).
49
+ # This property is implemented as a Parse::Stack enumeration.
50
+ # @return [String]
51
+ property :device_type, enum: [:ios, :android, :winrt, :winphone, :dotnet]
52
+ # Universally Unique Identifier (UUID) for the device used by Parse. It
53
+ # must be unique across all of an app’s installations. (readonly).
54
+ # @return [String]
19
55
  property :installation_id
56
+ # The locale for this device.
57
+ # @return [String]
20
58
  property :locale_identifier
59
+ # The version of the Parse SDK which this installation uses.
60
+ # @return [String]
21
61
  property :parse_version
62
+ # This field is reserved for directing Parse to the push delivery network
63
+ # to be used. If the device is registered to receive pushes via GCM, this
64
+ # field will be marked “gcm”. If this device is not using GCM, and is
65
+ # using Parse’s push notification service, it will be blank (readonly).
66
+ # @return [String]
22
67
  property :push_type
68
+ # The current time zone where the target device is located. This should be an IANA time zone identifier.
69
+ # @return [String]
23
70
  property :time_zone
24
71
 
25
72
  end