ProMotion 0.7.8 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -1
- data/.travis.yml +1 -1
- data/ProMotion.gemspec +2 -0
- data/README.md +51 -449
- data/Rakefile +11 -1
- data/app/screens/basic_screen.rb +0 -24
- data/lib/ProMotion/cocoatouch/{NavigationController.rb → navigation_controller.rb} +0 -0
- data/lib/ProMotion/cocoatouch/split_view_controller.rb +29 -0
- data/lib/ProMotion/cocoatouch/tab_bar_controller.rb +43 -0
- data/lib/ProMotion/cocoatouch/{TableViewCell.rb → table_view_cell.rb} +0 -1
- data/lib/ProMotion/cocoatouch/{TableViewController.rb → table_view_controller.rb} +0 -0
- data/lib/ProMotion/cocoatouch/{ViewController.rb → view_controller.rb} +6 -1
- data/lib/ProMotion/{screen_helpers → containers}/split_screen.rb +0 -2
- data/lib/ProMotion/containers/tabs.rb +95 -0
- data/lib/ProMotion/delegate/delegate.rb +2 -13
- data/lib/ProMotion/delegate/{delegate_helper.rb → delegate_module.rb} +29 -16
- data/lib/ProMotion/delegate/delegate_notifications.rb +17 -8
- data/lib/ProMotion/delegate/delegate_parent.rb +11 -0
- data/lib/ProMotion/extensions/conversions.rb +20 -0
- data/lib/ProMotion/{helpers/logger.rb → logger.rb} +0 -0
- data/lib/ProMotion/map/map_screen.rb +6 -0
- data/lib/ProMotion/map/map_screen_annotation.rb +56 -0
- data/lib/ProMotion/map/map_screen_module.rb +207 -0
- data/lib/ProMotion/{push_notifications → push_notification}/push_notification.rb +13 -6
- data/lib/ProMotion/{screens → screen}/screen.rb +1 -1
- data/lib/ProMotion/{screens/_screen_module.rb → screen/screen_module.rb} +76 -51
- data/lib/ProMotion/{screen_helpers → screen}/screen_navigation.rb +8 -12
- data/lib/ProMotion/{screens/_tables → table/cell}/table_view_cell_module.rb +18 -27
- data/lib/ProMotion/table/data/table_data.rb +98 -0
- data/lib/ProMotion/table/extensions/indexable.rb +9 -0
- data/lib/ProMotion/table/extensions/refreshable.rb +45 -0
- data/lib/ProMotion/table/extensions/searchable.rb +61 -0
- data/lib/ProMotion/table/grouped_table.rb +9 -0
- data/lib/ProMotion/table/grouped_table_screen.rb +6 -0
- data/lib/ProMotion/table/table.rb +312 -0
- data/lib/ProMotion/table/table_screen.rb +6 -0
- data/lib/ProMotion/{screens/_compatibility → thirdparty}/formotion_screen.rb +18 -5
- data/lib/ProMotion/version.rb +1 -1
- data/lib/ProMotion/view/styling.rb +137 -0
- data/lib/ProMotion/web/web_screen.rb +6 -0
- data/lib/ProMotion/web/web_screen_module.rb +155 -0
- data/resources/WebScreen.html +6 -0
- data/resources/test.jpeg +0 -0
- data/spec/functional/func_map_screen_spec.rb +105 -0
- data/spec/functional/func_screen_spec.rb +54 -7
- data/spec/functional/func_searchable_table_spec.rb +1 -1
- data/spec/functional/func_tab_bar_spec.rb +78 -0
- data/spec/functional/func_table_screen_spec.rb +61 -14
- data/spec/functional/func_web_screen_spec.rb +51 -0
- data/spec/helpers/map_screen.rb +51 -0
- data/spec/helpers/present_screen.rb +26 -0
- data/spec/helpers/tab_screen.rb +4 -0
- data/spec/helpers/table_screen.rb +12 -3
- data/spec/helpers/table_screen_formotion.rb +25 -0
- data/spec/helpers/table_screen_indexable.rb +13 -0
- data/spec/helpers/test_delegate.rb +28 -0
- data/spec/helpers/web_screen.rb +22 -0
- data/spec/unit/delegate_spec.rb +53 -4
- data/spec/unit/map_spec.rb +48 -0
- data/spec/unit/screen_helpers_spec.rb +24 -16
- data/spec/unit/screen_spec.rb +22 -18
- data/spec/unit/split_screen_in_tab_bar_spec.rb +2 -2
- data/spec/unit/split_screen_open_screen_spec.rb +15 -10
- data/spec/unit/split_screen_spec.rb +2 -2
- data/spec/unit/tab_spec.rb +41 -0
- data/spec/unit/tables/formotion_screen_spec.rb +16 -0
- data/spec/unit/tables/table_indexable_spec.rb +12 -0
- data/spec/unit/tables/table_module_spec.rb +24 -9
- data/spec/unit/tables/table_screen_spec.rb +1 -1
- data/spec/unit/tables/table_view_cell_spec.rb +9 -8
- data/spec/unit/view_helper_spec.rb +2 -2
- data/spec/unit/web_spec.rb +106 -0
- metadata +96 -35
- data/lib/ProMotion/cocoatouch/SplitViewController.rb +0 -23
- data/lib/ProMotion/helpers/console.rb +0 -29
- data/lib/ProMotion/helpers/measure_helper.rb +0 -20
- data/lib/ProMotion/helpers/system_helper.rb +0 -29
- data/lib/ProMotion/helpers/view_helper.rb +0 -82
- data/lib/ProMotion/screen_helpers/screen_elements.rb +0 -36
- data/lib/ProMotion/screen_helpers/screen_tabs.rb +0 -95
- data/lib/ProMotion/screens/_table_screen_module.rb +0 -47
- data/lib/ProMotion/screens/_tables/_refreshable_table.rb +0 -45
- data/lib/ProMotion/screens/_tables/_searchable_table.rb +0 -60
- data/lib/ProMotion/screens/_tables/_sectioned_table.rb +0 -5
- data/lib/ProMotion/screens/_tables/_table.rb +0 -169
- data/lib/ProMotion/screens/_tables/grouped_table.rb +0 -16
- data/lib/ProMotion/screens/_tables/plain_table.rb +0 -17
- data/lib/ProMotion/screens/_tables/table_data.rb +0 -175
- data/lib/ProMotion/screens/behaves_like_screen.rb +0 -10
- data/lib/ProMotion/screens/table_screen.rb +0 -16
- data/spec/unit/ios_version_spec.rb +0 -28
@@ -1,169 +0,0 @@
|
|
1
|
-
module ProMotion
|
2
|
-
module Table
|
3
|
-
include ProMotion::ViewHelper
|
4
|
-
|
5
|
-
def table_setup
|
6
|
-
check_table_data
|
7
|
-
set_up_table_view
|
8
|
-
set_up_searchable
|
9
|
-
set_up_refreshable
|
10
|
-
end
|
11
|
-
|
12
|
-
def check_table_data
|
13
|
-
PM.logger.error "Missing #table_data method in TableScreen #{self.class.to_s}." unless self.respond_to?(:table_data)
|
14
|
-
end
|
15
|
-
|
16
|
-
def set_up_table_view
|
17
|
-
self.view = self.create_table_view_from_data(self.table_data)
|
18
|
-
end
|
19
|
-
|
20
|
-
def set_up_searchable
|
21
|
-
if self.class.respond_to?(:get_searchable) && self.class.get_searchable
|
22
|
-
self.make_searchable(content_controller: self, search_bar: self.class.get_searchable_params)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def set_up_refreshable
|
27
|
-
if self.class.respond_to?(:get_refreshable) && self.class.get_refreshable
|
28
|
-
if defined?(UIRefreshControl)
|
29
|
-
self.make_refreshable(self.class.get_refreshable_params)
|
30
|
-
else
|
31
|
-
PM.logger.warn "To use the refresh control on < iOS 6, you need to include the CocoaPod 'CKRefreshControl'."
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def create_table_view_from_data(data)
|
37
|
-
@promotion_table_data = TableData.new(data, table_view)
|
38
|
-
table_view
|
39
|
-
end
|
40
|
-
|
41
|
-
def update_table_view_data(data)
|
42
|
-
@promotion_table_data.data = data
|
43
|
-
table_view.reloadData
|
44
|
-
end
|
45
|
-
|
46
|
-
# Methods to retrieve data
|
47
|
-
|
48
|
-
def section_at_index(index)
|
49
|
-
@promotion_table_data.section(index)
|
50
|
-
end
|
51
|
-
|
52
|
-
def cell_at_section_and_index(section, index)
|
53
|
-
@promotion_table_data.cell(section: section, index: index)
|
54
|
-
end
|
55
|
-
|
56
|
-
def trigger_action(action, arguments)
|
57
|
-
if self.respond_to?(action)
|
58
|
-
expected_arguments = self.method(action).arity
|
59
|
-
if expected_arguments == 0
|
60
|
-
self.send(action)
|
61
|
-
elsif expected_arguments == 1 || expected_arguments == -1
|
62
|
-
self.send(action, arguments)
|
63
|
-
else
|
64
|
-
PM.logger.warn "#{action} expects #{expected_arguments} arguments. Maximum number of required arguments for an action is 1."
|
65
|
-
end
|
66
|
-
else
|
67
|
-
PM.logger.info "Action not implemented: #{action.to_s}"
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def accessory_toggled_switch(switch)
|
72
|
-
# table_cell = switch.superview
|
73
|
-
table_cell = closest_parent(UITableViewCell, switch)
|
74
|
-
# index_path = table_cell.superview.indexPathForCell(table_cell)
|
75
|
-
index_path = closest_parent(UITableView, table_cell).indexPathForCell(table_cell)
|
76
|
-
|
77
|
-
data_cell = cell_at_section_and_index(index_path.section, index_path.row)
|
78
|
-
data_cell[:accessory][:arguments] = {} unless data_cell[:accessory][:arguments]
|
79
|
-
data_cell[:accessory][:arguments][:value] = switch.isOn if data_cell[:accessory][:arguments].is_a? Hash
|
80
|
-
|
81
|
-
trigger_action(data_cell[:accessory][:action], data_cell[:accessory][:arguments]) if data_cell[:accessory][:action]
|
82
|
-
end
|
83
|
-
|
84
|
-
def delete_row(index_paths, animation = nil)
|
85
|
-
animation ||= UITableViewRowAnimationAutomatic
|
86
|
-
index_paths = Array(index_paths)
|
87
|
-
|
88
|
-
index_paths.each do |index_path|
|
89
|
-
@promotion_table_data.delete_cell(index_path: index_path)
|
90
|
-
end
|
91
|
-
table_view.deleteRowsAtIndexPaths(index_paths, withRowAnimation:animation)
|
92
|
-
end
|
93
|
-
|
94
|
-
########## Cocoa touch methods #################
|
95
|
-
def numberOfSectionsInTableView(table_view)
|
96
|
-
return Array(@promotion_table_data.data).length
|
97
|
-
end
|
98
|
-
|
99
|
-
# Number of cells
|
100
|
-
def tableView(table_view, numberOfRowsInSection:section)
|
101
|
-
return @promotion_table_data.section_length(section)
|
102
|
-
0
|
103
|
-
end
|
104
|
-
|
105
|
-
def tableView(table_view, titleForHeaderInSection:section)
|
106
|
-
return section_at_index(section)[:title] if section_at_index(section) && section_at_index(section)[:title]
|
107
|
-
end
|
108
|
-
|
109
|
-
# Set table_data_index if you want the right hand index column (jumplist)
|
110
|
-
def sectionIndexTitlesForTableView(table_view)
|
111
|
-
if @promotion_table_data.filtered
|
112
|
-
nil
|
113
|
-
else
|
114
|
-
self.table_data_index if self.respond_to?(:table_data_index)
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
def tableView(table_view, cellForRowAtIndexPath:index_path)
|
119
|
-
@promotion_table_data.table_view_cell(index_path: index_path)
|
120
|
-
end
|
121
|
-
|
122
|
-
def tableView(table_view, heightForRowAtIndexPath:index_path)
|
123
|
-
(@promotion_table_data.cell(index_path: index_path)[:height] || table_view.rowHeight).to_f
|
124
|
-
end
|
125
|
-
|
126
|
-
def tableView(table_view, didSelectRowAtIndexPath:index_path)
|
127
|
-
cell = @promotion_table_data.cell(index_path: index_path)
|
128
|
-
table_view.deselectRowAtIndexPath(index_path, animated: true)
|
129
|
-
|
130
|
-
cell[:arguments] ||= {}
|
131
|
-
cell[:arguments][:cell] = cell if cell[:arguments].is_a?(Hash) # TODO: Should we really do this?
|
132
|
-
|
133
|
-
trigger_action(cell[:action], cell[:arguments]) if cell[:action]
|
134
|
-
end
|
135
|
-
|
136
|
-
def tableView(table_view, editingStyleForRowAtIndexPath: index_path)
|
137
|
-
UITableViewCellEditingStyleNone
|
138
|
-
end
|
139
|
-
|
140
|
-
def tableView(tableView, commitEditingStyle:editing_style, forRowAtIndexPath:index_path)
|
141
|
-
if editing_style == UITableViewCellEditingStyleDelete
|
142
|
-
delete_cell(index_path)
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
def tableView(tableView, sectionForSectionIndexTitle:title, atIndex:index)
|
147
|
-
return index unless ["{search}", UITableViewIndexSearch].include?(self.table_data_index[0])
|
148
|
-
|
149
|
-
if index == 0
|
150
|
-
tableView.setContentOffset(CGPointZero, animated:false)
|
151
|
-
NSNotFound
|
152
|
-
else
|
153
|
-
index-1
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
def deleteRowsAtIndexPaths(indexPaths, withRowAnimation:animation)
|
158
|
-
PM.logger.warn "ProMotion expects you to use 'delete_cell(index_paths, animation)'' instead of 'deleteRowsAtIndexPaths(indexPaths, withRowAnimation:animation)'."
|
159
|
-
delete_cell(indexPaths, animation)
|
160
|
-
end
|
161
|
-
|
162
|
-
|
163
|
-
# Old aliases, deprecated, will be removed
|
164
|
-
alias :createTableViewFromData :create_table_view_from_data
|
165
|
-
alias :updateTableViewData :update_table_view_data
|
166
|
-
alias :cellAtSectionAndIndex :cell_at_section_and_index
|
167
|
-
|
168
|
-
end
|
169
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module ProMotion
|
2
|
-
module GroupedTable
|
3
|
-
include Table
|
4
|
-
include RefreshableTable
|
5
|
-
|
6
|
-
def table_view
|
7
|
-
@table_view ||= begin
|
8
|
-
t = UITableView.alloc.initWithFrame(self.view.frame, style:UITableViewStyleGrouped)
|
9
|
-
t.dataSource = self
|
10
|
-
t.delegate = self
|
11
|
-
t
|
12
|
-
end
|
13
|
-
end
|
14
|
-
alias :tableView :table_view
|
15
|
-
end
|
16
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module ProMotion
|
2
|
-
module PlainTable
|
3
|
-
include Table
|
4
|
-
include SearchableTable
|
5
|
-
include RefreshableTable
|
6
|
-
|
7
|
-
def table_view
|
8
|
-
@table_view ||= begin
|
9
|
-
t = UITableView.alloc.initWithFrame(self.view.frame, style:UITableViewStylePlain)
|
10
|
-
t.dataSource = self
|
11
|
-
t.delegate = self
|
12
|
-
t
|
13
|
-
end
|
14
|
-
end
|
15
|
-
alias :tableView :table_view
|
16
|
-
end
|
17
|
-
end
|
@@ -1,175 +0,0 @@
|
|
1
|
-
module ProMotion
|
2
|
-
class TableData
|
3
|
-
attr_accessor :data, :filtered_data, :filtered, :table_view
|
4
|
-
|
5
|
-
def initialize(data, table_view)
|
6
|
-
self.data = data
|
7
|
-
self.table_view = table_view
|
8
|
-
end
|
9
|
-
|
10
|
-
def section(index)
|
11
|
-
s = sections.at(index)
|
12
|
-
s || { title: nil, cells: [] }
|
13
|
-
end
|
14
|
-
|
15
|
-
def sections
|
16
|
-
self.filtered ? self.filtered_data : self.data
|
17
|
-
end
|
18
|
-
|
19
|
-
def section_length(index)
|
20
|
-
section(index)[:cells].length
|
21
|
-
end
|
22
|
-
|
23
|
-
def cell(params={})
|
24
|
-
if params[:index_path]
|
25
|
-
params[:section] = params[:index_path].section
|
26
|
-
params[:index] = params[:index_path].row
|
27
|
-
end
|
28
|
-
|
29
|
-
table_section = self.section(params[:section])
|
30
|
-
table_section[:cells].at(params[:index].to_i)
|
31
|
-
end
|
32
|
-
|
33
|
-
def delete_cell(params={})
|
34
|
-
if params[:index_path]
|
35
|
-
params[:section] = params[:index_path].section
|
36
|
-
params[:index] = params[:index_path].row
|
37
|
-
end
|
38
|
-
|
39
|
-
table_section = self.section(params[:section])
|
40
|
-
table_section[:cells].delete_at(params[:index].to_i)
|
41
|
-
end
|
42
|
-
|
43
|
-
def search(search_string)
|
44
|
-
self.filtered_data = []
|
45
|
-
self.filtered = true
|
46
|
-
|
47
|
-
search_string = search_string.downcase.strip
|
48
|
-
|
49
|
-
self.data.each do |section|
|
50
|
-
new_section = {}
|
51
|
-
new_section[:cells] = []
|
52
|
-
|
53
|
-
new_section[:cells] = section[:cells].map do |cell|
|
54
|
-
cell[:searchable] != false && "#{cell[:title]}\n#{cell[:search_text]}".downcase.strip.include?(search_string) ? cell : nil
|
55
|
-
end.compact
|
56
|
-
|
57
|
-
if new_section[:cells] && new_section[:cells].length > 0
|
58
|
-
new_section[:title] = section[:title]
|
59
|
-
self.filtered_data << new_section
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
self.filtered_data
|
64
|
-
end
|
65
|
-
|
66
|
-
def stop_searching
|
67
|
-
self.filtered_data = []
|
68
|
-
self.filtered = false
|
69
|
-
end
|
70
|
-
|
71
|
-
def table_view_cell(params={})
|
72
|
-
if params[:index_path]
|
73
|
-
params[:section] = params[:index_path].section
|
74
|
-
params[:index] = params[:index_path].row
|
75
|
-
end
|
76
|
-
|
77
|
-
data_cell = self.cell(section: params[:section], index: params[:index])
|
78
|
-
return UITableViewCell.alloc.init unless data_cell # No data?
|
79
|
-
|
80
|
-
data_cell = self.remap_data_cell(data_cell) # TODO: Deprecated, remove in version 1.0
|
81
|
-
data_cell = self.set_data_cell_defaults(data_cell)
|
82
|
-
|
83
|
-
table_cell = self.create_table_cell(data_cell)
|
84
|
-
|
85
|
-
table_cell
|
86
|
-
end
|
87
|
-
|
88
|
-
def set_data_cell_defaults(data_cell)
|
89
|
-
data_cell[:cell_style] ||= UITableViewCellStyleDefault
|
90
|
-
data_cell[:cell_identifier] ||= build_cell_identifier(data_cell)
|
91
|
-
data_cell[:cell_class] ||= ProMotion::TableViewCell
|
92
|
-
data_cell
|
93
|
-
end
|
94
|
-
|
95
|
-
def remap_data_cell(data_cell)
|
96
|
-
# Re-maps legacy data cell calls
|
97
|
-
mappings = {
|
98
|
-
cell_style: :cellStyle,
|
99
|
-
cell_identifier: :cellIdentifier,
|
100
|
-
cell_class: :cellClass,
|
101
|
-
masks_to_bounds: :masksToBounds,
|
102
|
-
background_color: :backgroundColor,
|
103
|
-
selection_style: :selectionStyle,
|
104
|
-
cell_class_attributes: :cellClassAttributes,
|
105
|
-
accessory: :accessoryView,
|
106
|
-
accessory: :accessory_view,
|
107
|
-
accessory_type: :accessoryType,
|
108
|
-
accessory_action: :accessoryAction,
|
109
|
-
accessory_checked: :accessoryDefault,
|
110
|
-
remote_image: :remoteImage,
|
111
|
-
subviews: :subViews
|
112
|
-
}
|
113
|
-
|
114
|
-
if data_cell[:masks_to_bounds]
|
115
|
-
PM.logger.deprecated "masks_to_bounds: (value) is deprecated. Use layer: { masks_to_bounds: (value) } instead."
|
116
|
-
data_cell[:layer] ||= {}
|
117
|
-
data_cell[:layer][:masks_to_bounds] = data_cell[:masks_to_bounds] # TODO: Deprecate and then remove this.
|
118
|
-
end
|
119
|
-
|
120
|
-
mappings.each_pair do |n, old|
|
121
|
-
if data_cell[old]
|
122
|
-
PM.logger.deprecated "`:#{old}` is deprecated in TableScreens. Use `:#{n}`"
|
123
|
-
data_cell[n] = data_cell[old]
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
if data_cell[:styles] && data_cell[:styles][:textLabel]
|
128
|
-
PM.logger.deprecated "`:textLabel` is deprecated in TableScreens. Use `:label`"
|
129
|
-
data_cell[:styles][:label] = data_cell[:styles][:textLabel]
|
130
|
-
end
|
131
|
-
|
132
|
-
# Fix the accessory view if needed
|
133
|
-
# Legacy Support < 0.7.4
|
134
|
-
data_cell[:accessory] ||= data_cell[:accessory_view]
|
135
|
-
data_cell[:accessory] = {
|
136
|
-
view: data_cell[:accessory],
|
137
|
-
value: data_cell[:accessory_value],
|
138
|
-
action: data_cell[:accessory_action],
|
139
|
-
arguments: data_cell[:accessory_arguments]
|
140
|
-
} unless data_cell[:accessory].is_a? Hash
|
141
|
-
|
142
|
-
data_cell
|
143
|
-
end
|
144
|
-
|
145
|
-
def create_table_cell(data_cell)
|
146
|
-
table_cell = table_view.dequeueReusableCellWithIdentifier(data_cell[:cell_identifier])
|
147
|
-
|
148
|
-
unless table_cell
|
149
|
-
table_cell = data_cell[:cell_class].alloc.initWithStyle(data_cell[:cell_style], reuseIdentifier:data_cell[:cell_identifier])
|
150
|
-
table_cell.extend ProMotion::TableViewCellModule unless table_cell.is_a?(ProMotion::TableViewCellModule)
|
151
|
-
table_cell.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin
|
152
|
-
end
|
153
|
-
|
154
|
-
table_cell.setup(data_cell)
|
155
|
-
|
156
|
-
table_cell
|
157
|
-
end
|
158
|
-
|
159
|
-
def build_cell_identifier(data_cell)
|
160
|
-
ident = "Cell"
|
161
|
-
unless data_cell[:accessory].nil?
|
162
|
-
if data_cell[:accessory][:view] == :switch
|
163
|
-
ident << "-switch"
|
164
|
-
elsif !data_cell[:accessory][:view].nil?
|
165
|
-
ident << "-accessory"
|
166
|
-
end
|
167
|
-
end
|
168
|
-
ident << "-subtitle" if data_cell[:subtitle]
|
169
|
-
ident << "-remoteimage" if data_cell[:remote_image]
|
170
|
-
ident << "-image" if data_cell[:image]
|
171
|
-
ident
|
172
|
-
end
|
173
|
-
|
174
|
-
end
|
175
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module ProMotion
|
2
|
-
# You can inherit a table screen from any UITableViewController if you include TableScreenModule
|
3
|
-
# Just make sure to implement the Obj-C methods in cocoatouch/TableViewController.rb.
|
4
|
-
class TableScreen < TableViewController
|
5
|
-
include ProMotion::TableScreenModule
|
6
|
-
# Includes PM::PlainTable already
|
7
|
-
end
|
8
|
-
|
9
|
-
class GroupedTableScreen < TableScreen
|
10
|
-
include ProMotion::GroupedTable
|
11
|
-
end
|
12
|
-
|
13
|
-
class SectionedTableScreen < TableScreen
|
14
|
-
include ProMotion::SectionedTable
|
15
|
-
end
|
16
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
describe "ios version" do
|
2
|
-
|
3
|
-
before do
|
4
|
-
@dummy = DummyClass.new
|
5
|
-
@dummy.extend ProMotion::SystemHelper
|
6
|
-
end
|
7
|
-
|
8
|
-
it "#ios_version_is?" do
|
9
|
-
@dummy.ios_version_is?(@dummy.ios_version).should.be.true
|
10
|
-
end
|
11
|
-
|
12
|
-
it "#ios_version_greater?" do
|
13
|
-
@dummy.ios_version_greater?('1.0').should.be.true
|
14
|
-
end
|
15
|
-
|
16
|
-
it "#ios_version_greater_eq?" do
|
17
|
-
@dummy.ios_version_greater_eq?(@dummy.ios_version).should.be.true
|
18
|
-
end
|
19
|
-
|
20
|
-
it "#ios_version_less?" do
|
21
|
-
@dummy.ios_version_less?('9.0').should.be.true
|
22
|
-
end
|
23
|
-
|
24
|
-
it "#ios_version_less_eq?" do
|
25
|
-
@dummy.ios_version_less_eq?(@dummy.ios_version).should.be.true
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|