parse-stack 1.8.0 → 1.8.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.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.solargraph.yml +23 -0
  3. data/.travis.yml +0 -1
  4. data/Gemfile +13 -12
  5. data/Gemfile.lock +88 -51
  6. data/README.md +2 -4
  7. data/Rakefile +14 -14
  8. data/lib/parse/api/aggregate.rb +4 -7
  9. data/lib/parse/api/all.rb +1 -1
  10. data/lib/parse/api/analytics.rb +0 -3
  11. data/lib/parse/api/batch.rb +3 -5
  12. data/lib/parse/api/cloud_functions.rb +0 -3
  13. data/lib/parse/api/config.rb +0 -4
  14. data/lib/parse/api/files.rb +3 -7
  15. data/lib/parse/api/hooks.rb +4 -8
  16. data/lib/parse/api/objects.rb +7 -12
  17. data/lib/parse/api/push.rb +0 -4
  18. data/lib/parse/api/schema.rb +2 -6
  19. data/lib/parse/api/server.rb +4 -7
  20. data/lib/parse/api/sessions.rb +2 -5
  21. data/lib/parse/api/users.rb +9 -14
  22. data/lib/parse/client.rb +54 -50
  23. data/lib/parse/client/authentication.rb +29 -33
  24. data/lib/parse/client/batch.rb +8 -11
  25. data/lib/parse/client/body_builder.rb +19 -20
  26. data/lib/parse/client/caching.rb +23 -28
  27. data/lib/parse/client/protocol.rb +11 -12
  28. data/lib/parse/client/request.rb +4 -6
  29. data/lib/parse/client/response.rb +5 -7
  30. data/lib/parse/model/acl.rb +14 -12
  31. data/lib/parse/model/associations/belongs_to.rb +14 -21
  32. data/lib/parse/model/associations/collection_proxy.rb +328 -329
  33. data/lib/parse/model/associations/has_many.rb +18 -25
  34. data/lib/parse/model/associations/has_one.rb +6 -11
  35. data/lib/parse/model/associations/pointer_collection_proxy.rb +5 -8
  36. data/lib/parse/model/associations/relation_collection_proxy.rb +5 -9
  37. data/lib/parse/model/bytes.rb +8 -10
  38. data/lib/parse/model/classes/installation.rb +2 -4
  39. data/lib/parse/model/classes/product.rb +2 -5
  40. data/lib/parse/model/classes/role.rb +3 -5
  41. data/lib/parse/model/classes/session.rb +2 -5
  42. data/lib/parse/model/classes/user.rb +20 -16
  43. data/lib/parse/model/core/actions.rb +31 -46
  44. data/lib/parse/model/core/builder.rb +6 -6
  45. data/lib/parse/model/core/errors.rb +0 -1
  46. data/lib/parse/model/core/fetching.rb +45 -50
  47. data/lib/parse/model/core/properties.rb +51 -66
  48. data/lib/parse/model/core/querying.rb +291 -294
  49. data/lib/parse/model/core/schema.rb +89 -92
  50. data/lib/parse/model/date.rb +16 -17
  51. data/lib/parse/model/file.rb +171 -174
  52. data/lib/parse/model/geopoint.rb +12 -16
  53. data/lib/parse/model/model.rb +31 -37
  54. data/lib/parse/model/object.rb +47 -53
  55. data/lib/parse/model/pointer.rb +177 -176
  56. data/lib/parse/model/push.rb +8 -10
  57. data/lib/parse/model/shortnames.rb +1 -2
  58. data/lib/parse/model/time_zone.rb +3 -5
  59. data/lib/parse/query.rb +34 -35
  60. data/lib/parse/query/constraint.rb +4 -6
  61. data/lib/parse/query/constraints.rb +21 -29
  62. data/lib/parse/query/operation.rb +8 -11
  63. data/lib/parse/query/ordering.rb +45 -49
  64. data/lib/parse/stack.rb +11 -12
  65. data/lib/parse/stack/generators/rails.rb +28 -30
  66. data/lib/parse/stack/generators/templates/model.erb +5 -6
  67. data/lib/parse/stack/generators/templates/model_installation.rb +0 -1
  68. data/lib/parse/stack/generators/templates/model_role.rb +0 -1
  69. data/lib/parse/stack/generators/templates/model_session.rb +0 -1
  70. data/lib/parse/stack/generators/templates/model_user.rb +0 -1
  71. data/lib/parse/stack/generators/templates/parse.rb +9 -9
  72. data/lib/parse/stack/generators/templates/webhooks.rb +1 -2
  73. data/lib/parse/stack/railtie.rb +2 -4
  74. data/lib/parse/stack/tasks.rb +70 -86
  75. data/lib/parse/stack/version.rb +1 -1
  76. data/lib/parse/webhooks.rb +19 -26
  77. data/lib/parse/webhooks/payload.rb +26 -28
  78. data/lib/parse/webhooks/registration.rb +23 -31
  79. data/parse-stack.gemspec +25 -25
  80. data/parse-stack.png +0 -0
  81. metadata +13 -7
  82. data/.github/parse-ruby-sdk.png +0 -0
@@ -1,13 +1,12 @@
1
1
  # encoding: UTF-8
2
2
  # frozen_string_literal: true
3
3
 
4
- require_relative '../pointer'
5
- require_relative 'collection_proxy'
6
- require_relative 'pointer_collection_proxy'
7
- require_relative 'relation_collection_proxy'
4
+ require_relative "../pointer"
5
+ require_relative "collection_proxy"
6
+ require_relative "pointer_collection_proxy"
7
+ require_relative "relation_collection_proxy"
8
8
 
9
9
  module Parse
10
-
11
10
  module Associations
12
11
 
13
12
  # Parse has many ways to implement one-to-many and many-to-many
@@ -325,9 +324,11 @@ module Parse
325
324
  # @!visibility private
326
325
  module ClassMethods
327
326
  attr_accessor :relations
327
+
328
328
  def relations
329
329
  @relations ||= {}
330
330
  end
331
+
331
332
  # Examples:
332
333
  # has_many :fans, as: :users, through: :relation, field: "awesomeFans"
333
334
  # has_many :songs
@@ -353,7 +354,7 @@ module Parse
353
354
  # the remote class is either key or as.
354
355
  opts[:scope_only] ||= false
355
356
  klassName = (opts[:as] || key).to_parse_class singularize: true
356
- foreign_field = (opts[:field] || parse_class.columnize ).to_sym
357
+ foreign_field = (opts[:field] || parse_class.columnize).to_sym
357
358
 
358
359
  define_method(key) do |*args, &block|
359
360
  return [] if @id.nil?
@@ -372,7 +373,7 @@ module Parse
372
373
  query.instance_exec(&scope)
373
374
  query.conditions(*args) if args.present?
374
375
  else
375
- query.instance_exec(*args,&scope)
376
+ query.instance_exec(*args, &scope)
376
377
  end
377
378
  instance = nil # help clean up ruby gc
378
379
  elsif args.present?
@@ -383,11 +384,10 @@ module Parse
383
384
  klass = Parse::Model.find_class klassName
384
385
 
385
386
  if klass.present? && klass.respond_to?(m)
386
-
387
387
  klass_scope = klass.send(m, *args) # blocks only passed to final result set
388
388
  return klass_scope unless klass_scope.is_a?(Parse::Query)
389
389
  # merge constraints
390
- add_constraints( klass_scope.constraints )
390
+ add_constraints(klass_scope.constraints)
391
391
  # if a block was passed, execute the query, otherwise return the query
392
392
  return chained_block.present? ? results(&chained_block) : self
393
393
  end
@@ -399,7 +399,6 @@ module Parse
399
399
  return query if block.nil?
400
400
  query.results(&block)
401
401
  end
402
-
403
402
  end
404
403
 
405
404
  # Define a one-to-many or many-to-many association between the local model and a foreign class.
@@ -412,9 +411,10 @@ module Parse
412
411
 
413
412
  # below this is the same
414
413
  opts.reverse_merge!({
415
- field: key.to_s.camelize(:lower),
416
- required: false,
417
- as: key})
414
+ field: key.to_s.camelize(:lower),
415
+ required: false,
416
+ as: key,
417
+ })
418
418
 
419
419
  klassName = opts[:as].to_parse_class singularize: true
420
420
  parse_field = opts[:field].to_sym # name of the column (local or remote)
@@ -446,12 +446,12 @@ module Parse
446
446
  proxyKlass = Parse::RelationCollectionProxy
447
447
  self.relations[key] = klassName
448
448
  else
449
- self.attributes.merge!( parse_field => :array )
449
+ self.attributes.merge!(parse_field => :array)
450
450
  # Add them to the list of fields in our class model
451
- self.fields.merge!( key => :array, parse_field => :array )
451
+ self.fields.merge!(key => :array, parse_field => :array)
452
452
  end
453
453
 
454
- self.field_map.merge!( key => parse_field )
454
+ self.field_map.merge!(key => parse_field)
455
455
  # dirty tracking
456
456
  define_attribute_methods key
457
457
 
@@ -476,7 +476,7 @@ module Parse
476
476
 
477
477
  # proxy setter that forwards with dirty tracking
478
478
  define_method("#{key}=") do |val|
479
- send set_attribute_method, val, true
479
+ send set_attribute_method, val, true
480
480
  end
481
481
 
482
482
  # This will set the content of the proxy.
@@ -510,7 +510,7 @@ module Parse
510
510
 
511
511
  # send dirty tracking if set
512
512
  if track == true
513
- send will_change_method unless val == instance_variable_get( ivar )
513
+ send will_change_method unless val == instance_variable_get(ivar)
514
514
  end
515
515
  # TODO: Only allow empty proxy collection class as a value or nil.
516
516
  if val.is_a?(Parse::CollectionProxy)
@@ -518,7 +518,6 @@ module Parse
518
518
  else
519
519
  warn "[#{self.class}] Invalid value #{val} for :has_many field #{key}. Should be an Array or a CollectionProxy"
520
520
  end
521
-
522
521
  end
523
522
 
524
523
  data_type = opts[:through]
@@ -535,7 +534,6 @@ module Parse
535
534
  q = self.send :"#{key}_relation_query"
536
535
  q.results || []
537
536
  end
538
-
539
537
  end
540
538
 
541
539
  # if the remote field name and the local field name are the same
@@ -549,8 +547,6 @@ module Parse
549
547
  elsif parse_field.to_sym != :objectId
550
548
  warn "Alias has_many method #{self}##{parse_field} already defined."
551
549
  end
552
-
553
-
554
550
  end # has_many_array
555
551
  end #ClassMethods
556
552
 
@@ -578,9 +574,6 @@ module Parse
578
574
  def relation_changes?
579
575
  changed.any? { |key| relations[key.to_sym] }
580
576
  end
581
-
582
577
  end # HasMany
583
578
  end #Associations
584
-
585
-
586
579
  end # Parse
@@ -1,10 +1,10 @@
1
1
  # encoding: UTF-8
2
2
  # frozen_string_literal: true
3
3
 
4
- require_relative '../pointer'
5
- require_relative 'collection_proxy'
6
- require_relative 'pointer_collection_proxy'
7
- require_relative 'relation_collection_proxy'
4
+ require_relative "../pointer"
5
+ require_relative "collection_proxy"
6
+ require_relative "pointer_collection_proxy"
7
+ require_relative "relation_collection_proxy"
8
8
 
9
9
  module Parse
10
10
  module Associations
@@ -115,8 +115,7 @@ module Parse
115
115
 
116
116
  # has one are not property but instance scope methods
117
117
  def has_one(key, scope = nil, **opts)
118
-
119
- opts.reverse_merge!({as: key, field: parse_class.columnize, scope_only: false})
118
+ opts.reverse_merge!({ as: key, field: parse_class.columnize, scope_only: false })
120
119
  klassName = opts[:as].to_parse_class
121
120
  foreign_field = opts[:field].to_sym
122
121
  ivar = :"@_has_one_#{key}"
@@ -140,7 +139,7 @@ module Parse
140
139
  query.instance_exec(&scope)
141
140
  query.conditions(*args) if args.present?
142
141
  else
143
- query.instance_exec(*args,&scope)
142
+ query.instance_exec(*args, &scope)
144
143
  end
145
144
  instance = nil # help clean up ruby gc
146
145
  elsif args.present?
@@ -152,12 +151,8 @@ module Parse
152
151
  return query.first if block.nil?
153
152
  block.call(query.first)
154
153
  end
155
-
156
154
  end
157
-
158
155
  end
159
-
160
156
  end
161
-
162
157
  end
163
158
  end
@@ -1,12 +1,11 @@
1
1
  # encoding: UTF-8
2
2
  # frozen_string_literal: true
3
3
 
4
- require 'active_model'
5
- require 'active_support'
6
- require 'active_support/inflector'
7
- require 'active_support/core_ext/object'
8
- require_relative 'collection_proxy'
9
-
4
+ require "active_model"
5
+ require "active_support"
6
+ require "active_support/inflector"
7
+ require "active_support/core_ext/object"
8
+ require_relative "collection_proxy"
10
9
 
11
10
  module Parse
12
11
  # A PointerCollectionProxy is a collection proxy that only allows Parse Pointers (Objects)
@@ -101,7 +100,5 @@ module Parse
101
100
  def as_json(opts = nil)
102
101
  parse_pointers.as_json(opts)
103
102
  end
104
-
105
103
  end
106
-
107
104
  end
@@ -1,10 +1,10 @@
1
1
  # encoding: UTF-8
2
2
  # frozen_string_literal: true
3
3
 
4
- require 'active_support'
5
- require 'active_support/inflector'
6
- require 'active_support/core_ext/object'
7
- require_relative 'pointer_collection_proxy'
4
+ require "active_support"
5
+ require "active_support/inflector"
6
+ require "active_support/core_ext/object"
7
+ require_relative "pointer_collection_proxy"
8
8
 
9
9
  module Parse
10
10
  # The RelationCollectionProxy is similar to a PointerCollectionProxy except that
@@ -36,7 +36,6 @@ module Parse
36
36
  # clearing out the change information for the collection if saved successfully.
37
37
  # @see PointerCollectionProxy
38
38
  class RelationCollectionProxy < PointerCollectionProxy
39
-
40
39
  define_attribute_methods :additions, :removals
41
40
  # @!attribute [r] removals
42
41
  # The objects that have been newly removed to this collection
@@ -55,7 +54,7 @@ module Parse
55
54
  # You can get items within the collection relation filtered by a specific set
56
55
  # of query constraints.
57
56
  def all(constraints = {})
58
- q = query( {limit: :max}.merge(constraints) )
57
+ q = query({ limit: :max }.merge(constraints))
59
58
  if block_given?
60
59
  # if we have a query, then use the Proc with it (more efficient)
61
60
  return q.present? ? q.results(&Proc.new) : collection.each(&Proc.new)
@@ -69,7 +68,6 @@ module Parse
69
68
  q = forward :"#{@key}_relation_query"
70
69
  end
71
70
 
72
-
73
71
  # Add Parse::Objects to the relation.
74
72
  # @overload add(parse_object)
75
73
  # Add a Parse::Object or Parse::Pointer to this relation.
@@ -157,7 +155,5 @@ module Parse
157
155
  list.each { |d| add(d) }
158
156
  @collection
159
157
  end
160
-
161
158
  end
162
-
163
159
  end
@@ -1,24 +1,24 @@
1
1
  # encoding: UTF-8
2
2
  # frozen_string_literal: true
3
3
 
4
- require 'active_support'
5
- require 'active_support/core_ext/object'
4
+ require "active_support"
5
+ require "active_support/core_ext/object"
6
6
  require_relative "model"
7
- require 'base64'
8
-
7
+ require "base64"
9
8
 
10
9
  module Parse
11
10
 
12
11
  # Support for the Bytes type in Parse
13
12
  class Bytes < Model
14
13
  # The default attributes in a Parse Bytes hash.
15
- ATTRIBUTES = {__type: :string, base64: :string }.freeze
14
+ ATTRIBUTES = { __type: :string, base64: :string }.freeze
16
15
  # @return [String] the base64 string representing the content
17
16
  attr_accessor :base64
18
17
  # @return [TYPE_BYTES]
19
- def self.parse_class; TYPE_BYTES; end;
18
+ def self.parse_class; TYPE_BYTES; end
20
19
  # @return [TYPE_BYTES]
21
- def parse_class; self.class.parse_class; end;
20
+ def parse_class; self.class.parse_class; end
21
+
22
22
  alias_method :__type, :parse_class
23
23
 
24
24
  # initialize with a base64 string or a Bytes object
@@ -47,7 +47,7 @@ module Parse
47
47
 
48
48
  def attributes=(a)
49
49
  if a.is_a?(String)
50
- @bytes = a
50
+ @bytes = a
51
51
  elsif a.is_a?(Hash)
52
52
  @bytes = a["base64"] || @bytes
53
53
  end
@@ -58,7 +58,5 @@ module Parse
58
58
  return false unless u.is_a?(self.class)
59
59
  @base64 == u.base64
60
60
  end
61
-
62
61
  end
63
-
64
62
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  # frozen_string_literal: true
3
- require_relative '../object'
3
+ require_relative "../object"
4
4
 
5
5
  module Parse
6
6
  # This class represents the data and columns contained in the standard Parse
@@ -36,7 +36,6 @@ module Parse
36
36
  # @see Push
37
37
  # @see Parse::Object
38
38
  class Installation < Parse::Object
39
-
40
39
  parse_class Parse::Model::CLASS_INSTALLATION
41
40
  # @!attribute gcm_sender_id
42
41
  # This field only has meaning for Android installations that use the GCM
@@ -126,7 +125,6 @@ module Parse
126
125
  # This is implemented as a has_one association to the Session class using the {installation_id}.
127
126
  # @version 1.7.1
128
127
  # @return [Parse::Session] The associated {Parse::Session} that might be tied to this installation
129
- has_one :session, ->{ where(installation_id: i.installation_id) }, scope_only: true
128
+ has_one :session, -> { where(installation_id: i.installation_id) }, scope_only: true
130
129
  end
131
-
132
130
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: UTF-8
2
2
  # frozen_string_literal: true
3
- require_relative '../object'
4
- require_relative 'user'
3
+ require_relative "../object"
4
+ require_relative "user"
5
5
 
6
6
  module Parse
7
7
  # This class represents the data and columns contained in the standard Parse `_Product` collection.
@@ -22,7 +22,6 @@ module Parse
22
22
  # end
23
23
  # @see Parse::Object
24
24
  class Product < Parse::Object
25
-
26
25
  parse_class Parse::Model::CLASS_PRODUCT
27
26
  # @!attribute download
28
27
  # @return [String] the file payload for this product download.
@@ -56,7 +55,5 @@ module Parse
56
55
  # The title for this product. This field is required by Parse.
57
56
  # @return [String] the title for this product.
58
57
  property :title, required: true
59
-
60
58
  end
61
-
62
59
  end
@@ -1,7 +1,8 @@
1
1
  # encoding: UTF-8
2
2
  # frozen_string_literal: true
3
- require_relative '../object'
4
- require_relative 'user'
3
+ require_relative "../object"
4
+ require_relative "user"
5
+
5
6
  module Parse
6
7
  # This class represents the data and columns contained in the standard Parse `_Role` collection.
7
8
  # Roles allow the an application to group a set of {Parse::User} records with the same set of
@@ -23,7 +24,6 @@ module Parse
23
24
  # end
24
25
  # @see Parse::Object
25
26
  class Role < Parse::Object
26
-
27
27
  parse_class Parse::Model::CLASS_ROLE
28
28
  # @!attribute name
29
29
  # @return [String] the name of this role.
@@ -37,7 +37,5 @@ module Parse
37
37
  # This attribute is mapped as a `has_many` Parse relation association with the {Parse::User} class.
38
38
  # @return [RelationCollectionProxy<User>] a Parse relation of users belonging to this role.
39
39
  has_many :users, through: :relation
40
-
41
40
  end
42
-
43
41
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  # frozen_string_literal: true
3
- require_relative '../object'
3
+ require_relative "../object"
4
4
 
5
5
  module Parse
6
6
  # This class represents the data and columns contained in the standard Parse
@@ -28,7 +28,6 @@ module Parse
28
28
  #
29
29
  # @see Parse::Object
30
30
  class Session < Parse::Object
31
-
32
31
  parse_class Parse::Model::CLASS_SESSION
33
32
 
34
33
  # @!attribute created_with
@@ -63,7 +62,7 @@ module Parse
63
62
  # in the {Parse::Installation} collection. This is implemented as a has_one scope.
64
63
  # @version 1.7.1
65
64
  # @return [Parse::Installation] The associated {Parse::Installation} tied to this session
66
- has_one :installation, ->{ where(installation_id: i.installation_id) }, scope_only: true
65
+ has_one :installation, -> { where(installation_id: i.installation_id) }, scope_only: true
67
66
 
68
67
  # Return the Session record for this session token.
69
68
  # @param token [String] the session token
@@ -75,7 +74,5 @@ module Parse
75
74
  end
76
75
  nil
77
76
  end
78
-
79
77
  end
80
-
81
78
  end
@@ -1,23 +1,30 @@
1
1
  # encoding: UTF-8
2
2
  # frozen_string_literal: true
3
3
 
4
- require_relative '../object'
4
+ require_relative "../object"
5
+
5
6
  module Parse
6
7
  class Error
7
8
  # 200 Error code indicating that the username is missing or empty.
8
- class UsernameMissingError < Error; end;
9
+ class UsernameMissingError < Error; end
10
+
9
11
  # 201 Error code indicating that the password is missing or empty.
10
- class PasswordMissingError < Error; end;
12
+ class PasswordMissingError < Error; end
13
+
11
14
  # Error code 202: indicating that the username has already been taken.
12
- class UsernameTakenError < Error; end;
15
+ class UsernameTakenError < Error; end
16
+
13
17
  # 203 Error code indicating that the email has already been taken.
14
- class EmailTakenError < Error; end;
18
+ class EmailTakenError < Error; end
19
+
15
20
  # 204 Error code indicating that the email is missing, but must be specified.
16
- class EmailMissing < Error; end;
21
+ class EmailMissing < Error; end
22
+
17
23
  # 205 Error code indicating that a user with the specified email was not found.
18
- class EmailNotFound < Error; end;
24
+ class EmailNotFound < Error; end
25
+
19
26
  # 125 Error code indicating that the email address was invalid.
20
- class InvalidEmailAddress < Error; end;
27
+ class InvalidEmailAddress < Error; end
21
28
  end
22
29
 
23
30
  # The main class representing the _User table in Parse. A user can either be signed up or anonymous.
@@ -137,7 +144,6 @@ module Parse
137
144
  #
138
145
  # @see Parse::Object
139
146
  class User < Parse::Object
140
-
141
147
  parse_class Parse::Model::CLASS_USER
142
148
  # @return [String] The session token if this user is logged in.
143
149
  attr_accessor :session_token
@@ -189,7 +195,7 @@ module Parse
189
195
  # @see #anonymous?
190
196
  # @return [String] The anonymous identifier for this anonymous user.
191
197
  def anonymous_id
192
- auth_data['anonymous']['id'] if auth_data.present? && auth_data["anonymous"].is_a?(Hash)
198
+ auth_data["anonymous"]["id"] if auth_data.present? && auth_data["anonymous"].is_a?(Hash)
193
199
  end
194
200
 
195
201
  # Adds the third-party authentication data to for a given service.
@@ -212,12 +218,12 @@ module Parse
212
218
  apply_attributes!(response.result)
213
219
  end
214
220
 
215
-
216
221
  # @!visibility private
217
222
  # So that apply_attributes! works with session_token for login
218
223
  def session_token_set_attribute!(token, track = false)
219
224
  @session_token = token.to_s
220
225
  end
226
+
221
227
  alias_method :sessionToken_set_attribute!, :session_token_set_attribute!
222
228
 
223
229
  # @return [Boolean] true if this user has a session token.
@@ -341,7 +347,7 @@ module Parse
341
347
  when Parse::Response::ERROR_EMAIL_TAKEN
342
348
  raise Parse::Error::EmailTakenError, response
343
349
  end
344
- raise Parse::Client::ResponseError, response
350
+ raise Parse::Client::ResponseError, response
345
351
  end
346
352
 
347
353
  # Automatically and implicitly signup a user if it did not already exists and
@@ -353,7 +359,7 @@ module Parse
353
359
  # @return [User] a logged in user, or nil.
354
360
  # @see User.create
355
361
  def self.autologin_service(service_name, auth_data, body: {})
356
- body = body.merge({authData: {service_name => auth_data} })
362
+ body = body.merge({ authData: { service_name => auth_data } })
357
363
  self.create(body)
358
364
  end
359
365
 
@@ -364,7 +370,7 @@ module Parse
364
370
  # This method will raise all the exceptions from the similar `create` method.
365
371
  # @see User.create
366
372
  def self.signup(username, password, email = nil, body: {})
367
- body = body.merge({username: username, password: password })
373
+ body = body.merge({ username: username, password: password })
368
374
  body[:email] = email if email.present?
369
375
  self.create(body)
370
376
  end
@@ -427,7 +433,5 @@ module Parse
427
433
  end
428
434
  @session_token
429
435
  end
430
-
431
436
  end
432
-
433
437
  end