Parsistence 0.3.21 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d583354bffa09432ccd74e8ab9c49236a42f2003
4
+ data.tar.gz: 493b93622645fa135fd2871eba31ac21fd26005b
5
+ SHA512:
6
+ metadata.gz: 46f1f1af11f8e534e93902ac4c7fa3ef80ba34c39091f21928de39aeccca2ba614c07312c45a9bb28df3c9f8d98318d787e35004a18f71eb3557850997c32794
7
+ data.tar.gz: 77a550efaee075446f9d5c9bbe2d5032e32aee7e222bf55d618538b0cbfabd8b7e77368618ba21ed2843d193597bca7b562c220b580169db99996e3bcb570a39
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # About
2
2
 
3
- Parsistence provides an ActiveRecord/Persistence.js pattern to your Parse.com models on RubyMotion.
3
+ Parsistence provides an ActiveRecord/Persistence.js pattern to your Parse.com models on RubyMotion.
4
4
  It's an early fork from [ParseModel](https://github.com/adelevie/ParseModel) by
5
5
  Alan deLevie but goes a different direction with its implementation.
6
6
 
@@ -31,6 +31,19 @@ p.saveEventually
31
31
 
32
32
  `Parsistence::Model` objects will `respond_to?` to all methods available to [`PFObject`](https://parse.com/docs/ios/api/Classes/PFObject.html) in the Parse iOS SDK, as well as 'fields' getters and setters. You can also access the `PFObject` instance directly with, you guessed it, `Parsistence::Model#PFObject`.
33
33
 
34
+ If you pass in a PFObject instance, it'll use that:
35
+
36
+ ```ruby
37
+ p = Post.new(pf_post)
38
+ ```
39
+
40
+ If you pass in a hash, it'll set properties automatically:
41
+
42
+ ```ruby
43
+ p = Post.new(title: "Awesome")
44
+ p.title # => "Awesome"
45
+ ```
46
+
34
47
  ### Users
35
48
 
36
49
  ```ruby
@@ -215,4 +228,4 @@ To install the Parse iOS SDK in your RubyMotion project, read [this](http://www.
215
228
 
216
229
  ## License
217
230
 
218
- See LICENSE.txt
231
+ See LICENSE.txt
@@ -1,23 +1,28 @@
1
1
  module Parsistence
2
2
  module Model
3
3
  attr_accessor :PFObject, :errors
4
-
4
+
5
5
  RESERVED_KEYS = [:objectId]
6
6
 
7
7
  def initialize(pf=nil)
8
- if pf
8
+ if pf && !pf.is_a?(Hash)
9
+ pf = pf.to_object if pf.is_a?(Pointer)
9
10
  self.PFObject = pf
10
11
  else
11
12
  self.PFObject = PFObject.objectWithClassName(self.class.to_s)
12
13
  end
13
-
14
+ if pf.is_a?(Hash)
15
+ pf.each do |k, v|
16
+ self.send("#{k}=", v) if self.respond_to?("#{k}=")
17
+ end
18
+ end
14
19
  self
15
20
  end
16
-
21
+
17
22
  def method_missing(method, *args, &block)
18
23
  method = method.to_sym
19
24
  setter = false
20
-
25
+
21
26
  if setter?(method)
22
27
  setter = true
23
28
  method = method.split("=")[0].to_sym
@@ -55,7 +60,7 @@ module Parsistence
55
60
  end
56
61
 
57
62
  # Override of ruby's respond_to?
58
- #
63
+ #
59
64
  # @param [Symbol] method
60
65
  # @return [Bool] true/false
61
66
  def respond_to?(method)
@@ -68,7 +73,7 @@ module Parsistence
68
73
  return true if fields.include?(method) || relations.include?(method)
69
74
 
70
75
  super
71
- end
76
+ end
72
77
 
73
78
  def fields
74
79
  self.class.send(:get_fields)
@@ -126,12 +131,12 @@ module Parsistence
126
131
  elsif belongs_to.include?(field.to_sym)
127
132
  return setField(field, value)
128
133
  end
129
-
134
+
130
135
  raise "Parsistence Exception: Invalid relation name #{field} for object #{self.class.to_s}"
131
136
  end
132
137
 
133
138
  # Returns all of the attributes of the Model
134
- #
139
+ #
135
140
  # @return [Hash] attributes of Model
136
141
  def attributes
137
142
  attributes = {}
@@ -142,7 +147,7 @@ module Parsistence
142
147
  end
143
148
 
144
149
  # Sets the attributes of the Model
145
- #
150
+ #
146
151
  # @param [Hash] attrs to set on the Model
147
152
  # @return [Hash] that you gave it
148
153
  # @note will throw an error if a key is invalid
@@ -151,7 +156,7 @@ module Parsistence
151
156
  if v.respond_to?(:each) && !v.is_a?(PFObject)
152
157
  self.attributes = v
153
158
  elsif self.respond_to? "#{k}="
154
- self.send("#{k}=", v)
159
+ self.send("#{k}=", v)
155
160
  else
156
161
  setField(k, v) unless k.nil?
157
162
  end
@@ -163,7 +168,7 @@ module Parsistence
163
168
  # @note calls before/after_save hooks
164
169
  # @note before_save MUST return true, or save will not be called on PFObject
165
170
  # @note does not save if validations fail
166
- #
171
+ #
167
172
  # @return [Bool] true/false
168
173
  def save
169
174
  saved = false
@@ -232,10 +237,10 @@ module Parsistence
232
237
  @errors ||= {}
233
238
  if presenceValidations.include?(field) && (value.nil? || value == "")
234
239
  messages = presenceValidationMessages
235
- if messages.include?(field)
240
+ if messages.include?(field)
236
241
  @errors[field] = messages[field]
237
242
  else
238
- @errors[field] = "#{field} can't be blank"
243
+ @errors[field] = "#{field} can't be blank"
239
244
  end
240
245
  end
241
246
  end
@@ -261,7 +266,7 @@ module Parsistence
261
266
  end
262
267
 
263
268
  module ClassMethods
264
-
269
+
265
270
  # set the fields for the current Model
266
271
  # used in method_missing
267
272
  #
@@ -269,7 +274,7 @@ module Parsistence
269
274
  def fields(*args)
270
275
  args.each {|arg| field(arg)}
271
276
  end
272
-
277
+
273
278
  # set a field for the current Model
274
279
  #
275
280
  # @param [Symbol] name of field
@@ -279,7 +284,7 @@ module Parsistence
279
284
  @fields << name.to_sym
280
285
  @fields.uniq!
281
286
  end
282
-
287
+
283
288
  def get_fields
284
289
  @fields ||= []
285
290
  end
@@ -341,7 +346,7 @@ module Parsistence
341
346
  end
342
347
 
343
348
  # require a certain field to be present (not nil And not an empty String)
344
- #
349
+ #
345
350
  # @param [Symbol, Hash] field and options (now only has message)
346
351
  def validates_presence_of(field, opts={})
347
352
  @presenceValidationMessages ||= {}
@@ -352,7 +357,7 @@ module Parsistence
352
357
  def get_presence_validations
353
358
  @presenceValidations ||= {}
354
359
  end
355
-
360
+
356
361
  def get_presence_validation_messages
357
362
  @presenceValidationMessages ||= {}
358
363
  end
@@ -362,10 +367,10 @@ module Parsistence
362
367
  @presenceValidations << field
363
368
  end
364
369
  end
365
-
370
+
366
371
  def self.included(base)
367
372
  base.extend(ClassMethods)
368
373
  end
369
374
 
370
375
  end
371
- end
376
+ end
@@ -101,13 +101,13 @@ module Parsistence
101
101
  elsif @cached == false
102
102
  query.cachePolicy = KPFCachePolicyNetworkOnly
103
103
  else
104
- query.cachePolicy = self.class.cache_policy if self.class.cache_policy
104
+ query.cachePolicy = self.class.cache_policy if self.class.cache_policy
105
105
  end
106
106
 
107
107
  @includes.each do |include|
108
108
  query.includeKey(include)
109
109
  end
110
-
110
+
111
111
  @conditions.each do |key, value|
112
112
  checkKey key
113
113
  value = value.PFObject if value.respond_to?(:PFObject)
@@ -178,29 +178,28 @@ module Parsistence
178
178
 
179
179
  def fetch(&callback)
180
180
  if @limit && @limit == 1
181
- fetchOne(&callback)
181
+ fetchOne(&callback)
182
182
  else
183
183
  fetchAll(&callback)
184
184
  end
185
-
185
+
186
186
  self
187
187
  end
188
188
 
189
189
  # @deprecated
190
190
  # Grab all results that match query
191
- #
191
+ #
192
192
  # @param [Block] callback block
193
193
  # @return [Nil]
194
- #
194
+ #
195
195
  # (see #all)
196
196
  def fetchAll(&callback)
197
197
  query = createQuery
198
-
198
+
199
199
  myKlass = self.klass
200
- query.findObjectsInBackgroundWithBlock (lambda { |items, error|
200
+ query.findObjectsInBackgroundWithBlock (->(items) {
201
201
  modelItems = []
202
202
  modelItems = items.map! { |item| myKlass.new(item) } if items
203
- callback.call(modelItems, error) if callback.arity == 2
204
203
  callback.call(modelItems) if callback.arity == 1
205
204
  callback.call if callback.arity == 0
206
205
  })
@@ -210,21 +209,19 @@ module Parsistence
210
209
 
211
210
  # @deprecated
212
211
  # Grab first result that matches query
213
- #
212
+ #
214
213
  # @param [Block] callback block
215
214
  # @return [Nil]
216
- #
215
+ #
217
216
  # (see #first)
218
217
  def fetchOne(&callback)
219
218
  limit(0, 1)
220
219
  query = createQuery
221
-
220
+
222
221
  myKlass = self.klass
223
- query.getFirstObjectInBackgroundWithBlock (lambda { |item, error|
224
- modelItem = myKlass.new(item) if item
225
- callback.call(modelItem, error) if callback.arity == 2
226
- callback.call(modelItem) if callback.arity == 1
227
- callback.call if callback.arity == 0
222
+ query.getFirstObjectInBackgroundWithBlock (lambda { |item|
223
+ item = myKlass.new(item) if item
224
+ callback.call(item)
228
225
  })
229
226
 
230
227
  self
@@ -239,7 +236,7 @@ module Parsistence
239
236
  end
240
237
 
241
238
  # Grab all results that match query
242
- #
239
+ #
243
240
  # @param [Block] callback block
244
241
  # @return [Nil]
245
242
  def all(&callback)
@@ -248,14 +245,14 @@ module Parsistence
248
245
  end
249
246
 
250
247
  # Grab first result that matches query
251
- #
248
+ #
252
249
  # @param [Block] callback block
253
250
  # @return [Nil]
254
251
  def first(&callback)
255
252
  fetchOne(&callback)
256
253
  nil
257
254
  end
258
-
255
+
259
256
  # Prints current Query conditions to STDERR
260
257
  def showQuery
261
258
  $stderr.puts "Conditions: #{@conditions.to_s}"
@@ -271,7 +268,7 @@ module Parsistence
271
268
  end
272
269
 
273
270
  # Limit number of results
274
- #
271
+ #
275
272
  # @param [Integer] offset value
276
273
  # @param [Integer] number of results to limit, if not passed, first arg is used for limit
277
274
  # @return [Object] self
@@ -286,7 +283,7 @@ module Parsistence
286
283
  end
287
284
 
288
285
  # Order query results
289
- #
286
+ #
290
287
  # @param [Hash] fields - order-direction
291
288
  # @return [Object] self
292
289
  def order(*fields)
@@ -297,7 +294,7 @@ module Parsistence
297
294
  end
298
295
 
299
296
  # Query for fields where key == value
300
- #
297
+ #
301
298
  # @param [Hash] fields key-value pairs
302
299
  # @return [Object] self
303
300
  def eq(*fields)
@@ -308,7 +305,7 @@ module Parsistence
308
305
  end
309
306
 
310
307
  # Query for fields where key != value
311
- #
308
+ #
312
309
  # @param [Hash] fields key-value pairs
313
310
  # @return [Object] self
314
311
  def notEq(*fields)
@@ -319,7 +316,7 @@ module Parsistence
319
316
  end
320
317
 
321
318
  # Query for fields where key < value
322
- #
319
+ #
323
320
  # @param [Hash] fields key-value pairs
324
321
  # @return [Object] self
325
322
  def lt(*fields)
@@ -330,7 +327,7 @@ module Parsistence
330
327
  end
331
328
 
332
329
  # Query for fields where key > value
333
- #
330
+ #
334
331
  # @param [Hash] fields key-value pairs
335
332
  # @return [Object] self
336
333
  def gt(*fields)
@@ -341,7 +338,7 @@ module Parsistence
341
338
  end
342
339
 
343
340
  # Query for fields where key is in an array of values
344
- #
341
+ #
345
342
  # @param [Hash] fields key-value pairs, value is an array
346
343
  # @return [Object] self
347
344
  def in(*fields)
@@ -352,7 +349,7 @@ module Parsistence
352
349
  end
353
350
 
354
351
  # Query for fields where key <= value
355
- #
352
+ #
356
353
  # @param [Hash] fields key-value pairs
357
354
  # @return [Object] self
358
355
  def lte(*fields)
@@ -363,7 +360,7 @@ module Parsistence
363
360
  end
364
361
 
365
362
  # Query for fields where key >= value
366
- #
363
+ #
367
364
  # @param [Hash] fields key-value pairs
368
365
  # @return [Object] self
369
366
  def gte(*fields)
@@ -379,7 +376,7 @@ module Parsistence
379
376
  end
380
377
 
381
378
  # Include related object in query
382
- #
379
+ #
383
380
  # @param [Hash] fields
384
381
  # @return [Object] self
385
382
  def includes(*fields)
@@ -389,4 +386,4 @@ module Parsistence
389
386
  self
390
387
  end
391
388
  end
392
- end
389
+ end
@@ -1,3 +1,3 @@
1
1
  module Parsistence
2
- VERSION = "0.3.21" unless defined? Parsistence::VERSION
2
+ VERSION = "0.4.0" unless defined? Parsistence::VERSION
3
3
  end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Parsistence
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.21
5
- prerelease:
4
+ version: 0.4.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jamon Holmgren
@@ -10,7 +9,7 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-01-08 00:00:00.000000000 Z
12
+ date: 2015-07-11 00:00:00.000000000 Z
14
13
  dependencies: []
15
14
  description: Your models on RubyMotion and Parse in a persistence.js style pattern.
16
15
  email:
@@ -20,7 +19,7 @@ executables: []
20
19
  extensions: []
21
20
  extra_rdoc_files: []
22
21
  files:
23
- - .gitignore
22
+ - ".gitignore"
24
23
  - Gemfile
25
24
  - Parsistence.gemspec
26
25
  - README.md
@@ -33,27 +32,25 @@ files:
33
32
  - lib/Parsistence/version.rb
34
33
  homepage: https://github.com/clearsightstudio/Parsistence
35
34
  licenses: []
35
+ metadata: {}
36
36
  post_install_message:
37
37
  rdoc_options: []
38
38
  require_paths:
39
39
  - lib
40
40
  required_ruby_version: !ruby/object:Gem::Requirement
41
- none: false
42
41
  requirements:
43
- - - ! '>='
42
+ - - ">="
44
43
  - !ruby/object:Gem::Version
45
44
  version: '0'
46
45
  required_rubygems_version: !ruby/object:Gem::Requirement
47
- none: false
48
46
  requirements:
49
- - - ! '>='
47
+ - - ">="
50
48
  - !ruby/object:Gem::Version
51
49
  version: '0'
52
50
  requirements: []
53
51
  rubyforge_project: Parsistence
54
- rubygems_version: 1.8.22
52
+ rubygems_version: 2.4.8
55
53
  signing_key:
56
- specification_version: 3
54
+ specification_version: 4
57
55
  summary: Your models on RubyMotion and Parse in a persistence.js style pattern.
58
56
  test_files: []
59
- has_rdoc: