routable 0.1.1 → 0.2
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 +15 -0
- data/README.md +17 -1
- data/lib/routable/router.rb +32 -4
- data/lib/routable/version.rb +1 -1
- data/spec/main_spec.rb +39 -1
- metadata +5 -7
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YzlmMzAzYzFlNDE4MDMyNTI4NTY1MmFkZGVhMGFkMDNjY2QxNjVkYQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ODcxNjZmOWUyNDdlNWQwYWNjNWUyZmI0NzUzNzI5YmU2YjIwNGZmMQ==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MDE5MDdiYmMwMTFlOWRhNzZlZjQyMGEzODI2ZWY4NDc4YzYwNWVmYTc2ODYy
|
10
|
+
MThkMWVkYjM4Mjk1ZjRmZjk3Y2RhNWIzZDU4NDJjN2E5OWI5NTQwNzcwYTlk
|
11
|
+
NzQwOTVlOTk0NTAwODkzNWMwMWVhOTZiMjkwYTIwMGE0NzAyNDk=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
OWVkYTJmZmNlZTNlNDFiN2Y3NGRmNWRjNDhiZTNlNGRiM2M5NTRkMzExMmVm
|
14
|
+
ZWQ1ZDMzYjE3NTRkYjVlNDIxNjVjYmRiNTQ2MDFkYzUxN2U0NDQyNGY4ZDFl
|
15
|
+
NTkyZTNjZDQ5MjFjMDgzY2I3NzNlMTJiNTlmNjk2YmRmNTllYjU=
|
data/README.md
CHANGED
@@ -74,11 +74,14 @@ class AppDelegate
|
|
74
74
|
|
75
75
|
# :modal means we push it modally.
|
76
76
|
@router.map("login", LoginController, modal: true)
|
77
|
+
|
77
78
|
# :shared means it will only keep one instance of this VC in the hierarchy;
|
78
79
|
# if we push it again later, it will pop any covering VCs.
|
79
80
|
@router.map("menu", MenuController, shared: true)
|
80
81
|
@router.map("profile/:id", ProfileController)
|
81
|
-
|
82
|
+
|
83
|
+
# :resets will reset the navigation stack with the target view controller
|
84
|
+
@router.map("messages", MessagesController, resets: true)
|
82
85
|
@router.map("message/:id", MessageThreadController)
|
83
86
|
|
84
87
|
# can also route arbitrary blocks of code
|
@@ -93,3 +96,16 @@ class AppDelegate
|
|
93
96
|
end
|
94
97
|
end
|
95
98
|
```
|
99
|
+
|
100
|
+
## Configuration of View Controllers
|
101
|
+
|
102
|
+
If you need to configure a view controller before the router navigates to it, use a block:
|
103
|
+
|
104
|
+
``` ruby
|
105
|
+
# Configure and push an ImageEditorController
|
106
|
+
BW::Device.camera.any.picture(media_types: [:movie, :image]) do |result|
|
107
|
+
router.open('editor') do |controller|
|
108
|
+
controller.image = result[:original_image]
|
109
|
+
end
|
110
|
+
end
|
111
|
+
```
|
data/lib/routable/router.rb
CHANGED
@@ -47,6 +47,8 @@ module Routable
|
|
47
47
|
# - We present the VC modally (router is not shared between the new nav VC)
|
48
48
|
# :shared => true/false
|
49
49
|
# - If URL is called again, we pop to that VC if it's in memory.
|
50
|
+
# :resets => true/false
|
51
|
+
# - Resets the navigation stack with the target view controller
|
50
52
|
# :transition => [:cover, :flip, :dissolve, :curl]
|
51
53
|
# - A symbol to represented transition style used. Mapped to UIModalTransitionStyle.
|
52
54
|
# :presentation => [:full_screen, :page_sheet, :form_sheet, :current]
|
@@ -69,11 +71,19 @@ module Routable
|
|
69
71
|
self.routes[format] = options.merge!(klass: klass)
|
70
72
|
end
|
71
73
|
|
74
|
+
# Open the given URL via the iOS protocol
|
75
|
+
# EX
|
76
|
+
# router.open_external("http://google.com")
|
77
|
+
# => Opens Google in Safari.app
|
78
|
+
def open_external(url)
|
79
|
+
UIApplication.sharedApplication.openURL(NSURL.URLWithString(url))
|
80
|
+
end
|
81
|
+
|
72
82
|
# Push the UIViewController for the given url
|
73
83
|
# EX
|
74
84
|
# router.open("users/3")
|
75
85
|
# => router.navigation_controller pushes a UsersController
|
76
|
-
def open(url, animated = true)
|
86
|
+
def open(url, animated = true, &block)
|
77
87
|
controller_options = options_for_url(url)
|
78
88
|
|
79
89
|
if controller_options[:callback]
|
@@ -89,10 +99,28 @@ module Routable
|
|
89
99
|
end
|
90
100
|
|
91
101
|
controller = controller_for_url(url)
|
102
|
+
|
103
|
+
# Allow configuration of the view controller after
|
104
|
+
# initialization but before navigating to the view controller
|
105
|
+
if block_given?
|
106
|
+
block.call(controller)
|
107
|
+
end
|
108
|
+
|
92
109
|
if self.navigation_controller.modalViewController
|
93
|
-
|
110
|
+
dismiss_animated = animated
|
111
|
+
|
112
|
+
# Can't dismiss and present two controllers animated at the same time,
|
113
|
+
# so we just dismiss the current one without an animation
|
114
|
+
if controller_options[:modal] && dismiss_animated
|
115
|
+
dismiss_animated = false
|
116
|
+
end
|
117
|
+
|
118
|
+
self.navigation_controller.dismissModalViewControllerAnimated(dismiss_animated)
|
94
119
|
end
|
95
|
-
|
120
|
+
|
121
|
+
if controller_options[:resets]
|
122
|
+
navigation_controller.setViewControllers([controller], animated: animated)
|
123
|
+
elsif controller_options[:modal]
|
96
124
|
if controller.class == UINavigationController
|
97
125
|
self.navigation_controller.presentModalViewController(controller, animated: animated)
|
98
126
|
else
|
@@ -231,4 +259,4 @@ module Routable
|
|
231
259
|
@shared_vc_cache ||= {}
|
232
260
|
end
|
233
261
|
end
|
234
|
-
end
|
262
|
+
end
|
data/lib/routable/version.rb
CHANGED
data/spec/main_spec.rb
CHANGED
@@ -14,6 +14,16 @@ end
|
|
14
14
|
class LoginController < UIViewController
|
15
15
|
end
|
16
16
|
|
17
|
+
class ConfigurableController < UIViewController
|
18
|
+
attr_accessor :configured
|
19
|
+
|
20
|
+
def init
|
21
|
+
super.tap do |controller|
|
22
|
+
controller.configured = false
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
17
27
|
describe "the url router" do
|
18
28
|
before do
|
19
29
|
@router = Routable::Router.new
|
@@ -23,6 +33,21 @@ describe "the url router" do
|
|
23
33
|
@nav_controller.viewControllers.count.should == 0
|
24
34
|
end
|
25
35
|
|
36
|
+
describe '#open' do
|
37
|
+
it 'accepts a configuration block' do
|
38
|
+
url = 'configured'
|
39
|
+
@router.navigation_controller = @nav_controller
|
40
|
+
@router.map(url, ConfigurableController, shared: true)
|
41
|
+
|
42
|
+
@router.open(url) do |controller|
|
43
|
+
controller.configured = true
|
44
|
+
end
|
45
|
+
|
46
|
+
controller = @router.controller_for_url(url)
|
47
|
+
controller.configured.should.be.true
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
26
51
|
def make_test_controller_route
|
27
52
|
format = "users/:user_id"
|
28
53
|
@router.map(format, UsersTestController)
|
@@ -121,4 +146,17 @@ describe "the url router" do
|
|
121
146
|
@router.open("logout/123")
|
122
147
|
@called.should == "123"
|
123
148
|
end
|
124
|
-
|
149
|
+
|
150
|
+
describe 'reset option' do
|
151
|
+
it 'resets the navigation controller stack with the target controller' do
|
152
|
+
@router.navigation_controller = @nav_controller
|
153
|
+
@router.map('start', NoParamsController)
|
154
|
+
@router.map('reset', NoParamsController, resets: true)
|
155
|
+
|
156
|
+
@router.open('start')
|
157
|
+
@router.open('reset')
|
158
|
+
|
159
|
+
@router.navigation_controller.viewControllers.count.should == 1
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: routable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: '0.2'
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Clay Allsopp
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-05-06 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description: A RubyMotion UIViewController -> URL router
|
15
14
|
email:
|
@@ -30,27 +29,26 @@ files:
|
|
30
29
|
- spec/main_spec.rb
|
31
30
|
homepage: https://github.com/clayallsopp/Routable
|
32
31
|
licenses: []
|
32
|
+
metadata: {}
|
33
33
|
post_install_message:
|
34
34
|
rdoc_options: []
|
35
35
|
require_paths:
|
36
36
|
- lib
|
37
37
|
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
-
none: false
|
39
38
|
requirements:
|
40
39
|
- - ! '>='
|
41
40
|
- !ruby/object:Gem::Version
|
42
41
|
version: '0'
|
43
42
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
|
-
none: false
|
45
43
|
requirements:
|
46
44
|
- - ! '>='
|
47
45
|
- !ruby/object:Gem::Version
|
48
46
|
version: '0'
|
49
47
|
requirements: []
|
50
48
|
rubyforge_project:
|
51
|
-
rubygems_version:
|
49
|
+
rubygems_version: 2.0.3
|
52
50
|
signing_key:
|
53
|
-
specification_version:
|
51
|
+
specification_version: 4
|
54
52
|
summary: A RubyMotion UIViewController -> URL router
|
55
53
|
test_files:
|
56
54
|
- spec/main_spec.rb
|