rm-extensions 0.4.4 → 0.4.5

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: c647736a12cbb1a4c0296c0c216f5536f7c2eb85
4
- data.tar.gz: f231c7eef5167799607d2dbe143d22affc89509d
3
+ metadata.gz: 79fc90e02999956244b32c6716f3ef47c6c40dce
4
+ data.tar.gz: 7afd5219125217fe0fe730b8c9ed629ef3dacc91
5
5
  SHA512:
6
- metadata.gz: b388fd4432b38b24efe2b05f70a1ff10209e1d98ad34c6a8a822a7b0cbb3dc2436df95e2708c55883395f8939a81debd65e6715f27b4b497ece8c0d634d0e8b2
7
- data.tar.gz: ec647a42c24327e10956e97316c9c06b4ccf35121963a4644a8a88b85a85f4b8c917daa45342dd01a37d2c83ccf3fa42a166a9e1f1c0f7c35f0f9a72c43be431
6
+ metadata.gz: 4972527b0fcb5f5148c1a134e32cec2d458bb2f3c7db95ef83124f3f2bb3c49560b440735b0e5e568b3bbe017dc83431b6a38fee9fd3d52b543c89fc18bb8c94
7
+ data.tar.gz: c2a1c7fb7cc86cd69eb1bf9d4c8275234d3c2c1d9462a74cffbf1badd342daf42631c72ca5189368de738523756cd1e9498a46dc798a49220dbf574d8642c6f8
data/lib/motion/util.rb CHANGED
@@ -29,30 +29,102 @@ module RMExtensions
29
29
  UIApplication.sharedApplication.backgroundTimeRemaining
30
30
  end
31
31
 
32
- # RMExtensions::BackgroundTask.new("my long task") { |task| task.end! }
32
+ def self.when_all_complete(&block)
33
+ rmext_on_main_q do
34
+ if ::RMExtensions::LongTask.outstanding_tasks.size.zero?
35
+ rmext_block_on_main_q(block)
36
+ else
37
+ rmext_once(::RMExtensions::LongTask, :all_complete) do |opts|
38
+ block.call
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ def self.outstanding_queue
45
+ Dispatch.once do
46
+ @outstanding_queue = Dispatch::Queue.new("#{NSBundle.mainBundle.bundleIdentifier}.outstanding.LongTask")
47
+ end
48
+ @outstanding_queue
49
+ end
50
+
51
+ def self.outstanding_tasks
52
+ Dispatch.once do
53
+ @outstanding_tasks = []
54
+ end
55
+ @outstanding_tasks
56
+ end
57
+
58
+ # RMExtensions::BackgroundTask.verbose("my long task") { |task| task.end! }
59
+ def self.verbose(desc=nil, &block)
60
+ _creator(desc, true, true, &block)
61
+ end
62
+
63
+ # RMExtensions::BackgroundTask.create("my long task") { |task| task.end! }
33
64
  def self.create(desc=nil, &block)
34
- x = new(desc)
65
+ _creator(desc, false, true, &block)
66
+ end
67
+
68
+ def self.internal(desc=nil, &block)
69
+ _creator(desc, false, false, &block)
70
+ end
71
+
72
+ def self._creator(desc=nil, verbose=false, tracking=true, &block)
73
+ x = new(desc, verbose, tracking)
35
74
  block.weak!.call(x)
36
75
  x
37
76
  end
38
77
 
39
- def initialize(desc=nil)
78
+ def self.reset_outstanding_tasks!
79
+ ::RMExtensions::LongTask.outstanding_queue.sync do
80
+ size = ::RMExtensions::LongTask.outstanding_tasks.size
81
+ if size > 0
82
+ p "WARNING: reset_outstanding_tasks! (was: #{size})"
83
+ ::RMExtensions::LongTask.outstanding_tasks.removeAllObjects
84
+ end
85
+ end
86
+ end
87
+
88
+ def initialize(desc=nil, verbose=false, tracking=true)
89
+ @verbose = verbose
90
+ @tracking = tracking
40
91
  @desc = "#{rmext_object_desc} #{desc}"
41
92
  @bgTask = UIApplication.sharedApplication.beginBackgroundTaskWithExpirationHandler(lambda do
42
93
  p "ERROR: #{@desc} didn't call #end! in time!"
43
94
  __end!
44
95
  end)
96
+ if ::RMExtensions.debug? || @verbose
97
+ p "CREATED: #{@desc}"
98
+ end
99
+ if @tracking
100
+ ::RMExtensions::LongTask.outstanding_queue.sync do
101
+ ::RMExtensions::LongTask.outstanding_tasks << self
102
+ end
103
+ end
45
104
  self
46
105
  end
47
106
 
48
107
  def end!
49
- if ::RMExtensions.debug?
108
+ if ::RMExtensions.debug? || @verbose
50
109
  p "SUCCESS: #{@desc} ended successfully."
51
110
  end
52
111
  __end!
53
112
  end
54
113
 
55
114
  def __end!
115
+ if @tracking
116
+ ::RMExtensions::LongTask.outstanding_queue.sync do
117
+ ::RMExtensions::LongTask.outstanding_tasks.delete(self)
118
+ ::RMExtensions::LongTask.internal do |internal_task|
119
+ rmext_on_main_q do
120
+ if ::RMExtensions::LongTask.outstanding_tasks.size.zero?
121
+ ::RMExtensions::LongTask.rmext_trigger(:all_complete)
122
+ end
123
+ internal_task.end!
124
+ end
125
+ end
126
+ end
127
+ end
56
128
  if @bgTask && @bgTask != UIBackgroundTaskInvalid
57
129
  UIApplication.sharedApplication.endBackgroundTask(@bgTask)
58
130
  @bgTask = UIBackgroundTaskInvalid
@@ -1,3 +1,3 @@
1
1
  module RMExtensions
2
- VERSION = "0.4.4"
2
+ VERSION = "0.4.5"
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.4.4
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Noon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-25 00:00:00.000000000 Z
11
+ date: 2014-01-26 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Extensions and helpers for dealing with various areas of rubymotion
14
14
  email: