parse-stack 1.4.3 → 1.5.1
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.
- checksums.yaml +4 -4
- data/Changes.md +52 -39
- data/Gemfile.lock +2 -2
- data/README.md +609 -124
- data/bin/console +0 -9
- data/lib/parse/api/all.rb +3 -0
- data/lib/parse/api/analytics.rb +2 -2
- data/lib/parse/api/apps.rb +15 -17
- data/lib/parse/api/batch.rb +4 -1
- data/lib/parse/api/cloud_functions.rb +2 -0
- data/lib/parse/api/config.rb +14 -2
- data/lib/parse/api/files.rb +6 -3
- data/lib/parse/api/hooks.rb +4 -4
- data/lib/parse/api/objects.rb +14 -11
- data/lib/parse/api/push.rb +4 -2
- data/lib/parse/api/schemas.rb +6 -5
- data/lib/parse/api/sessions.rb +11 -1
- data/lib/parse/api/users.rb +65 -15
- data/lib/parse/client/authentication.rb +4 -2
- data/lib/parse/client/body_builder.rb +11 -3
- data/lib/parse/client/caching.rb +17 -6
- data/lib/parse/client/protocol.rb +14 -8
- data/lib/parse/client/request.rb +4 -1
- data/lib/parse/client/response.rb +59 -6
- data/lib/parse/client.rb +72 -42
- data/lib/parse/model/acl.rb +22 -4
- data/lib/parse/model/associations/belongs_to.rb +22 -10
- data/lib/parse/model/associations/collection_proxy.rb +14 -1
- data/lib/parse/model/associations/has_many.rb +76 -15
- data/lib/parse/model/associations/has_one.rb +69 -0
- data/lib/parse/model/associations/pointer_collection_proxy.rb +13 -6
- data/lib/parse/model/associations/relation_collection_proxy.rb +5 -2
- data/lib/parse/model/bytes.rb +6 -2
- data/lib/parse/model/classes/installation.rb +27 -0
- data/lib/parse/model/classes/role.rb +20 -0
- data/lib/parse/model/classes/session.rb +26 -0
- data/lib/parse/model/classes/user.rb +185 -0
- data/lib/parse/model/core/actions.rb +40 -26
- data/lib/parse/model/core/properties.rb +126 -20
- data/lib/parse/model/core/querying.rb +63 -3
- data/lib/parse/model/core/schema.rb +9 -6
- data/lib/parse/model/date.rb +5 -1
- data/lib/parse/model/file.rb +12 -9
- data/lib/parse/model/geopoint.rb +6 -4
- data/lib/parse/model/model.rb +29 -21
- data/lib/parse/model/object.rb +29 -76
- data/lib/parse/model/pointer.rb +8 -6
- data/lib/parse/model/push.rb +4 -1
- data/lib/parse/query/constraint.rb +3 -0
- data/lib/parse/query/constraints.rb +6 -3
- data/lib/parse/query/operation.rb +3 -0
- data/lib/parse/query/ordering.rb +3 -0
- data/lib/parse/query.rb +85 -38
- data/lib/parse/stack/generators/rails.rb +3 -0
- data/lib/parse/stack/railtie.rb +2 -0
- data/lib/parse/stack/tasks.rb +4 -1
- data/lib/parse/stack/version.rb +4 -1
- data/lib/parse/stack.rb +3 -0
- data/lib/parse/webhooks/payload.rb +14 -8
- data/lib/parse/webhooks/registration.rb +11 -8
- data/lib/parse/webhooks.rb +11 -8
- data/lib/parse-stack.rb +3 -0
- data/parse-stack.gemspec +10 -8
- metadata +16 -4
data/lib/parse/model/object.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
1
4
|
require 'active_model'
|
2
5
|
require 'active_support'
|
3
6
|
require 'active_support/inflector'
|
@@ -21,6 +24,7 @@ require_relative 'core/actions'
|
|
21
24
|
require_relative 'core/querying'
|
22
25
|
require_relative "core/schema"
|
23
26
|
require_relative "core/properties"
|
27
|
+
require_relative "associations/has_one"
|
24
28
|
require_relative "associations/belongs_to"
|
25
29
|
require_relative "associations/has_many"
|
26
30
|
|
@@ -87,16 +91,18 @@ module Parse
|
|
87
91
|
|
88
92
|
class Object < Pointer
|
89
93
|
include Properties
|
94
|
+
include Associations::HasOne
|
90
95
|
include Associations::BelongsTo
|
91
96
|
include Associations::HasMany
|
92
97
|
include Querying
|
93
98
|
include Fetching
|
94
99
|
include Actions
|
95
100
|
include Schema
|
101
|
+
BASE_OBJECT_CLASS = "Parse::Object".freeze # used for comparison
|
96
102
|
|
97
103
|
def __type; Parse::Model::TYPE_OBJECT; end;
|
98
104
|
# These define callbacks
|
99
|
-
define_model_callbacks :save, :destroy
|
105
|
+
define_model_callbacks :create, :save, :destroy, only: [:after, :before]
|
100
106
|
#core attributes. In general these should be treated as read_only, but the
|
101
107
|
# setters are available since we will be decoding objects from Parse. The :acl
|
102
108
|
# type is documented in its own class file.
|
@@ -141,7 +147,7 @@ module Parse
|
|
141
147
|
elsif opts.is_a?(Hash)
|
142
148
|
#if the objectId is provided we will consider the object pristine
|
143
149
|
#and not track dirty items
|
144
|
-
dirty_track = opts[
|
150
|
+
dirty_track = opts[Parse::Model::OBJECT_ID] || opts[:objectId] || opts[:id]
|
145
151
|
apply_attributes!(opts, dirty_track: !dirty_track)
|
146
152
|
end
|
147
153
|
|
@@ -211,6 +217,7 @@ module Parse
|
|
211
217
|
remote_field = self.field_map[key.to_sym] || key
|
212
218
|
h[remote_field] = send key
|
213
219
|
# make an exception to Parse::Objects, we should return a pointer to them instead
|
220
|
+
h[remote_field] = h[remote_field].parse_pointers if h[remote_field].is_a?(Parse::PointerCollectionProxy)
|
214
221
|
h[remote_field] = h[remote_field].pointer if h[remote_field].respond_to?(:pointer)
|
215
222
|
end
|
216
223
|
h
|
@@ -221,10 +228,18 @@ module Parse
|
|
221
228
|
restore_attributes
|
222
229
|
end
|
223
230
|
|
231
|
+
# overrides ActiveModel::Validations validate! instance method
|
232
|
+
# if it fails, it raises ActiveModel::ValidationError
|
233
|
+
# otherwise return self instead of true
|
234
|
+
def validate!
|
235
|
+
super
|
236
|
+
self
|
237
|
+
end
|
238
|
+
|
224
239
|
# Returns a twin copy of the object without the objectId
|
225
240
|
def twin
|
226
241
|
h = self.as_json
|
227
|
-
h.delete(
|
242
|
+
h.delete(Parse::Model::OBJECT_ID)
|
228
243
|
h.delete(:objectId)
|
229
244
|
h.delete(:id)
|
230
245
|
self.class.new h
|
@@ -246,10 +261,11 @@ module Parse
|
|
246
261
|
# will be returned instead.
|
247
262
|
def self.build(json, table = nil)
|
248
263
|
className = table
|
249
|
-
className ||= (json[
|
264
|
+
className ||= (json[Parse::Model::KEY_CLASS_NAME] || json[:className]) if json.is_a?(Hash)
|
250
265
|
if json.is_a?(Hash) && json["error"].present? && json["code"].present?
|
251
266
|
warn "[Parse::Object] Detected object hash with 'error' and 'code' set. : #{json}"
|
252
267
|
end
|
268
|
+
className = parse_class unless parse_class == BASE_OBJECT_CLASS
|
253
269
|
return if className.nil?
|
254
270
|
# we should do a reverse lookup on who is registered for a different class type
|
255
271
|
# than their name with parse_class
|
@@ -260,7 +276,7 @@ module Parse
|
|
260
276
|
# we are considering these objects as "pristine"
|
261
277
|
o = klass.new(json)
|
262
278
|
else
|
263
|
-
o = Parse::Pointer.new className, (json[
|
279
|
+
o = Parse::Pointer.new className, (json[Parse::Model::OBJECT_ID] || json[:objectId])
|
264
280
|
end
|
265
281
|
return o
|
266
282
|
# rescue NameError => e
|
@@ -287,86 +303,17 @@ module Parse
|
|
287
303
|
@updated_at.to_time.utc.iso8601(3) if @updated_at.present?
|
288
304
|
end
|
289
305
|
|
290
|
-
|
291
|
-
|
292
|
-
end
|
293
|
-
|
294
|
-
# The User class provided by Parse with the required fields. You may
|
295
|
-
# add mixings to this class to add the app specific properties
|
296
|
-
class User < Parse::Object
|
297
|
-
parse_class "_User".freeze
|
298
|
-
property :auth_data, :object
|
299
|
-
property :email
|
300
|
-
property :password
|
301
|
-
property :username
|
302
|
-
|
303
|
-
before_save do
|
304
|
-
# You cannot specify user ACLs.
|
305
|
-
self.clear_attribute_change!(:acl)
|
306
|
-
end
|
307
|
-
|
308
|
-
def anonymous?
|
309
|
-
auth_data.present? && auth_data["anonymous"].present?
|
310
|
-
end
|
311
|
-
end
|
312
|
-
|
313
|
-
class Installation < Parse::Object
|
314
|
-
parse_class "_Installation".freeze
|
315
|
-
|
316
|
-
property :gcm_sender_id, :string, field: :GCMSenderId
|
317
|
-
property :app_identifier
|
318
|
-
property :app_name
|
319
|
-
property :app_version
|
320
|
-
property :badge, :integer
|
321
|
-
property :channels, :array
|
322
|
-
property :device_token
|
323
|
-
property :device_token_last_modified, :integer
|
324
|
-
property :device_type
|
325
|
-
property :installation_id
|
326
|
-
property :locale_identifier
|
327
|
-
property :parse_version
|
328
|
-
property :push_type
|
329
|
-
property :time_zone
|
330
|
-
|
331
|
-
end
|
332
|
-
|
333
|
-
class Role < Parse::Object
|
334
|
-
parse_class "_Role".freeze
|
335
|
-
property :name
|
336
|
-
|
337
|
-
has_many :roles, through: :relation
|
338
|
-
has_many :users, through: :relation
|
339
|
-
|
340
|
-
def update_acl
|
341
|
-
acl.everyone true, false
|
342
|
-
end
|
343
|
-
|
344
|
-
before_save do
|
345
|
-
update_acl
|
346
|
-
end
|
347
|
-
end
|
348
|
-
|
349
|
-
class Session < Parse::Object
|
350
|
-
parse_class "_Session".freeze
|
351
|
-
property :created_with, :object
|
352
|
-
property :expires_at, :date
|
353
|
-
property :installation_id
|
354
|
-
property :restricted, :boolean
|
355
|
-
property :session_token
|
356
|
-
|
357
|
-
belongs_to :user
|
358
306
|
end
|
359
307
|
|
360
308
|
end
|
361
309
|
|
362
|
-
|
363
310
|
class Array
|
364
311
|
# This helper method selects all objects in an array that are either inherit from
|
365
312
|
# Parse::Pointer or are a hash. If it is a hash, a Pare::Object will be built from it
|
366
313
|
# if it constains the proper fields. Non convertible objects will be removed
|
367
314
|
# If the className is not contained or known, you can pass a table name as an argument
|
368
315
|
def parse_objects(table = nil)
|
369
|
-
f =
|
316
|
+
f = Parse::Model::KEY_CLASS_NAME
|
370
317
|
map do |m|
|
371
318
|
next m if m.is_a?(Parse::Pointer)
|
372
319
|
if m.is_a?(Hash) && (m[f] || m[:className] || table)
|
@@ -377,7 +324,13 @@ class Array
|
|
377
324
|
end
|
378
325
|
|
379
326
|
def parse_ids
|
380
|
-
parse_objects.map
|
327
|
+
parse_objects.map(&:id)
|
381
328
|
end
|
382
329
|
|
383
330
|
end
|
331
|
+
|
332
|
+
# Load all the core classes.
|
333
|
+
require_relative 'classes/installation'
|
334
|
+
require_relative 'classes/role'
|
335
|
+
require_relative 'classes/session'
|
336
|
+
require_relative 'classes/user'
|
data/lib/parse/model/pointer.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
1
4
|
require 'active_model'
|
2
5
|
require 'active_support'
|
3
6
|
require 'active_support/inflector'
|
@@ -13,10 +16,10 @@ module Parse
|
|
13
16
|
# based on your Parse application tables - however they are used for when a class is found that cannot be
|
14
17
|
# associated with a defined ruby class or used when specifically saving Parse relation types.
|
15
18
|
class Pointer < Model
|
16
|
-
|
19
|
+
ATTRIBUTES = { __type: :string, className: :string, objectId: :string}.freeze
|
17
20
|
attr_accessor :parse_class, :id
|
18
21
|
|
19
|
-
def __type; "Pointer"
|
22
|
+
def __type; "Pointer"; end;
|
20
23
|
alias_method :className, :parse_class
|
21
24
|
# A Parse object as a className field and objectId. In ruby, we will use the
|
22
25
|
# id attribute method, but for usability, we will also alias it to objectId
|
@@ -32,10 +35,9 @@ module Parse
|
|
32
35
|
end
|
33
36
|
|
34
37
|
def attributes
|
35
|
-
|
38
|
+
ATTRIBUTES
|
36
39
|
end
|
37
40
|
|
38
|
-
|
39
41
|
def json_hash
|
40
42
|
JSON.parse to_json
|
41
43
|
end
|
@@ -98,8 +100,8 @@ class Array
|
|
98
100
|
#if its an exact Parse::Pointer
|
99
101
|
if m.is_a?(Parse::Pointer) || m.respond_to?(:pointer)
|
100
102
|
next m.pointer
|
101
|
-
elsif m.is_a?(Hash) && m[
|
102
|
-
next Parse::Pointer.new m[
|
103
|
+
elsif m.is_a?(Hash) && m[Parse::Model::KEY_CLASS_NAME] && m[Parse::Model::OBJECT_ID]
|
104
|
+
next Parse::Pointer.new m[Parse::Model::KEY_CLASS_NAME], m[Parse::Model::OBJECT_ID]
|
103
105
|
elsif m.is_a?(Hash) && m[:className] && m[:objectId]
|
104
106
|
next Parse::Pointer.new m[:className], m[:objectId]
|
105
107
|
end
|
data/lib/parse/model/push.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
1
4
|
require_relative '../query.rb'
|
2
5
|
require_relative '../client.rb'
|
3
6
|
require 'active_model_serializers'
|
@@ -57,7 +60,7 @@ module Parse
|
|
57
60
|
msg = {
|
58
61
|
data: {
|
59
62
|
alert: alert,
|
60
|
-
badge: badge || "Increment"
|
63
|
+
badge: badge || "Increment"
|
61
64
|
}
|
62
65
|
}
|
63
66
|
msg[:data][:sound] = sound if sound.present?
|
@@ -1,3 +1,6 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
1
4
|
require_relative 'constraint'
|
2
5
|
|
3
6
|
# Eac constraint type is a subclass of Parse::Constraint
|
@@ -7,7 +10,7 @@ require_relative 'constraint'
|
|
7
10
|
# For more information: https://parse.com/docs/rest/guide#queries
|
8
11
|
# For more information about the query design pattern from DataMapper
|
9
12
|
# that inspired this, see http://datamapper.org/docs/find.html
|
10
|
-
class ParseConstraintError <
|
13
|
+
class ParseConstraintError < StandardError; end;
|
11
14
|
module Parse
|
12
15
|
|
13
16
|
class ObjectIdConstraint < Constraint
|
@@ -184,14 +187,14 @@ module Parse
|
|
184
187
|
remote_field_name = res[:key] || remote_field_name
|
185
188
|
query = res[:query]
|
186
189
|
unless query.is_a?(Parse::Query)
|
187
|
-
raise "Invalid Parse::Query object provided in :query field of value: #{@operation.operand}.#{$dontSelect} => #{@value}"
|
190
|
+
raise ParseConstraintError, "Invalid Parse::Query object provided in :query field of value: #{@operation.operand}.#{$dontSelect} => #{@value}"
|
188
191
|
end
|
189
192
|
query = query.compile(encode: false, includeClassName: true)
|
190
193
|
elsif @value.is_a?(Parse::Query)
|
191
194
|
# if its a query, then assume dontSelect key is the same name as operand.
|
192
195
|
query = @value.compile(encode: false, includeClassName: true)
|
193
196
|
else
|
194
|
-
raise "Invalid `:select` query constraint. It should follow the format: :field.select => { key: 'key', query: '<Parse::Query>' }"
|
197
|
+
raise ParseConstraintError, "Invalid `:select` query constraint. It should follow the format: :field.select => { key: 'key', query: '<Parse::Query>' }"
|
195
198
|
end
|
196
199
|
{ @operation.operand => { :$select => { key: remote_field_name, query: query } } }
|
197
200
|
end
|
data/lib/parse/query/ordering.rb
CHANGED
data/lib/parse/query.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
1
4
|
require_relative "client"
|
2
5
|
require_relative "query/operation"
|
3
6
|
require_relative "query/constraints"
|
4
7
|
require_relative "query/ordering"
|
8
|
+
require 'active_model'
|
5
9
|
require 'active_model_serializers'
|
6
10
|
require 'active_support'
|
7
11
|
require 'active_support/inflector'
|
@@ -20,7 +24,10 @@ module Parse
|
|
20
24
|
# constraints - as Parse::Constraint
|
21
25
|
|
22
26
|
class Query
|
27
|
+
extend ::ActiveModel::Callbacks
|
23
28
|
include Parse::Client::Connectable
|
29
|
+
include Enumerable
|
30
|
+
define_model_callbacks :prepare, only: [:after, :before]
|
24
31
|
# A query needs to be tied to a Parse table name (Parse class)
|
25
32
|
# The client object is of type Parse::Client in order to send query requests.
|
26
33
|
# You can modify the default client being used by all Parse::Query objects by setting
|
@@ -87,7 +94,9 @@ module Parse
|
|
87
94
|
end
|
88
95
|
|
89
96
|
def initialize(table, constraints = {})
|
90
|
-
|
97
|
+
table = table.to_s.to_parse_class if table.is_a?(Symbol)
|
98
|
+
table = table.parse_class if table.respond_to?(:parse_class)
|
99
|
+
raise ArgumentError, "First parameter should be the name of the Parse class (table)" unless table.is_a?(String)
|
91
100
|
@count = 0 #non-zero/1 implies a count query request
|
92
101
|
@where = []
|
93
102
|
@order = []
|
@@ -122,13 +131,14 @@ module Parse
|
|
122
131
|
self.use_master_key = value
|
123
132
|
elsif expression == :session
|
124
133
|
# you can pass a session token or a Parse::Session
|
125
|
-
value = value.
|
134
|
+
value = value.respond_to?(:session_token) ? value.session_token : value
|
126
135
|
self.session_token = value
|
127
136
|
else
|
128
137
|
add_constraint(expression, value)
|
129
138
|
end
|
130
139
|
end # each
|
131
|
-
|
140
|
+
self #chaining
|
141
|
+
end; alias_method :query, :conditions
|
132
142
|
|
133
143
|
def table=(t)
|
134
144
|
@table = t.to_s.camelize
|
@@ -186,9 +196,9 @@ module Parse
|
|
186
196
|
end
|
187
197
|
|
188
198
|
def related_to(field, pointer)
|
189
|
-
raise "Object value must be a Parse::Pointer type" unless pointer.is_a?(Parse::Pointer)
|
199
|
+
raise ArgumentError, "Object value must be a Parse::Pointer type" unless pointer.is_a?(Parse::Pointer)
|
190
200
|
add_constraint field.to_sym.related_to, pointer
|
191
|
-
self
|
201
|
+
self #chaining
|
192
202
|
end
|
193
203
|
|
194
204
|
def includes(*fields)
|
@@ -204,9 +214,18 @@ module Parse
|
|
204
214
|
end
|
205
215
|
alias_method :include, :includes
|
206
216
|
|
207
|
-
def
|
217
|
+
def add_constraints(list)
|
218
|
+
list = Array.wrap(list).select { |m| m.is_a?(Parse::Constraint) }
|
219
|
+
@where = @where + list
|
220
|
+
self
|
221
|
+
end
|
222
|
+
|
223
|
+
def add_constraint(operator, value = nil, **opts)
|
208
224
|
@where ||= []
|
209
|
-
constraint = Parse::Constraint
|
225
|
+
constraint = operator # assume Parse::Constraint
|
226
|
+
unless constraint.is_a?(Parse::Constraint)
|
227
|
+
constraint = Parse::Constraint.create(operator, value)
|
228
|
+
end
|
210
229
|
return unless constraint.is_a?(Parse::Constraint)
|
211
230
|
# to support select queries where you have to pass a `key` parameter for matching
|
212
231
|
# different tables.
|
@@ -222,7 +241,10 @@ module Parse
|
|
222
241
|
@results = nil
|
223
242
|
self #chaining
|
224
243
|
end
|
225
|
-
|
244
|
+
|
245
|
+
def constraints
|
246
|
+
@where
|
247
|
+
end
|
226
248
|
|
227
249
|
def where(conditions = nil, opts = {})
|
228
250
|
return @where if conditions.nil?
|
@@ -231,7 +253,7 @@ module Parse
|
|
231
253
|
add_constraint(operator, value, opts)
|
232
254
|
end
|
233
255
|
end
|
234
|
-
self
|
256
|
+
self #chaining
|
235
257
|
end
|
236
258
|
|
237
259
|
def or_where(where_clauses = [])
|
@@ -256,17 +278,16 @@ module Parse
|
|
256
278
|
end
|
257
279
|
|
258
280
|
def |(other_query)
|
259
|
-
raise "Parse queries must be of the same class #{@table}." unless @table == other_query.table
|
281
|
+
raise ArgumentError, "Parse queries must be of the same class #{@table}." unless @table == other_query.table
|
260
282
|
copy_query = self.clone
|
261
283
|
copy_query.or_where other_query.where
|
262
284
|
copy_query
|
263
285
|
end
|
264
286
|
|
265
287
|
def count
|
266
|
-
@results = nil
|
267
288
|
old_value = @count
|
268
289
|
@count = 1
|
269
|
-
res = client.find_objects(@table, compile.as_json ).count
|
290
|
+
res = client.find_objects(@table, compile.as_json, _opts ).count
|
270
291
|
@count = old_value
|
271
292
|
res
|
272
293
|
end
|
@@ -276,8 +297,27 @@ module Parse
|
|
276
297
|
results.each(&Proc.new)
|
277
298
|
end
|
278
299
|
|
300
|
+
def map
|
301
|
+
return results.enum_for(:map) unless block_given? # Sparkling magic!
|
302
|
+
results.map(&Proc.new)
|
303
|
+
end
|
304
|
+
|
305
|
+
def select
|
306
|
+
return results.enum_for(:select) unless block_given? # Sparkling magic!
|
307
|
+
results.select(&Proc.new)
|
308
|
+
end
|
309
|
+
|
310
|
+
def to_a
|
311
|
+
results.to_a
|
312
|
+
end
|
313
|
+
|
314
|
+
def select
|
315
|
+
return results.enum_for(:select) unless block_given? # Sparkling magic!
|
316
|
+
results.select(&Proc.new)
|
317
|
+
end
|
318
|
+
|
279
319
|
def first(limit = 1)
|
280
|
-
@results = nil
|
320
|
+
@results = nil if @limit != limit
|
281
321
|
@limit = limit
|
282
322
|
limit == 1 ? results.first : results.first(limit)
|
283
323
|
end
|
@@ -313,22 +353,27 @@ module Parse
|
|
313
353
|
results
|
314
354
|
end
|
315
355
|
|
316
|
-
def
|
356
|
+
def _opts
|
317
357
|
opts = {}
|
318
358
|
opts[:cache] = self.cache || false
|
319
359
|
opts[:use_master_key] = self.use_master_key
|
320
360
|
opts[:session_token] = self.session_token
|
321
361
|
# for now, don't cache requests where we disable master_key or provide session token
|
322
|
-
if opts[:use_master_key] == false || opts[:session_token].present?
|
323
|
-
|
324
|
-
end
|
362
|
+
# if opts[:use_master_key] == false || opts[:session_token].present?
|
363
|
+
# opts[:cache] = false
|
364
|
+
# end
|
365
|
+
opts
|
366
|
+
end
|
367
|
+
|
368
|
+
def fetch!(compiled_query)
|
325
369
|
|
326
|
-
response = client.find_objects(@table, compiled_query.as_json,
|
370
|
+
response = client.find_objects(@table, compiled_query.as_json, _opts )
|
327
371
|
if response.error?
|
328
372
|
puts "[ParseQuery] #{response.error}"
|
329
373
|
end
|
330
374
|
response
|
331
375
|
end
|
376
|
+
alias_method :execute!, :fetch!
|
332
377
|
|
333
378
|
def results(raw: false)
|
334
379
|
if @results.nil?
|
@@ -361,28 +406,30 @@ module Parse
|
|
361
406
|
end
|
362
407
|
|
363
408
|
def compile(encode: true, includeClassName: false)
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
409
|
+
run_callbacks :prepare do
|
410
|
+
q = {} #query
|
411
|
+
q[:limit] = 11_000 if @limit == :max || @limit == :all
|
412
|
+
q[:limit] = @limit if @limit.is_a?(Numeric) && @limit > 0
|
413
|
+
q[:skip] = @skip if @skip > 0
|
414
|
+
|
415
|
+
q[:include] = @includes.join(',') unless @includes.empty?
|
416
|
+
q[:keys] = @keys.join(',') unless @keys.empty?
|
417
|
+
q[:order] = @order.join(',') unless @order.empty?
|
418
|
+
unless @where.empty?
|
419
|
+
q[:where] = Parse::Query.compile_where(@where)
|
420
|
+
q[:where] = q[:where].to_json if encode
|
421
|
+
end
|
376
422
|
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
423
|
+
if @count && @count > 0
|
424
|
+
# if count is requested
|
425
|
+
q[:limit] = 0
|
426
|
+
q[:count] = 1
|
427
|
+
end
|
428
|
+
if includeClassName
|
429
|
+
q[:className] = @table
|
430
|
+
end
|
431
|
+
q
|
384
432
|
end
|
385
|
-
q
|
386
433
|
end
|
387
434
|
|
388
435
|
def compile_where
|
data/lib/parse/stack/railtie.rb
CHANGED
data/lib/parse/stack/tasks.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
1
4
|
require_relative '../stack.rb'
|
2
5
|
require 'active_support'
|
3
6
|
require 'active_support/inflector'
|
@@ -44,7 +47,7 @@ module Parse
|
|
44
47
|
|
45
48
|
task :verify_env => :env do
|
46
49
|
|
47
|
-
unless Parse::Client.
|
50
|
+
unless Parse::Client.client?
|
48
51
|
raise "Please make sure you have setup the Parse.setup configuration before invoking task. Usually done in the :environment task."
|
49
52
|
end
|
50
53
|
|
data/lib/parse/stack/version.rb
CHANGED
data/lib/parse/stack.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
1
4
|
require 'active_model'
|
2
5
|
require 'active_support'
|
3
6
|
require 'active_support/inflector'
|
@@ -9,6 +12,11 @@ require 'active_model_serializers'
|
|
9
12
|
module Parse
|
10
13
|
|
11
14
|
class Payload
|
15
|
+
ATTRIBUTES = { master: nil, user: nil,
|
16
|
+
installationId: nil, params: nil,
|
17
|
+
functionName: nil, object: nil,
|
18
|
+
original: nil, update: nil,
|
19
|
+
triggerName: nil }.freeze
|
12
20
|
include ::ActiveModel::Serializers::JSON
|
13
21
|
attr_accessor :master, :user, :installation_id, :params, :function_name, :object, :trigger_name
|
14
22
|
|
@@ -32,18 +40,22 @@ module Parse
|
|
32
40
|
@update = hash[:update] || {} #it comes as an update hash
|
33
41
|
end
|
34
42
|
|
43
|
+
def attributes
|
44
|
+
ATTRIBUTES
|
45
|
+
end
|
46
|
+
|
35
47
|
def function?
|
36
48
|
@function_name.present?
|
37
49
|
end
|
38
50
|
|
39
51
|
def parse_class
|
40
52
|
return nil unless @object.present?
|
41
|
-
@object[
|
53
|
+
@object[Parse::Model::KEY_CLASS_NAME] || @object[:className]
|
42
54
|
end
|
43
55
|
|
44
56
|
def parse_id
|
45
57
|
return nil unless @object.present?
|
46
|
-
@object[
|
58
|
+
@object[Parse::Model::OBJECT_ID] || @object[:objectId]
|
47
59
|
end; alias_method :objectId, :parse_id
|
48
60
|
|
49
61
|
def trigger?
|
@@ -117,12 +129,6 @@ module Parse
|
|
117
129
|
Parse::Object.build(@object)
|
118
130
|
end
|
119
131
|
|
120
|
-
|
121
|
-
def attributes
|
122
|
-
{ master: nil, user: nil, installationId: nil, params: nil,
|
123
|
-
functionName: nil, object: nil, original: nil, update: nil, triggerName: nil }.freeze
|
124
|
-
end
|
125
|
-
|
126
132
|
end # Payload
|
127
133
|
|
128
134
|
end
|