parse-stack 1.2 → 1.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bf40f379f94d3898e1137ebea7234f26ac72ba83
4
- data.tar.gz: 465a943525167ee9d4f817d5b0591d2c930f4099
3
+ metadata.gz: 9f0d4895395a8d71c15ada27009a1176791a1604
4
+ data.tar.gz: c9bac3568ea1963c7972b4a32013a7d322324681
5
5
  SHA512:
6
- metadata.gz: 69209f3b6b89af9f4f7f0f91f4848a76497359b47300b75d662261482deded101bff8b80f5ce230671c2459da2789a9af7e7473af54d8efd7ff6bd7dfc8b1a15
7
- data.tar.gz: cfca41f8ff74a8f4b3df8374d3e0de9ef47ee4ff25cd39df288f6f33dc8a01e6946b6d78580b09d74b5771d79e14e8a258a48c5e51ad7c7c7e22a5960ac0b68f
6
+ metadata.gz: 0256eee4e1a40e2f3ad3eb6918a4875d4bd1fe2a3a034e4bbbe0e1bd16bebeb465a886859c490a267b7298e64492c164c4fa2c0f3a67be4c8ec599d4e5c47b7e
7
+ data.tar.gz: d8ac611c347806df930d7a1a5ba75530dc94268d5425ef970aba6db5efc7df2c57026c13f0356b5ebdc5388edabea90a64a785359982a5a0ee2186697c3643e4
data/Changes.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Parse-Stack Changes
2
2
 
3
+ 1.2.1
4
+ -----------
5
+ - Add active support string dependencies.
6
+ - Support for handling the `Delete` operation on belongs_to
7
+ and has_many relationships.
8
+ - Documentation changes for supported Parse atomic operations.
9
+
3
10
  1.2
4
11
  -----------
5
12
  - Fixes issues with first_or_create.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- parse-stack (1.2)
4
+ parse-stack (1.2.1)
5
5
  active_model_serializers (>= 0.9, < 1)
6
6
  activemodel (>= 4.2.1, < 5)
7
7
  activesupport (>= 4.2.1, < 5)
@@ -14,8 +14,24 @@ PATH
14
14
  GEM
15
15
  remote: https://rubygems.org/
16
16
  specs:
17
- active_model_serializers (0.9.5)
18
- activemodel (>= 3.2)
17
+ actionpack (4.2.6)
18
+ actionview (= 4.2.6)
19
+ activesupport (= 4.2.6)
20
+ rack (~> 1.6)
21
+ rack-test (~> 0.6.2)
22
+ rails-dom-testing (~> 1.0, >= 1.0.5)
23
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
24
+ actionview (4.2.6)
25
+ activesupport (= 4.2.6)
26
+ builder (~> 3.1)
27
+ erubis (~> 2.7.0)
28
+ rails-dom-testing (~> 1.0, >= 1.0.5)
29
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
30
+ active_model_serializers (0.10.1)
31
+ actionpack (>= 4.1, < 6)
32
+ activemodel (>= 4.1, < 6)
33
+ jsonapi (~> 0.1.1.beta2)
34
+ railties (>= 4.1, < 6)
19
35
  activemodel (4.2.6)
20
36
  activesupport (= 4.2.6)
21
37
  builder (~> 3.1)
@@ -31,17 +47,27 @@ GEM
31
47
  coderay (1.1.1)
32
48
  debug_inspector (0.0.2)
33
49
  dotenv (2.1.1)
50
+ erubis (2.7.0)
34
51
  faraday (0.9.2)
35
52
  multipart-post (>= 1.2, < 3)
36
53
  faraday_middleware (0.10.0)
37
54
  faraday (>= 0.7.4, < 0.10)
38
55
  i18n (0.7.0)
39
56
  json (1.8.3)
57
+ jsonapi (0.1.1.beta2)
58
+ json (~> 1.8)
59
+ loofah (2.0.3)
60
+ nokogiri (>= 1.5.9)
40
61
  method_source (0.8.2)
41
- minitest (5.8.4)
62
+ mini_portile2 (2.1.0)
63
+ minitest (5.9.0)
42
64
  moneta (0.8.0)
43
65
  multipart-post (2.0.0)
44
- parallel (1.8.0)
66
+ nokogiri (1.6.8)
67
+ mini_portile2 (~> 2.1.0)
68
+ pkg-config (~> 1.1.7)
69
+ parallel (1.9.0)
70
+ pkg-config (1.1.7)
45
71
  pry (0.10.3)
46
72
  coderay (~> 1.1.0)
47
73
  method_source (~> 0.8.1)
@@ -52,8 +78,24 @@ GEM
52
78
  binding_of_caller (>= 0.7)
53
79
  pry (>= 0.9.11)
54
80
  rack (1.6.4)
81
+ rack-test (0.6.3)
82
+ rack (>= 1.0)
83
+ rails-deprecated_sanitizer (1.0.3)
84
+ activesupport (>= 4.2.0.alpha)
85
+ rails-dom-testing (1.0.7)
86
+ activesupport (>= 4.2.0.beta, < 5.0)
87
+ nokogiri (~> 1.6.0)
88
+ rails-deprecated_sanitizer (>= 1.0.1)
89
+ rails-html-sanitizer (1.0.3)
90
+ loofah (~> 2.0)
91
+ railties (4.2.6)
92
+ actionpack (= 4.2.6)
93
+ activesupport (= 4.2.6)
94
+ rake (>= 0.8.7)
95
+ thor (>= 0.18.1, < 2.0)
55
96
  rake (10.5.0)
56
97
  slop (3.6.0)
98
+ thor (0.19.1)
57
99
  thread_safe (0.3.5)
58
100
  tzinfo (1.2.2)
59
101
  thread_safe (~> 0.1)
data/README.md CHANGED
@@ -301,12 +301,11 @@ class Post < Parse::Object
301
301
  # maybe a count of comments.
302
302
  property :comment_count, :integer, default: 0
303
303
 
304
- # the published date. Maps to "publishDate"
305
- property :publish_date, :date, default: ->{ DateTime.now }
306
-
307
304
  # use lambda to access the instance object.
308
305
  # Set draft_date to the created_at date if empty.
309
306
  property :draft_date, :date, default: lambda { |x| x.created_at }
307
+ # the published date. Maps to "publishDate"
308
+ property :publish_date, :date, default: lambda { |x| DateTime.now }
310
309
 
311
310
  # maybe whether it is currently visible
312
311
  property :visible, :boolean
@@ -378,7 +377,7 @@ class SomeClass < Parse::Object
378
377
  # default value
379
378
  property :category, default: "myValue"
380
379
  # default value Proc style
381
- property :date, default: ->{ DateTime.now }
380
+ property :date, default: lambda { |x| DateTime.now }
382
381
  end
383
382
  ```
384
383
  ###### `:alias => (true|false)`
@@ -486,8 +485,9 @@ class Band < Parse::Object
486
485
  property :category, :integer, default: 1
487
486
  # assume any band as < 100 members
488
487
  has_many :artists # assumes `through: :array`
489
- # bands can have millions of fans, we use relations instead
490
- has_many :fans, through: :relation 
488
+ # bands can have millions of fans (Parse::User objects),
489
+ # we use relations instead
490
+ has_many :fans, as: :user, through: :relation 
491
491
  end
492
492
 
493
493
  # Find all bands which have a category in this array.
@@ -501,12 +501,41 @@ band = bands.first
501
501
  # the number of fans in the relation
502
502
  band.fans.count
503
503
 
504
+ # get the first object in relation
505
+ fan = bands.fans.first
506
+
507
+ # use `add` or `remove` to modify relations
508
+ band.fans.add Parse::User.first
509
+ # updates the relation as well as changes to `band`
510
+ band.fans.save
511
+
504
512
  # Find 50 fans who are near San Diego, CA
505
513
  downtown = Parse::GeoPoint.new(32.82, -117.23)
506
514
  fans = band.fans.all(:location.near => downtown, :limit => 50)
507
515
 
508
516
  ```
509
517
 
518
+ You can perform atomic additions and removals of objects from `has_many` relations. Parse allows this by providing a specific atomic operation request. You can use the methods below to perform these types of atomic operations. __Note: The operation is performed directly on Parse server and not on your local object.__
519
+
520
+ ```ruby
521
+
522
+ # atomically add/remove
523
+ band.artists.add! objects # { __op: :AddUnique }
524
+ band.artists.remove! objects # { __op: :AddUnique }
525
+
526
+ # atomically add unique Artist
527
+ band.artists.add_unique! objects # { __op: :AddUnique }
528
+
529
+ # atomically add/remove relations
530
+ band.fans.add! users # { __op: :Add }
531
+ band.fans.remove! users # { __op: :Remove }
532
+
533
+ # atomically perform a delete operation on this field name
534
+ # this should set it as `undefined`.
535
+ band.op_destroy!("category") # { __op: :Delete }
536
+
537
+ ```
538
+
510
539
  ##### Options
511
540
  Options for `has_many` are the same as the `belongs_to` counterpart with support for `:required`, `:as` and `:field`. It has this additional option of `:through` which helps specify whether it is an Array or Relation association type.
512
541
 
@@ -1156,9 +1185,14 @@ class Artist < Parse::Object
1156
1185
  artist = payload.parse_object # Artist
1157
1186
  # artist object will have dirty tracking information
1158
1187
 
1188
+ artist.new? # true if this is a new object
1189
+
1159
1190
  # default San Diego
1160
1191
  artist.location ||= Parse::GeoPoint.new(32.82, -117.23)
1161
1192
 
1193
+ # raise to fail the save
1194
+ raise "Name cannot be empty" if artist.name.blank?
1195
+
1162
1196
  if artist.name_changed?
1163
1197
  # .. do something if `name` has changed
1164
1198
  end
@@ -1,5 +1,6 @@
1
1
  require 'faraday'
2
2
  require 'faraday_middleware'
3
+ require 'active_support/core_ext/string'
3
4
  require_relative "client/request"
4
5
  require_relative "client/response"
5
6
  require_relative "client/body_builder"
@@ -86,12 +86,16 @@ module Parse
86
86
 
87
87
  # We only support pointers, either by object or by transforming a hash.
88
88
  define_method("#{key}_set_attribute!") do |val, track = true|
89
- if val.is_a?(Hash) && ( val["__type"].freeze == "Pointer".freeze || val["__type"].freeze == "Object".freeze )
89
+ if val == Parse::Properties::DELETE_OP
90
+ val = nil
91
+ elsif val.is_a?(Hash) && ( val["__type"].freeze == "Pointer".freeze || val["__type"].freeze == "Object".freeze )
90
92
  val = Parse::Object.build val, ( val["className"] || klassName )
91
93
  end
94
+
92
95
  if track == true
93
96
  send :"#{key}_will_change!" unless val == instance_variable_get( :"@#{key}" )
94
97
  end
98
+
95
99
  # Never set an object that is not a Parse::Pointer
96
100
  if val.nil? || val.is_a?(Parse::Pointer)
97
101
  instance_variable_set(:"@#{key}", val)
@@ -123,7 +123,12 @@ module Parse
123
123
  define_method("#{key}_set_attribute!") do |val, track = true|
124
124
  # If it is a hash, with a __type of Relation, createa a new RelationCollectionProxy, regardless
125
125
  # of what is defined because we must have gotten this from Parse.
126
- val = [] if val.nil?
126
+
127
+ # if val is nil or it is the delete operation, then set to empty array.
128
+ # this will create a new proxyKlass later on
129
+ if val.nil? || val == Parse::Properties::DELETE_OP
130
+ val = []
131
+ end
127
132
 
128
133
  if val.is_a?(Hash) && val["__type"] == "Relation"
129
134
  relation_objects = val["objects"] || []
@@ -30,6 +30,8 @@ module Parse
30
30
  # Default hash map of local attribute name to remote column name
31
31
  BASE_FIELD_MAP = {id: :objectId, created_at: :createdAt, updated_at: :updatedAt, acl: :ACL}.freeze
32
32
 
33
+ DELETE_OP = {"__op"=>"Delete"}.freeze
34
+
33
35
  def self.included(base)
34
36
  base.extend(ClassMethods)
35
37
  end
@@ -2,6 +2,7 @@ require 'active_model'
2
2
  require 'active_support'
3
3
  require 'active_support/inflector'
4
4
  require 'active_support/core_ext/object'
5
+ require 'active_support/core_ext/string'
5
6
  require 'active_model_serializers'
6
7
  require 'time'
7
8
  require 'open-uri'
@@ -1,5 +1,5 @@
1
1
  module Parse
2
2
  module Stack
3
- VERSION = "1.2"
3
+ VERSION = "1.2.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parse-stack
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.2'
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anthony Persaud
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-06-08 00:00:00.000000000 Z
12
+ date: 2016-06-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel