ProMotion 2.7.1 → 2.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ProMotion/delegate/delegate_module.rb +22 -1
- data/lib/ProMotion/screen/nav_bar_module.rb +13 -5
- data/lib/ProMotion/screen/screen_module.rb +4 -3
- data/lib/ProMotion/screen/screen_navigation.rb +13 -9
- data/lib/ProMotion/table/data/table_data.rb +2 -0
- data/lib/ProMotion/table/extensions/searchable.rb +4 -1
- data/lib/ProMotion/version.rb +1 -1
- data/spec/functional/func_split_screen_spec.rb +2 -8
- data/spec/helpers/test_helper.rb +16 -7
- data/spec/unit/screen_helpers_spec.rb +2 -2
- data/spec/unit/searchable_table_spec.rb +6 -24
- data/spec/unit/tables/table_searchable_spec.rb +15 -12
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d0c2893ec28afedac3c71606028a215ba4dbc6e
|
4
|
+
data.tar.gz: 35313a6617437f5c92a3eb0c0448939c4bca13e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c23d851b8bd4aae82dcf6b72cb80d3e88b7d9d1980f20a6b3a056b52a6211337e5985b4d07dd6af63da6983870d7c06da2a0e0bca1fa326b2356406532ec4f9c
|
7
|
+
data.tar.gz: 90dd32dcc1281d9b49f87ab21e00cb61946e37e6e7a7e68aa471bfbb6a1f2243724a2da3a070a64c7fce804206b5206a7da9aa7424ced972bc274a67c7f39c2b
|
@@ -51,7 +51,7 @@ module ProMotion
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def open(screen, args={})
|
54
|
-
screen = screen
|
54
|
+
screen = set_up_screen_for_open(screen, args)
|
55
55
|
|
56
56
|
self.home_screen = screen
|
57
57
|
|
@@ -65,6 +65,27 @@ module ProMotion
|
|
65
65
|
alias :open_screen :open
|
66
66
|
alias :open_root_screen :open_screen
|
67
67
|
|
68
|
+
def set_up_screen_for_open(screen, args={})
|
69
|
+
# Instantiate screen if given a class
|
70
|
+
screen = screen.new(args) if screen.respond_to?(:new)
|
71
|
+
|
72
|
+
# Store screen options
|
73
|
+
screen.screen_options.merge(args) if screen.respond_to?(:screen_options)
|
74
|
+
|
75
|
+
# Set title & modal properties
|
76
|
+
screen.title = args[:title] if args[:title] && screen.respond_to?(:title=)
|
77
|
+
screen.modal = args[:modal] if args[:modal] && screen.respond_to?(:modal=)
|
78
|
+
|
79
|
+
# Hide bottom bar?
|
80
|
+
screen.hidesBottomBarWhenPushed = args[:hide_tab_bar] == true
|
81
|
+
|
82
|
+
# Wrap in a PM::NavigationController?
|
83
|
+
screen.add_nav_bar(args) if screen.respond_to?(:add_nav_bar)
|
84
|
+
|
85
|
+
# Return modified screen instance
|
86
|
+
screen
|
87
|
+
end
|
88
|
+
|
68
89
|
# DEPRECATED
|
69
90
|
def status_bar?
|
70
91
|
mp "The default behavior of `status_bar?` has changed. Calling `status_bar?` on AppDelegate may not return the correct result.", force_color: :yellow
|
@@ -48,10 +48,16 @@ module ProMotion
|
|
48
48
|
|
49
49
|
def add_nav_bar(args = {})
|
50
50
|
args = self.class.get_nav_bar.merge(args)
|
51
|
-
return unless args[:nav_bar]
|
51
|
+
return unless args[:nav_bar] || args[:nav_controller]
|
52
52
|
self.navigationController ||= begin
|
53
53
|
self.first_screen = true if self.respond_to?(:first_screen=)
|
54
|
-
|
54
|
+
nav_controller_class = args[:nav_controller] || NavigationController
|
55
|
+
if nav_controller_class.is_a? Class
|
56
|
+
nav = nav_controller_class.alloc.initWithRootViewController(self)
|
57
|
+
else
|
58
|
+
nav = nav_controller_class
|
59
|
+
nav.setViewControllers([self], animated: false)
|
60
|
+
end
|
55
61
|
nav.setModalTransitionStyle(args[:transition_style]) if args[:transition_style]
|
56
62
|
nav.setModalPresentationStyle(args[:presentation_style]) if args[:presentation_style]
|
57
63
|
nav
|
@@ -59,9 +65,11 @@ module ProMotion
|
|
59
65
|
self.navigationController.toolbarHidden = !args[:toolbar] unless args[:toolbar].nil?
|
60
66
|
end
|
61
67
|
|
62
|
-
def
|
63
|
-
|
64
|
-
|
68
|
+
def update_nav_bar_visibility(animated)
|
69
|
+
return unless navigationController
|
70
|
+
hidden = @screen_options[:hide_nav_bar]
|
71
|
+
unless hidden.nil?
|
72
|
+
navigationController.setNavigationBarHidden(hidden, animated: animated)
|
65
73
|
end
|
66
74
|
end
|
67
75
|
|
@@ -9,7 +9,7 @@ module ProMotion
|
|
9
9
|
include ProMotion::SplitScreen if UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad || (UIDevice.currentDevice.systemVersion.to_i >= 8 )
|
10
10
|
|
11
11
|
attr_reader :parent_screen
|
12
|
-
attr_accessor :first_screen, :modal, :split_screen
|
12
|
+
attr_accessor :screen_options, :first_screen, :modal, :split_screen
|
13
13
|
|
14
14
|
def screen_init(args = {})
|
15
15
|
@screen_options = args
|
@@ -41,7 +41,8 @@ module ProMotion
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def view_will_appear(animated)
|
44
|
-
|
44
|
+
update_nav_bar_visibility(animated)
|
45
|
+
|
45
46
|
self.will_appear
|
46
47
|
|
47
48
|
self.will_present if isMovingToParentViewController
|
@@ -186,7 +187,7 @@ module ProMotion
|
|
186
187
|
end
|
187
188
|
|
188
189
|
def apply_properties(args)
|
189
|
-
reserved_args = [ :nav_bar, :hide_nav_bar, :hide_tab_bar, :animated, :close_all, :in_tab, :in_detail, :in_master, :to_screen, :toolbar ]
|
190
|
+
reserved_args = [ :nav_bar, :nav_controller, :hide_nav_bar, :hide_tab_bar, :animated, :close_all, :replace_nav_stack, :in_tab, :in_detail, :in_master, :to_screen, :toolbar ]
|
190
191
|
set_attributes self, args.dup.delete_if { |k,v| reserved_args.include?(k) }
|
191
192
|
end
|
192
193
|
|
@@ -10,11 +10,12 @@ module ProMotion
|
|
10
10
|
ensure_wrapper_controller_in_place(screen, args)
|
11
11
|
|
12
12
|
opened ||= open_in_split_screen(screen, args) if self.split_screen
|
13
|
-
opened ||= open_root_screen(screen) if args[:close_all]
|
13
|
+
opened ||= open_root_screen(screen, args) if args[:close_all]
|
14
|
+
opened ||= replace_nav_stack([screen], args) if args[:replace_nav_stack]
|
14
15
|
opened ||= present_modal_view_controller(screen, args) if args[:modal]
|
15
16
|
opened ||= open_in_tab(screen, args[:in_tab]) if args[:in_tab]
|
16
17
|
opened ||= push_view_controller(screen, self.navigationController, !!args[:animated]) if self.navigationController
|
17
|
-
opened ||= open_root_screen(screen.navigationController || screen)
|
18
|
+
opened ||= open_root_screen(screen.navigationController || screen, args)
|
18
19
|
screen
|
19
20
|
end
|
20
21
|
alias :open :open_screen
|
@@ -25,8 +26,8 @@ module ProMotion
|
|
25
26
|
args[:in_detail] || args[:in_master]
|
26
27
|
end
|
27
28
|
|
28
|
-
def open_root_screen(screen)
|
29
|
-
app_delegate.open_root_screen(screen)
|
29
|
+
def open_root_screen(screen, args = {})
|
30
|
+
app_delegate.open_root_screen(screen, args)
|
30
31
|
end
|
31
32
|
|
32
33
|
def open_modal(screen, args = {})
|
@@ -75,15 +76,19 @@ module ProMotion
|
|
75
76
|
nav_controller.pushViewController(vc, animated: animated)
|
76
77
|
end
|
77
78
|
|
79
|
+
def replace_nav_stack(screens, args = {})
|
80
|
+
args[:animated] ||= true
|
81
|
+
navigationController.setViewControllers(screens, animated: !!args[:animated])
|
82
|
+
end
|
83
|
+
|
78
84
|
protected
|
79
85
|
|
80
86
|
def set_up_screen_for_open(screen, args={})
|
81
|
-
|
82
87
|
# Instantiate screen if given a class
|
83
|
-
screen = screen.new if screen.respond_to?(:new)
|
88
|
+
screen = screen.new(args) if screen.respond_to?(:new)
|
84
89
|
|
85
90
|
# Store screen options
|
86
|
-
screen.
|
91
|
+
screen.screen_options.merge(args) if screen.respond_to?(:screen_options)
|
87
92
|
|
88
93
|
# Set parent
|
89
94
|
screen.parent_screen = self if screen.respond_to?(:parent_screen=)
|
@@ -96,11 +101,10 @@ module ProMotion
|
|
96
101
|
screen.hidesBottomBarWhenPushed = args[:hide_tab_bar] == true
|
97
102
|
|
98
103
|
# Wrap in a PM::NavigationController?
|
99
|
-
screen.add_nav_bar(args) if
|
104
|
+
screen.add_nav_bar(args) if screen.respond_to?(:add_nav_bar)
|
100
105
|
|
101
106
|
# Return modified screen instance
|
102
107
|
screen
|
103
|
-
|
104
108
|
end
|
105
109
|
|
106
110
|
def ensure_wrapper_controller_in_place(screen, args={})
|
@@ -2,11 +2,14 @@ module ProMotion
|
|
2
2
|
module Table
|
3
3
|
module Searchable
|
4
4
|
|
5
|
+
def search_controller
|
6
|
+
@search_controller ||= UISearchController.alloc.initWithSearchResultsController(nil)
|
7
|
+
end
|
8
|
+
|
5
9
|
def make_searchable(params = nil) # params argument is deprecated. No longer need to use it.
|
6
10
|
params = get_searchable_params
|
7
11
|
|
8
12
|
self.definesPresentationContext = true
|
9
|
-
search_controller = UISearchController.alloc.initWithSearchResultsController(nil)
|
10
13
|
search_controller.delegate = params[:delegate]
|
11
14
|
search_controller.searchResultsUpdater = params[:search_results_updater]
|
12
15
|
search_controller.hidesNavigationBarDuringPresentation = params[:hides_nav_bar]
|
data/lib/ProMotion/version.rb
CHANGED
@@ -19,43 +19,37 @@ describe "Split screen functionality" do
|
|
19
19
|
rotate_device to: :portrait, button: :bottom
|
20
20
|
end
|
21
21
|
|
22
|
+
if TestHelper.lt_ios11 # FIXME: these tests no longer work since iOS 11 removed the private class UINavigationItemView
|
22
23
|
it "should allow opening a detail view from the master view" do
|
23
|
-
|
24
24
|
@master.open BasicScreen.new(nav_bar: true), in_detail: true, animated: false
|
25
25
|
|
26
26
|
view("Master").should.be.kind_of UINavigationItemView
|
27
27
|
view("Basic").should.be.kind_of UINavigationItemView
|
28
28
|
views(UINavigationItemView).each { |v| v.title.should.not == "Detail" }
|
29
|
-
|
30
29
|
end
|
31
30
|
|
32
31
|
it "should allow opening another view from the master view" do
|
33
|
-
|
34
32
|
@master.open BasicScreen.new(nav_bar: true), animated: false
|
35
33
|
|
36
34
|
view("Basic").should.be.kind_of UINavigationItemView
|
37
35
|
view("Detail").should.be.kind_of UINavigationItemView
|
38
|
-
|
39
36
|
end
|
40
37
|
|
41
38
|
it "should allow opening a master view from the detail view" do
|
42
|
-
|
43
39
|
@detail.open BasicScreen.new(nav_bar: true), in_master: true, animated: false
|
44
40
|
|
45
41
|
view("Basic").should.be.kind_of UINavigationItemView
|
46
42
|
view("Detail").should.be.kind_of UINavigationItemView
|
47
43
|
views(UINavigationItemView).each { |v| v.title.should.not == "Master" }
|
48
|
-
|
49
44
|
end
|
50
45
|
|
51
46
|
it "should allow opening another view from the detail view" do
|
52
|
-
|
53
47
|
@detail.open BasicScreen.new(nav_bar: true), animated: false
|
54
48
|
|
55
49
|
view("Basic").should.be.kind_of UINavigationItemView
|
56
50
|
view("Master").should.be.kind_of UINavigationItemView
|
57
|
-
|
58
51
|
end
|
52
|
+
end
|
59
53
|
|
60
54
|
unless ENV['TRAVIS'] # TODO: Why won't Travis pass these tests??
|
61
55
|
it "should override the title on the button" do
|
data/spec/helpers/test_helper.rb
CHANGED
@@ -1,21 +1,30 @@
|
|
1
1
|
class TestHelper
|
2
|
+
def self.ios_version
|
3
|
+
UIDevice.currentDevice.systemVersion.to_f
|
4
|
+
end
|
5
|
+
|
2
6
|
def self.ios6
|
3
|
-
|
4
|
-
UIDevice.currentDevice.systemVersion.to_f < 7.0
|
7
|
+
ios_version >= 6.0 && ios_version < 7.0
|
5
8
|
end
|
6
9
|
|
7
10
|
def self.ios7
|
8
|
-
|
9
|
-
UIDevice.currentDevice.systemVersion.to_f < 8.0
|
11
|
+
ios_version >= 7.0 && ios_version < 8.0
|
10
12
|
end
|
11
13
|
|
12
14
|
def self.ios8
|
13
|
-
|
14
|
-
UIDevice.currentDevice.systemVersion.to_f < 9.0
|
15
|
+
ios_version >= 8.0 && ios_version < 9.0
|
15
16
|
end
|
16
17
|
|
17
18
|
def self.gte_ios8
|
18
|
-
|
19
|
+
ios_version >= 8.0
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.lt_ios11
|
23
|
+
ios_version < 11.0
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.gte_ios11
|
27
|
+
ios_version >= 11.0
|
19
28
|
end
|
20
29
|
end
|
21
30
|
|
@@ -155,7 +155,7 @@ describe "screen helpers" do
|
|
155
155
|
end
|
156
156
|
|
157
157
|
it "should open a root screen if :close_all is provided" do
|
158
|
-
@screen.mock!(:open_root_screen) { |screen| screen.should.be.instance_of BasicScreen }
|
158
|
+
@screen.mock!(:open_root_screen) { |screen, args| screen.should.be.instance_of BasicScreen }
|
159
159
|
screen = @screen.open BasicScreen, close_all: true
|
160
160
|
screen.should.be.kind_of BasicScreen
|
161
161
|
end
|
@@ -218,7 +218,7 @@ describe "screen helpers" do
|
|
218
218
|
it "should open the provided view controller as root view if no other conditions are met" do
|
219
219
|
parent_screen = HomeScreen.new
|
220
220
|
new_screen = BasicScreen.new
|
221
|
-
parent_screen.mock!(:open_root_screen) { |vc| vc.should.be == new_screen }
|
221
|
+
parent_screen.mock!(:open_root_screen) { |vc, args| vc.should.be == new_screen }
|
222
222
|
screen = parent_screen.open_screen new_screen
|
223
223
|
screen.should == new_screen
|
224
224
|
end
|
@@ -18,7 +18,6 @@ describe "Searchable table spec" do
|
|
18
18
|
|
19
19
|
it "should allow searching for all the 'New' states" do
|
20
20
|
controller.willPresentSearchController(controller.search_controller)
|
21
|
-
controller.searching?.should == true
|
22
21
|
controller.search_controller.searchBar.text = "New"
|
23
22
|
controller.updateSearchResultsForSearchController(controller.search_controller)
|
24
23
|
controller.tableView(controller.tableView, numberOfRowsInSection:0).should == 4
|
@@ -37,34 +36,17 @@ describe "Searchable table spec" do
|
|
37
36
|
controller.tableView(controller.tableView, numberOfRowsInSection:0).should == 50
|
38
37
|
end
|
39
38
|
|
40
|
-
it "should
|
41
|
-
controller.
|
42
|
-
controller.
|
43
|
-
controller.updateSearchResultsForSearchController(controller.search_controller)
|
39
|
+
it "should call the start and stop searching callbacks properly" do
|
40
|
+
controller.will_begin_search_called.should == nil
|
41
|
+
controller.will_end_search_called.should == nil
|
44
42
|
|
45
|
-
controller.
|
46
|
-
controller.
|
43
|
+
controller.willPresentSearchController(controller.search_controller)
|
44
|
+
controller.will_begin_search_called.should == true
|
47
45
|
|
48
46
|
controller.willDismissSearchController(controller.search_controller)
|
49
|
-
controller.
|
50
|
-
controller.updateSearchResultsForSearchController(controller.search_controller) # iOS calls this again
|
51
|
-
|
52
|
-
controller.search_string.should == false
|
53
|
-
controller.original_search_string.should == false
|
47
|
+
controller.will_end_search_called.should == true
|
54
48
|
end
|
55
49
|
|
56
|
-
# FIXME: Can't figure out why this test passes in isolation, but fails when run after the other tests.
|
57
|
-
# it "should call the start and stop searching callbacks properly" do
|
58
|
-
# controller.will_begin_search_called.should == nil
|
59
|
-
# controller.will_end_search_called.should == nil
|
60
|
-
|
61
|
-
# controller.willPresentSearchController(controller.search_controller)
|
62
|
-
# controller.will_begin_search_called.should == true
|
63
|
-
|
64
|
-
# controller.willDismissSearchController(controller.search_controller)
|
65
|
-
# controller.will_end_search_called.should == true
|
66
|
-
# end
|
67
|
-
|
68
50
|
describe "custom search" do
|
69
51
|
before do
|
70
52
|
@stabby_controller = TableScreenStabbySearchable.new
|
@@ -8,20 +8,23 @@ describe "table screen searchable functionality" do
|
|
8
8
|
@screen.class.get_searchable.should == true
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
# Older than iOS 11 tests
|
12
|
+
if TestHelper.lt_ios11
|
13
|
+
it "should create a search header" do
|
14
|
+
@screen.tableView.tableHeaderView.should.be.kind_of UISearchBar
|
15
|
+
end
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
-
|
17
|
+
it "should not hide the search bar initally by default" do
|
18
|
+
@screen.tableView.contentOffset.should == CGPointMake(0,0)
|
19
|
+
end
|
18
20
|
|
19
|
-
|
20
|
-
|
21
|
-
|
21
|
+
it "should allow hiding the search bar initally" do
|
22
|
+
class HiddenSearchScreen < TableScreenSearchable
|
23
|
+
searchable hide_initially: true
|
24
|
+
end
|
25
|
+
screen = HiddenSearchScreen.new
|
26
|
+
screen.on_load
|
27
|
+
screen.tableView.contentOffset.should == CGPointMake(0, screen.tableView.tableHeaderView.frame.size.height)
|
22
28
|
end
|
23
|
-
screen = HiddenSearchScreen.new
|
24
|
-
screen.on_load
|
25
|
-
screen.tableView.contentOffset.should == CGPointMake(0, screen.tableView.tableHeaderView.frame.size.height)
|
26
29
|
end
|
27
30
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ProMotion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamon Holmgren
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2018-04-
|
13
|
+
date: 2018-04-24 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: methadone
|