routable 0.0.1 → 0.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.
data/Rakefile CHANGED
@@ -1 +1,11 @@
1
- require "bundler/gem_tasks"
1
+ $:.unshift("/Library/RubyMotion/lib")
2
+ require 'motion/project'
3
+ require "bundler/gem_tasks"
4
+
5
+ $:.unshift("./lib/")
6
+ require './lib/routable'
7
+
8
+ Motion::Project::App.setup do |app|
9
+ # Use `rake config' to see complete project settings.
10
+ app.name = 'Routable'
11
+ end
@@ -1,5 +1,19 @@
1
1
  module Routable
2
2
  class Router
3
+ TRANSITION_STYLES = {
4
+ :cover => UIModalTransitionStyleCoverVertical,
5
+ :flip => UIModalTransitionStyleFlipHorizontal,
6
+ :dissolve => UIModalTransitionStyleCrossDissolve,
7
+ :curl => UIModalTransitionStylePartialCurl
8
+ }
9
+
10
+ PRESENTATION_STYLES = {
11
+ :full_screen => UIModalPresentationFullScreen,
12
+ :page_sheet => UIModalPresentationPageSheet,
13
+ :form_sheet => UIModalPresentationFormSheet,
14
+ :current => UIModalPresentationCurrentContext
15
+ }
16
+
3
17
  # Singleton, for practical use (you might not want)
4
18
  # to have more than one router.
5
19
  class << self
@@ -28,9 +42,21 @@ module Routable
28
42
  # - We present the VC modally (router is not shared between the new nav VC)
29
43
  # :shared => true/false
30
44
  # - If URL is called again, we pop to that VC if it's in memory.
31
-
45
+ # :transition => [:cover, :flip, :dissolve, :curl]
46
+ # - A symbol to represented transition style used. Mapped to UIModalTransitionStyle.
47
+ # :presentation => [:full_screen, :page_sheet, :form_sheet, :current]
48
+ # - A symbol to represented presentation style used. Mapped to UIModalPresentationStyle.
32
49
  def map(url, klass, options = {})
33
50
  format = url
51
+
52
+ if options[:transition] && !TRANSITION_STYLES.keys.include?(options[:transition])
53
+ raise ArgumentError, ":transition must be one of #{TRANSITION_STYLES.keys}"
54
+ end
55
+
56
+ if options[:presentation] && !PRESENTATION_STYLES.keys.include?(options[:presentation])
57
+ raise ArgumentError, ":presentation must be one of #{PRESENTATION_STYLES.keys}"
58
+ end
59
+
34
60
  self.routes[format] = options.merge!(klass: klass)
35
61
  end
36
62
 
@@ -50,6 +76,8 @@ module Routable
50
76
  else
51
77
  tempNavigationController = UINavigationController.alloc.init
52
78
  tempNavigationController.pushViewController(controller, animated: false)
79
+ tempNavigationController.modalTransitionStyle = controller.modalTransitionStyle
80
+ tempNavigationController.modalPresentationStyle = controller.modalPresentationStyle
53
81
  self.navigation_controller.presentModalViewController(tempNavigationController, animated: animated)
54
82
  end
55
83
  else
@@ -61,6 +89,17 @@ module Routable
61
89
  end
62
90
  end
63
91
 
92
+ # Pop the top level UIViewController
93
+ # EX
94
+ # router.pop
95
+ def pop(animated = true)
96
+ if self.navigation_controller.modalViewController
97
+ self.navigation_controller.dismissModalViewControllerAnimated(animated)
98
+ else
99
+ self.navigation_controller.popViewControllerAnimated(animated)
100
+ end
101
+ end
102
+
64
103
  def options_for_url(url)
65
104
  # map of url => options
66
105
 
@@ -136,6 +175,7 @@ module Routable
136
175
  else
137
176
  controller = controller.init
138
177
  end
178
+
139
179
  if open_options[:shared]
140
180
  shared_vc_cache[url] = controller
141
181
  # when controller.viewDidUnload called, remove from cache.
@@ -149,6 +189,17 @@ module Routable
149
189
  end
150
190
  end
151
191
  end
192
+
193
+ transition = open_options[:transition]
194
+ if transition
195
+ controller.modalTransitionStyle = TRANSITION_STYLES[transition]
196
+ end
197
+
198
+ presentation = open_options[:presentation]
199
+ if presentation
200
+ controller.modalPresentationStyle = PRESENTATION_STYLES[presentation]
201
+ end
202
+
152
203
  controller
153
204
  end
154
205
 
@@ -1,3 +1,3 @@
1
1
  module Routable
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/spec/main_spec.rb CHANGED
@@ -11,6 +11,9 @@ end
11
11
  class NoParamsController < UIViewController
12
12
  end
13
13
 
14
+ class LoginController < UIViewController
15
+ end
16
+
14
17
  describe "the url router" do
15
18
  before do
16
19
  @router = Routable::Router.new
@@ -68,4 +71,35 @@ describe "the url router" do
68
71
  @router.open("users")
69
72
  @nav_controller.viewControllers.count.should == 3
70
73
  end
74
+
75
+ it "should use transition option" do
76
+ [:cover, :flip, :dissolve, :curl].each do |transition|
77
+ url = "login/#{transition.to_s}"
78
+ @router.map(url, LoginController, modal: true, transition:transition)
79
+ controller = @router.controller_for_url(url)
80
+ controller.modalTransitionStyle.should == Routable::Router::TRANSITION_STYLES[transition]
81
+ end
82
+ end
83
+
84
+ it "should raise error when transition is unexpected value" do
85
+ lambda do
86
+ @router.map("login", LoginController, modal: true, transition: :unexpected)
87
+ end.should.raise(ArgumentError)
88
+ end
89
+
90
+ it "should use presentation option" do
91
+ [:full_screen, :page_sheet, :form_sheet, :current].each do |presentation|
92
+ url = "login/#{presentation.to_s}"
93
+ @router.map(url, LoginController, modal: true, presentation:presentation)
94
+ controller = @router.controller_for_url(url)
95
+ controller.modalPresentationStyle.should == Routable::Router::PRESENTATION_STYLES[presentation]
96
+ end
97
+ end
98
+
99
+ it "should raise error when presentation is unexpected value" do
100
+ lambda do
101
+ @router.map("login", LoginController, modal: true, presentation: :unexpected)
102
+ end.should.raise(ArgumentError)
103
+ end
104
+
71
105
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: routable
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Clay Allsopp
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-05-23 00:00:00 Z
13
+ date: 2012-06-09 00:00:00 Z
14
14
  dependencies: []
15
15
 
16
16
  description: A RubyMotion UIViewController -> URL router