rm-extensions 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7edd41307de1d5c1e865bbb76ea316389c1a2712
4
- data.tar.gz: 382ea7eb32aca95c7d872f948511806d8651bc0b
3
+ metadata.gz: 3cf1c7466015bfa9d247a7331ea115b3e2488fe2
4
+ data.tar.gz: ab4897b30918931ff43d2f78a753b37f2dcce110
5
5
  SHA512:
6
- metadata.gz: e407a9a1676903d3b5e0b87278667257bfba115b54ea7d10e9c83fe05659f868be16fcd25bd582c05b5fd685e6fe4d3779b703f4657accc215697d2f464038df
7
- data.tar.gz: 4e201aceefe215907ef2b7c1a25fd34d2ffb8d2167735547dfd38fd2e0e03b8b2937388a9446890d95f384bb794229cfea44b6c59d9b4a43ba7cde5c1597de1e
6
+ metadata.gz: a1dd632b69fe168f2fa6aea6d46966b4658eae245689037b7b45bb08607266af6eb6bac8fcd0937d6fcd871efc0937cfac74b06758731d23a4a05e1e80c9139c
7
+ data.tar.gz: d259f115de70b69418eb5a1b38ff62a33d33600b9613e9223b7e855e7e814dba03a598324aac0c8fc132972f463fe1af26fbe50ef6e1568b092f4f989ff7fc29
@@ -34,12 +34,29 @@ module RMExtensions
34
34
  end
35
35
  end
36
36
 
37
- # register a callback when an event is trigger on this object
37
+ # register a callback when an event is triggered on this object.
38
+ #
39
+ # `inContext` should be passed the object context that the block was originally
40
+ # created in. if you are writing the block inline, this would be self. if
41
+ # you have a more complicated situation where you are passing the block around as
42
+ # an argument from another scope or method, you should take care to also keep
43
+ # track of it's context, so you can pass it correctly here.
44
+ #
45
+ # the context is needed to properly manage memory and let the block "drop out"
46
+ # when it's context deallocates, instead of creating leaks.
47
+ #
38
48
  def rmext_on(event, inContext:context, withBlock:block)
39
49
  rmext_observation_proxy.on(event, inContext:context, withBlock:block)
40
50
  end
41
51
 
52
+ # register a callback when an event is triggered on this object and remove it after it fires once
53
+ # see `#rmext_on` for notes about `inContext`
54
+ def rmext_once(event, inContext:context, withBlock:block)
55
+ rmext_observation_proxy.once(event, inContext:context, withBlock:block)
56
+ end
57
+
42
58
  # remove a specific callback for an event on this object
59
+ # see `#rmext_on` for notes about `inContext`
43
60
  def rmext_off(event, inContext:context, withBlock:block)
44
61
  if @rmext_observation_proxy
45
62
  @rmext_observation_proxy.off(event, inContext:context, withBlock:block)
@@ -225,6 +242,15 @@ module RMExtensions
225
242
  nil
226
243
  end
227
244
 
245
+ def once(event, inContext:context, withBlock:block)
246
+ block.weak!
247
+ once_block = lambda do |opts|
248
+ off(event, inContext:context, withBlock:once_block)
249
+ block.call(opts)
250
+ end
251
+ on(event, inContext:context, withBlock:once_block)
252
+ end
253
+
228
254
  def off_all
229
255
  @events.removeAllObjects
230
256
  end
data/lib/motion/util.rb CHANGED
@@ -8,6 +8,48 @@ module RMExtensions
8
8
  @debug = bool
9
9
  end
10
10
 
11
+ # LongTask encapsulates beginBackgroundTaskWithExpirationHandler/endBackgroundTask:
12
+ #
13
+ # RMExtensions::BackgroundTask.new("my long task") do |task|
14
+ # do_something_long
15
+ # task.end!
16
+ # end
17
+ #
18
+ # RMExtensions::BackgroundTask.new("my long task") do |task|
19
+ # do_something_long_async do
20
+ # # later this long task finishes...
21
+ # task.end!
22
+ # end
23
+ # end
24
+ #
25
+ class LongTask
26
+ attr_accessor :bgTask, :desc
27
+
28
+ # RMExtensions::BackgroundTask.new("my long task") { |task| task.end! }
29
+ def initialize(desc=nil, &block)
30
+ @desc = desc
31
+ @bgTask = UIApplication.sharedApplication.beginBackgroundTaskWithExpirationHandler(lambda do
32
+ if ::RMExtensions.debug?
33
+ p "ERROR: #{self.inspect} #{@desc} didn't call #end! in time!"
34
+ end
35
+ UIApplication.sharedApplication.endBackgroundTask(@bgTask)
36
+ end.weak!)
37
+ block.call(self)
38
+ self
39
+ end
40
+
41
+ def end!
42
+ if ::RMExtensions.debug?
43
+ p "SUCCESS: #{self.inspect} #{@desc} ended successfully."
44
+ end
45
+ if @bgTask != UIBackgroundTaskInvalid
46
+ UIApplication.sharedApplication.endBackgroundTask(@bgTask)
47
+ @bgTask = UIBackgroundTaskInvalid
48
+ end
49
+ end
50
+
51
+ end
52
+
11
53
  module ObjectExtensions
12
54
 
13
55
  module Util
@@ -1,3 +1,3 @@
1
1
  module RMExtensions
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rm-extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Noon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-13 00:00:00.000000000 Z
11
+ date: 2014-01-16 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Extensions and helpers for dealing with various areas of rubymotion
14
14
  email: