ProMotion 1.2.1 → 2.0.0.rc1
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 +36 -10
- data/lib/ProMotion.rb +11 -2
- data/lib/ProMotion/cocoatouch/ns_string.rb +5 -0
- data/lib/ProMotion/cocoatouch/ns_url.rb +5 -0
- data/lib/ProMotion/cocoatouch/tab_bar_controller.rb +5 -7
- data/lib/ProMotion/cocoatouch/table_view_cell.rb +0 -16
- data/lib/ProMotion/cocoatouch/table_view_controller.rb +2 -3
- data/lib/ProMotion/cocoatouch/view_controller.rb +3 -6
- data/lib/ProMotion/delegate/delegate.rb +0 -3
- data/lib/ProMotion/delegate/delegate_module.rb +24 -20
- data/lib/ProMotion/{containers → ipad}/split_screen.rb +30 -32
- data/lib/ProMotion/{logger.rb → logger/logger.rb} +6 -5
- data/lib/ProMotion/screen/nav_bar_module.rb +126 -0
- data/lib/ProMotion/screen/screen.rb +0 -3
- data/lib/ProMotion/screen/screen_module.rb +54 -177
- data/lib/ProMotion/screen/screen_navigation.rb +29 -40
- data/lib/ProMotion/{view → styling}/styling.rb +17 -47
- data/lib/ProMotion/table/cell/table_view_cell_module.rb +76 -123
- data/lib/ProMotion/table/data/table_data.rb +1 -1
- data/lib/ProMotion/table/extensions/longpressable.rb +24 -0
- data/lib/ProMotion/table/extensions/refreshable.rb +1 -0
- data/lib/ProMotion/table/grouped_table_screen.rb +0 -5
- data/lib/ProMotion/table/table.rb +63 -83
- data/lib/ProMotion/table/table_screen.rb +0 -4
- data/lib/ProMotion/{containers → tabs}/tabs.rb +20 -21
- data/lib/ProMotion/version.rb +1 -1
- data/lib/ProMotion/web/web_screen.rb +0 -4
- data/lib/ProMotion/web/web_screen_module.rb +8 -5
- data/spec/functional/func_screen_spec.rb +14 -18
- data/spec/functional/func_split_screen_spec.rb +2 -2
- data/spec/functional/func_table_screen_spec.rb +54 -40
- data/spec/functional/func_web_screen_spec.rb +12 -17
- data/spec/helpers/test_helper.rb +27 -0
- data/spec/unit/delegate_spec.rb +4 -67
- data/spec/unit/image_title_screen.rb +9 -0
- data/spec/unit/image_view_title_screen.rb +9 -0
- data/spec/unit/load_view_spec.rb +27 -0
- data/spec/unit/main_spec.rb +0 -6
- data/spec/unit/screen_helpers_spec.rb +23 -17
- data/spec/unit/screen_spec.rb +21 -17
- data/spec/unit/searchable_table_spec.rb +55 -0
- data/spec/unit/split_screen_in_tab_bar_spec.rb +5 -5
- data/spec/unit/split_screen_spec.rb +4 -4
- data/spec/unit/tab_bar_spec.rb +79 -0
- data/spec/unit/tab_spec.rb +11 -5
- data/spec/unit/tables/table_module_spec.rb +22 -8
- data/spec/unit/tables/table_screen_spec.rb +1 -1
- data/spec/unit/tables/table_view_cell_spec.rb +16 -16
- data/spec/unit/view_helper_spec.rb +6 -81
- data/spec/unit/view_title_screen.rb +10 -0
- data/spec/unit/web_spec.rb +31 -37
- metadata +37 -111
- data/.gitignore +0 -33
- data/.travis.yml +0 -4
- data/CONTRIBUTING.md +0 -20
- data/Gemfile +0 -5
- data/LICENSE +0 -22
- data/ProMotion.gemspec +0 -30
- data/Rakefile +0 -66
- data/app/app_delegate.rb +0 -7
- data/app/screens/basic_screen.rb +0 -15
- data/lib/ProMotion/delegate/delegate_notifications.rb +0 -70
- data/lib/ProMotion/extensions/conversions.rb +0 -20
- data/lib/ProMotion/map/map_screen.rb +0 -10
- data/lib/ProMotion/map/map_screen_annotation.rb +0 -65
- data/lib/ProMotion/map/map_screen_module.rb +0 -212
- data/lib/ProMotion/push_notification/push_notification.rb +0 -58
- data/resources/WebScreen.html +0 -6
- data/resources/list.png +0 -0
- data/resources/test.png +0 -0
- data/spec/functional/func_image_title_screen.rb +0 -20
- data/spec/functional/func_image_view_title_screen.rb +0 -20
- data/spec/functional/func_map_screen_spec.rb +0 -162
- data/spec/functional/func_searchable_table_spec.rb +0 -56
- data/spec/functional/func_tab_bar_spec.rb +0 -78
- data/spec/functional/func_view_title_screen.rb +0 -21
- data/spec/helpers/basic_screen.rb +0 -3
- data/spec/helpers/custom_title_view.rb +0 -4
- data/spec/helpers/detail_screen.rb +0 -3
- data/spec/helpers/dummy_class.rb +0 -3
- data/spec/helpers/functional_screen.rb +0 -15
- data/spec/helpers/home_screen.rb +0 -19
- data/spec/helpers/image_title_screen.rb +0 -15
- data/spec/helpers/image_view_title_screen.rb +0 -15
- data/spec/helpers/map_screen.rb +0 -53
- data/spec/helpers/master_screen.rb +0 -3
- data/spec/helpers/present_screen.rb +0 -26
- data/spec/helpers/screen_module_view_controller.rb +0 -55
- data/spec/helpers/tab_screen.rb +0 -4
- data/spec/helpers/table_screen.rb +0 -117
- data/spec/helpers/table_screen_indexable.rb +0 -18
- data/spec/helpers/table_screen_refreshable.rb +0 -11
- data/spec/helpers/table_screen_searchable.rb +0 -72
- data/spec/helpers/test_delegate.rb +0 -34
- data/spec/helpers/test_delegate_colors.rb +0 -17
- data/spec/helpers/view_title_screen.rb +0 -15
- data/spec/helpers/web_screen.rb +0 -23
- data/spec/unit/map_spec.rb +0 -71
data/spec/helpers/dummy_class.rb
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
class FunctionalScreen < PM::Screen
|
|
2
|
-
attr_accessor :button_was_triggered
|
|
3
|
-
|
|
4
|
-
title "Functional"
|
|
5
|
-
|
|
6
|
-
def will_appear
|
|
7
|
-
self.button_was_triggered = false
|
|
8
|
-
add UILabel.alloc.initWithFrame([[ 10, 10 ], [ 300, 40 ]]),
|
|
9
|
-
text: "Label Here"
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def triggered_button
|
|
13
|
-
self.button_was_triggered = true
|
|
14
|
-
end
|
|
15
|
-
end
|
data/spec/helpers/home_screen.rb
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
class HomeScreen < ProMotion::Screen
|
|
2
|
-
|
|
3
|
-
title "Home"
|
|
4
|
-
|
|
5
|
-
def on_load
|
|
6
|
-
set_nav_bar_right_button "Save", action: :save_something, type: UIBarButtonItemStyleDone
|
|
7
|
-
set_nav_bar_left_button UIImage.imageNamed("list.png"), action: :return_to_some_other_screen, type: UIBarButtonItemStylePlain
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def on_return(args={})
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def subview_styles
|
|
14
|
-
{
|
|
15
|
-
backgroundColor: UIColor.greenColor
|
|
16
|
-
}
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
class ImageTitleScreen < PM::Screen
|
|
2
|
-
attr_accessor :button_was_triggered
|
|
3
|
-
|
|
4
|
-
title UIImage.imageNamed('test.png')
|
|
5
|
-
|
|
6
|
-
def will_appear
|
|
7
|
-
self.button_was_triggered = false
|
|
8
|
-
add UILabel.alloc.initWithFrame([[ 10, 10 ], [ 300, 40 ]]),
|
|
9
|
-
text: "Label Here"
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def triggered_button
|
|
13
|
-
self.button_was_triggered = true
|
|
14
|
-
end
|
|
15
|
-
end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
class ImageViewTitleScreen < PM::Screen
|
|
2
|
-
attr_accessor :button_was_triggered
|
|
3
|
-
|
|
4
|
-
title UIImageView.alloc.initWithImage(UIImage.imageNamed('test.png'))
|
|
5
|
-
|
|
6
|
-
def will_appear
|
|
7
|
-
self.button_was_triggered = false
|
|
8
|
-
add UILabel.alloc.initWithFrame([[ 10, 10 ], [ 300, 40 ]]),
|
|
9
|
-
text: "Label Here"
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def triggered_button
|
|
13
|
-
self.button_was_triggered = true
|
|
14
|
-
end
|
|
15
|
-
end
|
data/spec/helpers/map_screen.rb
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
class TestMapScreen < PM::MapScreen
|
|
2
|
-
|
|
3
|
-
attr_accessor :infinite_loop_points, :request_complete
|
|
4
|
-
|
|
5
|
-
start_position latitude: 35.090648651123, longitude: -82.965972900391, radius: 4
|
|
6
|
-
title "Gorges State Park, NC"
|
|
7
|
-
|
|
8
|
-
def get_title
|
|
9
|
-
self.title
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def promotion_annotation_data
|
|
13
|
-
@promotion_annotation_data
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def annotation_data
|
|
17
|
-
# Partial set of data from "GPS Map of Gorges State Park": http://www.hikewnc.info/maps/gorges-state-park/gps-map
|
|
18
|
-
@data ||= [{
|
|
19
|
-
longitude: -82.965972900391,
|
|
20
|
-
latitude: 35.090648651123,
|
|
21
|
-
title: "Rainbow Falls",
|
|
22
|
-
subtitle: "Nantahala National Forest",
|
|
23
|
-
},{
|
|
24
|
-
longitude: -82.966093558105,
|
|
25
|
-
latitude: 35.092520895652,
|
|
26
|
-
title: "Turtleback Falls",
|
|
27
|
-
subtitle: "Nantahala National Forest",
|
|
28
|
-
},{
|
|
29
|
-
longitude: -82.95916,
|
|
30
|
-
latitude: 35.07496,
|
|
31
|
-
title: "Windy Falls"
|
|
32
|
-
},{
|
|
33
|
-
longitude: -82.943031505056,
|
|
34
|
-
latitude: 35.102516828489,
|
|
35
|
-
title: "Upper Bearwallow Falls",
|
|
36
|
-
subtitle: "Gorges State Park",
|
|
37
|
-
},{
|
|
38
|
-
longitude: -82.956244328014,
|
|
39
|
-
latitude: 35.085548421623,
|
|
40
|
-
title: "Stairway Falls",
|
|
41
|
-
subtitle: "Gorges State Park",
|
|
42
|
-
}]
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def lookup_infinite_loop
|
|
46
|
-
self.request_complete = false
|
|
47
|
-
self.look_up_address address: "1 Infinite Loop" do |points, error|
|
|
48
|
-
self.request_complete = true
|
|
49
|
-
self.infinite_loop_points = points
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
end
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
class PresentScreen < PM::Screen
|
|
2
|
-
attr_accessor :will_present_fired, :on_present_fired, :will_dismiss_fired, :on_dismiss_fired
|
|
3
|
-
|
|
4
|
-
def will_present
|
|
5
|
-
self.will_present_fired = true
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def on_present
|
|
9
|
-
self.on_present_fired = true
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def will_dismiss
|
|
13
|
-
self.will_dismiss_fired = true
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def on_dismiss
|
|
17
|
-
self.on_dismiss_fired = true
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def reset
|
|
21
|
-
self.will_present_fired = false
|
|
22
|
-
self.on_present_fired = false
|
|
23
|
-
self.will_dismiss_fired = false
|
|
24
|
-
self.on_dismiss_fired = false
|
|
25
|
-
end
|
|
26
|
-
end
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
class ScreenModuleViewController < UIViewController
|
|
2
|
-
include PM::ScreenModule
|
|
3
|
-
title 'Test Title'
|
|
4
|
-
|
|
5
|
-
# Get rid of such hackiness when RubyMotion bug is fixed...
|
|
6
|
-
|
|
7
|
-
def self.new(args = {})
|
|
8
|
-
s = self.alloc.initWithNibName(nil, bundle:nil)
|
|
9
|
-
s.on_create(args) if s.respond_to?(:on_create)
|
|
10
|
-
s
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def viewDidLoad
|
|
14
|
-
super
|
|
15
|
-
self.view_did_load if self.respond_to?(:view_did_load)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def viewWillAppear(animated)
|
|
19
|
-
super
|
|
20
|
-
self.view_will_appear(animated) if self.respond_to?("view_will_appear:")
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def viewDidAppear(animated)
|
|
24
|
-
super
|
|
25
|
-
self.view_did_appear(animated) if self.respond_to?("view_did_appear:")
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def viewWillDisappear(animated)
|
|
29
|
-
self.view_will_disappear(animated) if self.respond_to?("view_will_disappear:")
|
|
30
|
-
super
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def viewDidDisappear(animated)
|
|
34
|
-
if self.respond_to?("view_did_disappear:")
|
|
35
|
-
self.view_did_disappear(animated)
|
|
36
|
-
end
|
|
37
|
-
super
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def shouldAutorotateToInterfaceOrientation(orientation)
|
|
41
|
-
self.should_rotate(orientation)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def shouldAutorotate
|
|
45
|
-
self.should_autorotate
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def willRotateToInterfaceOrientation(orientation, duration:duration)
|
|
49
|
-
self.will_rotate(orientation, duration)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def didRotateFromInterfaceOrientation(orientation)
|
|
53
|
-
self.on_rotate
|
|
54
|
-
end
|
|
55
|
-
end
|
data/spec/helpers/tab_screen.rb
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
class TestTableScreen < ProMotion::TableScreen
|
|
2
|
-
|
|
3
|
-
attr_accessor :tap_counter, :cell_was_deleted
|
|
4
|
-
|
|
5
|
-
def on_load
|
|
6
|
-
self.tap_counter = 0
|
|
7
|
-
set_attributes self.view, { backgroundView: nil, backgroundColor: UIColor.whiteColor }
|
|
8
|
-
set_nav_bar_right_button UIImage.imageNamed("list.png"), action: :return_to_some_other_screen, type: UIBarButtonItemStylePlain
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def table_data
|
|
12
|
-
@data ||= [{
|
|
13
|
-
title: "Your Account",
|
|
14
|
-
cells: [
|
|
15
|
-
{ title: "Increment", action: :increment_counter_by, arguments: {number: 3} },
|
|
16
|
-
{ title: "Add New Row", action: :add_tableview_row },
|
|
17
|
-
{ title: "Delete the row below", action: :delete_cell, arguments: {section: 0, row:3} },
|
|
18
|
-
{ title: "Just another deletable blank row", editing_style: :delete },
|
|
19
|
-
{ title: "A non-deletable blank row", editing_style: :delete },
|
|
20
|
-
{ title: "Delete the row below with an animation", action: :delete_cell, arguments: {animated: true, section: 0, row:5 } },
|
|
21
|
-
{ title: "Just another blank row" }
|
|
22
|
-
]
|
|
23
|
-
}, {
|
|
24
|
-
title: "App Stuff",
|
|
25
|
-
cells: [
|
|
26
|
-
{ title: "Increment One", action: :increment_counter },
|
|
27
|
-
{ title: "Feedback", cell_identifier: "ImagedCell", remote_image: { url: "http://placekitten.com/100/100", placeholder: "some-local-image", size: 50, radius: 15 } }
|
|
28
|
-
]
|
|
29
|
-
}, {
|
|
30
|
-
title: "Image Tests",
|
|
31
|
-
cells: [
|
|
32
|
-
{ title: "Image Test 1", cell_identifier: "ImagedCell", image: {image: UIImage.imageNamed("list.png"), radius: 10} },
|
|
33
|
-
{ title: "Image Test 2", cell_identifier: "ImagedCell", image: {image: "list.png"} },
|
|
34
|
-
{ title: "Image Test 3", cell_identifier: "ImagedCell", cell_identifier: "ImagedCell", image: UIImage.imageNamed("list.png") },
|
|
35
|
-
{ title: "Image Test 4", image: "list.png" },
|
|
36
|
-
]
|
|
37
|
-
}, {
|
|
38
|
-
title: "Cell Accessory Tests",
|
|
39
|
-
cells: [{
|
|
40
|
-
title: "Switch With Action",
|
|
41
|
-
accessory: {
|
|
42
|
-
view: :switch,
|
|
43
|
-
action: :increment_counter,
|
|
44
|
-
accessibility_label: "switch_1"
|
|
45
|
-
} ,
|
|
46
|
-
}, {
|
|
47
|
-
title: "Switch With Action And Parameters",
|
|
48
|
-
accessory: {
|
|
49
|
-
view: :switch,
|
|
50
|
-
action: :increment_counter_by,
|
|
51
|
-
arguments: { number: 3 },
|
|
52
|
-
accessibility_label: "switch_2"
|
|
53
|
-
} ,
|
|
54
|
-
}, {
|
|
55
|
-
title: "Switch With Cell Tap, Switch Action And Parameters",
|
|
56
|
-
accessory:{
|
|
57
|
-
view: :switch,
|
|
58
|
-
action: :increment_counter_by,
|
|
59
|
-
arguments: { number: 3 },
|
|
60
|
-
accessibility_label: "switch_3"
|
|
61
|
-
},
|
|
62
|
-
action: :increment_counter_by,
|
|
63
|
-
arguments: { number: 10 }
|
|
64
|
-
}]
|
|
65
|
-
}]
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def edit_profile(args={})
|
|
69
|
-
args[:id]
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def add_tableview_row(args={})
|
|
73
|
-
@data[0][:cells] << {
|
|
74
|
-
title: "Dynamically Added"
|
|
75
|
-
}
|
|
76
|
-
update_table_data
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
def delete_cell(args={})
|
|
80
|
-
if args[:animated]
|
|
81
|
-
delete_row(NSIndexPath.indexPathForRow(args[:row], inSection:args[:section]))
|
|
82
|
-
else
|
|
83
|
-
@data[args[:section]][:cells].delete_at args[:row]
|
|
84
|
-
update_table_data
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
def on_cell_deleted(cell)
|
|
89
|
-
if cell[:title] == "A non-deletable blank row"
|
|
90
|
-
false
|
|
91
|
-
else
|
|
92
|
-
self.cell_was_deleted = true
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
def increment_counter
|
|
97
|
-
self.tap_counter = self.tap_counter + 1
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
def increment_counter_by(args={})
|
|
101
|
-
self.tap_counter = self.tap_counter + args[:number]
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
def custom_accessory_view
|
|
105
|
-
set_attributes UIView.new, {
|
|
106
|
-
background_color: UIColor.orangeColor
|
|
107
|
-
}
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def scroll_to_bottom
|
|
111
|
-
if table_view.contentSize.height > table_view.frame.size.height
|
|
112
|
-
offset = CGPointMake(0, table_view.contentSize.height - table_view.frame.size.height)
|
|
113
|
-
table_view.setContentOffset(offset, animated:false)
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
end
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
class TableScreenIndexable < PM::TableScreen
|
|
2
|
-
indexable
|
|
3
|
-
|
|
4
|
-
def table_data
|
|
5
|
-
%w{ Apple Google Microsoft Oracle Sun UNIX }.map do |group_name|
|
|
6
|
-
{
|
|
7
|
-
title: "#{group_name} Group",
|
|
8
|
-
cells: [{ title: "Single cell for group #{group_name}" }]
|
|
9
|
-
}
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
class TableScreenIndexableSearchable < TableScreenIndexable
|
|
16
|
-
indexable
|
|
17
|
-
searchable
|
|
18
|
-
end
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
class TableScreenSearchable < TestTableScreen
|
|
2
|
-
|
|
3
|
-
searchable
|
|
4
|
-
|
|
5
|
-
attr_accessor :will_end_search_called, :will_begin_search_called
|
|
6
|
-
|
|
7
|
-
def table_data
|
|
8
|
-
@search_table_data ||= [{
|
|
9
|
-
cells: [
|
|
10
|
-
{ title: "Alabama" },
|
|
11
|
-
{ title: "Alaska" },
|
|
12
|
-
{ title: "Arizona" },
|
|
13
|
-
{ title: "Arkansas" },
|
|
14
|
-
{ title: "California" },
|
|
15
|
-
{ title: "Colorado" },
|
|
16
|
-
{ title: "Connecticut" },
|
|
17
|
-
{ title: "Delaware" },
|
|
18
|
-
{ title: "Florida" },
|
|
19
|
-
{ title: "Georgia" },
|
|
20
|
-
{ title: "Hawaii" },
|
|
21
|
-
{ title: "Idaho" },
|
|
22
|
-
{ title: "Illinois" },
|
|
23
|
-
{ title: "Indiana" },
|
|
24
|
-
{ title: "Iowa" },
|
|
25
|
-
{ title: "Kansas" },
|
|
26
|
-
{ title: "Kentucky" },
|
|
27
|
-
{ title: "Louisiana" },
|
|
28
|
-
{ title: "Maine" },
|
|
29
|
-
{ title: "Maryland" },
|
|
30
|
-
{ title: "Massachusetts" },
|
|
31
|
-
{ title: "Michigan" },
|
|
32
|
-
{ title: "Minnesota" },
|
|
33
|
-
{ title: "Mississippi" },
|
|
34
|
-
{ title: "Missouri" },
|
|
35
|
-
{ title: "Montana" },
|
|
36
|
-
{ title: "Nebraska" },
|
|
37
|
-
{ title: "Nevada" },
|
|
38
|
-
{ title: "New Hampshire" },
|
|
39
|
-
{ title: "New Jersey" },
|
|
40
|
-
{ title: "New Mexico" },
|
|
41
|
-
{ title: "New York" },
|
|
42
|
-
{ title: "North Carolina" },
|
|
43
|
-
{ title: "North Dakota" },
|
|
44
|
-
{ title: "Ohio" },
|
|
45
|
-
{ title: "Oklahoma" },
|
|
46
|
-
{ title: "Oregon" },
|
|
47
|
-
{ title: "Pennsylvania" },
|
|
48
|
-
{ title: "Rhode Island" },
|
|
49
|
-
{ title: "South Carolina" },
|
|
50
|
-
{ title: "South Dakota" },
|
|
51
|
-
{ title: "Tennessee" },
|
|
52
|
-
{ title: "Texas" },
|
|
53
|
-
{ title: "Utah" },
|
|
54
|
-
{ title: "Vermont" },
|
|
55
|
-
{ title: "Virginia" },
|
|
56
|
-
{ title: "Washington" },
|
|
57
|
-
{ title: "West Virginia" },
|
|
58
|
-
{ title: "Wisconsin" },
|
|
59
|
-
{ title: "Wyoming" }
|
|
60
|
-
]
|
|
61
|
-
}]
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def will_begin_search
|
|
65
|
-
self.will_begin_search_called = true
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def will_end_search
|
|
69
|
-
self.will_end_search_called = true
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
end
|