rm-extensions 0.1.0 → 0.1.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 +4 -4
- data/README.md +8 -28
- data/lib/rm-extensions/version.rb +1 -1
- data/lib/rm-extensions.rb +0 -1
- metadata +1 -2
- data/lib/motion/deallocation.rb +0 -56
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bbafb71f1715936049bc7a87a9fb2806e31069a2
|
4
|
+
data.tar.gz: 6d65f8db493d1c0a58c60ff46969256795c5d3c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 91c0e8421e4e203d3bdcd3c13f49fcb92cff53ece8ab9f28751b496f1badb2d08b81e3f7a64b37520d6d0ec3ed56f9247259e351b1d205b6ab61f5974ef5f8f2
|
7
|
+
data.tar.gz: 523156ea087b13f2eea0796bf931c2f07a031519c0de8af6fe805e8f1cbd81b2b8bcb5ee5754e10bb8e78177884315d5d9abffbd34a8246930c153ff36f1494c
|
data/README.md
CHANGED
@@ -16,13 +16,13 @@ class MyViewController < UIViewController
|
|
16
16
|
rmext_observe(@model, "name") do |val|
|
17
17
|
p "name is #{val}"
|
18
18
|
end
|
19
|
-
foo.
|
19
|
+
foo.rmext_on(:some_event) do |val|
|
20
20
|
p "some_event called with #{val.inspect}"
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
24
24
|
def test_trigger
|
25
|
-
foo.
|
25
|
+
foo.rmext_trigger(:some_event, "hello!")
|
26
26
|
end
|
27
27
|
end
|
28
28
|
```
|
@@ -30,17 +30,16 @@ end
|
|
30
30
|
Differences from BW::KVO and BW::Reactor::Eventable:
|
31
31
|
|
32
32
|
- No need to include a module in the class you wish to use it on
|
33
|
-
-
|
34
|
-
- The
|
35
|
-
-
|
36
|
-
|
37
|
-
|
38
|
-
- the observation actually happens on a proxy object
|
33
|
+
- the observation happens on a proxy object
|
34
|
+
- KVO: The default is to observe and immediately fire the supplied callback
|
35
|
+
- KVO: The callback only takes one argument, the new value
|
36
|
+
- KVO: the object observing is not retained, and when it is deallocated, the observation
|
37
|
+
will be removed automatically for you. there is typically no need to clean up manually
|
39
38
|
|
40
39
|
|
41
40
|
## Accessors
|
42
41
|
|
43
|
-
#### weak attr_accessors
|
42
|
+
#### weak attr_accessors:
|
44
43
|
|
45
44
|
```ruby
|
46
45
|
|
@@ -53,7 +52,6 @@ class MyViewController < UIViewController
|
|
53
52
|
super.tap do
|
54
53
|
v = MyView.alloc.initWithFrame(CGRectZero)
|
55
54
|
view.addSubview(v)
|
56
|
-
# if delegate was a normal attr_accessor, this controller could never be deallocated
|
57
55
|
v.delegate = self
|
58
56
|
end
|
59
57
|
end
|
@@ -61,24 +59,6 @@ end
|
|
61
59
|
|
62
60
|
```
|
63
61
|
|
64
|
-
## Deallocation
|
65
|
-
|
66
|
-
#### watch for an object to deallocate, and execute a callback:
|
67
|
-
|
68
|
-
```ruby
|
69
|
-
def add_view_controller
|
70
|
-
controller = UIViewController.alloc.init
|
71
|
-
controller.rmext_on_dealloc(&test_dealloc_proc)
|
72
|
-
navigationController.pushViewController(controller, animated: true)
|
73
|
-
end
|
74
|
-
|
75
|
-
def test_dealloc_proc
|
76
|
-
proc { |x| p "it deallocated!" }
|
77
|
-
end
|
78
|
-
|
79
|
-
# now you can verify the controller gets deallocated by calling #add_view_controller
|
80
|
-
# and then popping it off the navigationController
|
81
|
-
```
|
82
62
|
## Queues
|
83
63
|
|
84
64
|
#### Wraps GCD:
|
data/lib/rm-extensions.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rm-extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joe Noon
|
@@ -23,7 +23,6 @@ files:
|
|
23
23
|
- README.md
|
24
24
|
- Rakefile
|
25
25
|
- lib/motion/accessors.rb
|
26
|
-
- lib/motion/deallocation.rb
|
27
26
|
- lib/motion/observation.rb
|
28
27
|
- lib/motion/queues.rb
|
29
28
|
- lib/motion/util.rb
|
data/lib/motion/deallocation.rb
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
module RMExtensions
|
2
|
-
|
3
|
-
module ObjectExtensions
|
4
|
-
|
5
|
-
module Deallocation
|
6
|
-
|
7
|
-
# perform a block before +self+ will dealloc.
|
8
|
-
# the block given should have one argument, the object about to be deallocated.
|
9
|
-
def rmext_on_dealloc(&block)
|
10
|
-
internalObject = ::RMExtensions::OnDeallocInternalObject.create("#{self.class.name}:#{object_id}", self, block)
|
11
|
-
@rmext_on_dealloc_blocks ||= {}
|
12
|
-
@rmext_on_dealloc_blocks[internalObject] = internalObject
|
13
|
-
nil
|
14
|
-
end
|
15
|
-
|
16
|
-
# removes a previously added block from the deallocation callback list
|
17
|
-
def rmext_cancel_on_dealloc(block)
|
18
|
-
@rmext_on_dealloc_blocks ||= {}
|
19
|
-
if internalObject = @rmext_on_dealloc_blocks[block]
|
20
|
-
internalObject.block = nil
|
21
|
-
@rmext_on_dealloc_blocks.delete(block)
|
22
|
-
end
|
23
|
-
nil
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
# Used internally by +rmext_on_dealloc+. The idea is this object is added to the
|
31
|
-
# object we want to watch for deallocation. When the object we want to watch
|
32
|
-
# is about to dealloc, this object will dealloc first, so we can execute the block.
|
33
|
-
# the object it follows is kept only as a weak reference to not create
|
34
|
-
# a retain cycle.
|
35
|
-
class OnDeallocInternalObject
|
36
|
-
attr_accessor :description, :block
|
37
|
-
rmext_weak_attr_accessor :obj
|
38
|
-
def self.create(description, obj, block)
|
39
|
-
x = new
|
40
|
-
x.description = description
|
41
|
-
x.obj = obj
|
42
|
-
x.block = block
|
43
|
-
x
|
44
|
-
end
|
45
|
-
def dealloc
|
46
|
-
# p "dealloc OnDeallocInternalObject #{description}"
|
47
|
-
if block
|
48
|
-
block.call(obj)
|
49
|
-
self.block = nil
|
50
|
-
end
|
51
|
-
super
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|
56
|
-
Object.send(:include, ::RMExtensions::ObjectExtensions::Deallocation)
|