-
Notifications
You must be signed in to change notification settings - Fork 459
/
paths.rb
87 lines (76 loc) · 2.91 KB
/
paths.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
module NavigationHelpers
# Maps a name to a path. Used by the
#
# When /^I go to (.+)$/ do |page_name|
#
# step definition in web_steps.rb
#
def path_to(page_name)
case page_name
when /the home\s?page/
'/'
# the following are examples using path_to_pickle
when /^#{capture_model}(?:'s)? page$/ # eg. the forum's page
path_to_pickle $1
when /^#{capture_model}(?:'s)? #{capture_model}(?:'s)? page$/ # eg. the forum's post's page
path_to_pickle $1, $2
when /^#{capture_model}(?:'s)? #{capture_model}'s (.+?) page$/ # eg. the forum's post's comments page
path_to_pickle $1, $2, :extra => $3 # or the forum's post's edit page
when /^#{capture_model}(?:'s)? (.+?) page$/ # eg. the forum's posts page
path_to_pickle $1, :extra => $2 # or the forum's edit page
# Add more mappings here.
when /^(.*)'s user page$/i
user_path(:id => $1)
when /^(.*)'s works page$/i
user_works_path(:user_id => $1)
when /^the "(.*)" work page/
work_path(Work.find_by_title($1))
when /^the work page with title (.*)/
work_path(Work.find_by_title($1))
when /^(.*)'s bookmarks page$/i
user_bookmarks_path(:user_id => $1)
when /^(.*)'s pseuds page$/i
user_pseuds_path(:user_id => $1)
when /^(.*)'s reading page$/i
user_readings_path(:user_id => $1)
when /^(.*)'s series page$/i
user_series_index_path(:user_id => $1)
when /^(.*)'s preferences page$/i
user_preferences_path(:user_id => $1)
when /my user page/
user_path(current_user)
when /my preferences page/
user_preferences_path(current_user)
when /my bookmarks page/
user_bookmarks_path(current_user)
when /the import page/
new_work_path(:import => 'true')
when /the work-skins page/
skins_path(:work_skins => true)
when /^(.*)'s skin page/
skins_path(:user_id => $1)
when /^"(.*)" skin page/
skin_path(Skin.find_by_title($1))
when /^"(.*)" edit skin page/
edit_skin_path(Skin.find_by_title($1))
when /^"(.*)" collection's page$/i # e.g. when I go to "Collection name" collection's page
collection_path(Collection.find_by_title($1))
when /^"(.*)" collection's static page$/i
static_collection_path(Collection.find_by_title($1))
# Here is an example that pulls values out of the Regexp:
#
# when /^(.*)'s profile page$/i
# user_profile_path(User.find_by_login($1))
else
begin
page_name =~ /the (.*) page/
path_components = $1.split(/\s+/)
self.send(path_components.push('path').join('_').to_sym)
rescue Object => e
raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
"Now, go and add a mapping in #{__FILE__}"
end
end
end
end
World(NavigationHelpers)