sinatra-mapping 1.0.4 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +6 -0
- data/VERSION +2 -2
- data/lib/sinatra/mapping.rb +13 -13
- data/lib/sinatra/mapping_helpers.rb +59 -24
- data/test/test_mapping.rb +8 -2
- metadata +2 -2
data/CHANGES
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
= Changes
|
2
2
|
|
3
|
+
[1.0.5 - July 2009]
|
4
|
+
* Fixes in the HTML attributes into helper method for link attributes.
|
5
|
+
* Fixes in the map path method which check script name in environment.
|
6
|
+
* Improvements helper methods.
|
7
|
+
* Updates in documentation.
|
8
|
+
|
3
9
|
[1.0.4 - July 2009]
|
4
10
|
* Error in root path without application/script name has been fixed.
|
5
11
|
* Helper for mapping has been registered automatically.
|
data/VERSION
CHANGED
data/lib/sinatra/mapping.rb
CHANGED
@@ -52,10 +52,11 @@ module Sinatra
|
|
52
52
|
# mapping:
|
53
53
|
# root: tasks
|
54
54
|
# status: changes
|
55
|
-
#
|
56
|
-
#
|
57
|
-
#
|
58
|
-
#
|
55
|
+
#
|
56
|
+
# # In Sinatra application.
|
57
|
+
# mapping YAML.load_file("settings.yml")[:mapping]
|
58
|
+
# # root_path # /tasks
|
59
|
+
# # status_path # /tasks/changes
|
59
60
|
def mapping(hash)
|
60
61
|
hash.each do |name, path|
|
61
62
|
map name, path
|
@@ -63,11 +64,13 @@ module Sinatra
|
|
63
64
|
end
|
64
65
|
|
65
66
|
# Returns URL path with query instructions.
|
67
|
+
# This method has been extracted from
|
68
|
+
# http://wiki.github.com/sinatra/sinatra/howto-generate-links.
|
66
69
|
def build_path_to(script_name = nil, *args)
|
67
70
|
args.compact!
|
68
|
-
query
|
69
|
-
path
|
70
|
-
path
|
71
|
+
query = args.pop if args.last.kind_of?(Hash)
|
72
|
+
path = map_path_to(script_name, *args)
|
73
|
+
path << "?" << Rack::Utils::build_query(query) if query
|
71
74
|
path
|
72
75
|
end
|
73
76
|
|
@@ -76,17 +79,14 @@ module Sinatra
|
|
76
79
|
# Check arguments. If argument is a symbol and exist map path before
|
77
80
|
# setted, then return path mapped by symbol name.
|
78
81
|
def map_path_to(*args)
|
79
|
-
script_name = args.shift if args.first.to_s =~
|
82
|
+
script_name = args.shift if args.first.to_s =~ /^\/\w.*/
|
80
83
|
path_mapped(script_name, *locations_get_from(*args))
|
81
84
|
end
|
82
85
|
|
83
86
|
# Returns all paths mapped by root path in prefix.
|
84
87
|
def path_mapped(script_name, *args)
|
85
|
-
if
|
86
|
-
|
87
|
-
else
|
88
|
-
cleanup_paths("/#{script_name}/#{@locations[:root]}")
|
89
|
-
end
|
88
|
+
return cleanup_paths("/#{script_name}/#{@locations[:root]}") if args.empty?
|
89
|
+
cleanup_paths("/#{script_name}/#{@locations[:root]}/#{args.join('/')}")
|
90
90
|
end
|
91
91
|
|
92
92
|
# Get paths from location maps.
|
@@ -10,6 +10,23 @@ module Sinatra
|
|
10
10
|
|
11
11
|
# Creates a title using a path mapped. Otherwise, returns just arguments
|
12
12
|
# joined by spaces and capitalised.
|
13
|
+
#
|
14
|
+
# # In Sinatra application
|
15
|
+
#
|
16
|
+
# map :posts, "articles"
|
17
|
+
# map :tags, "labels"
|
18
|
+
# map :archive, "archive/articles"
|
19
|
+
#
|
20
|
+
# # In views
|
21
|
+
#
|
22
|
+
# <%=title_path :posts%>
|
23
|
+
# # => "Articles"
|
24
|
+
#
|
25
|
+
# <%=title_path :tags%>
|
26
|
+
# # => "Labels"
|
27
|
+
#
|
28
|
+
# <%=title_path :archive%>
|
29
|
+
# # => "Archive articles"
|
13
30
|
def title_path(path, *args)
|
14
31
|
title = (options.locations[path] || path).to_s.gsub('/',' ').strip
|
15
32
|
title.gsub!(/\W/,' ') # Cleanup
|
@@ -19,35 +36,44 @@ module Sinatra
|
|
19
36
|
# Creates anchor links for name and extract path and HTML options from
|
20
37
|
# arguments. Example:
|
21
38
|
#
|
22
|
-
# # In
|
39
|
+
# # In Sinatra application, add a map.
|
40
|
+
#
|
41
|
+
# map :tasks, "tasks"
|
23
42
|
# map :status, "tasks/status"
|
24
43
|
#
|
44
|
+
# get tasks_path do
|
45
|
+
# erb :tasks, :locals => { :name => params.values.join(', ') }
|
46
|
+
# end
|
47
|
+
#
|
25
48
|
# get status_path do
|
26
|
-
# status
|
27
|
-
# erb :status, :locals => { :status => status }
|
49
|
+
# erb :status, :locals => { :status => "finished" }
|
28
50
|
# end
|
29
51
|
#
|
30
52
|
# # In status view, add a link to status map.
|
53
|
+
#
|
31
54
|
# <%= link_to "All finished", :status, status %>
|
32
55
|
# # => <a href="/tasks/status/finished">All finished</a>
|
56
|
+
#
|
57
|
+
# <%= link_to "All finished", :status, :name => status %>
|
58
|
+
# # => <a href="/tasks/status?name=finished">All finished</a>
|
33
59
|
def link_to(name = nil, *args)
|
34
60
|
options = args.last.kind_of?(Hash) ? args.pop : {}
|
35
61
|
url = args.shift if args.first.to_s =~ /^\w.*?:/
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
def link_to_query(name, action, query = {}, options = {})
|
40
|
-
"<a href=\"#{path_to(action,query)}\" #{extract_tags_attributes(options)}>#{name}</a>"
|
62
|
+
args << extract_query_attributes(options)
|
63
|
+
"<a href=\"#{url || path_to(*args)}\"#{extract_link_attributes(options)}>#{name || url}</a>"
|
41
64
|
end
|
42
65
|
|
43
66
|
# Returns all paths with query parameters. Example:
|
44
67
|
#
|
45
|
-
# #
|
68
|
+
# # In Sinatra application:
|
69
|
+
#
|
46
70
|
# map :post, "articles"
|
47
71
|
# map :tags, "labels"
|
48
|
-
#
|
72
|
+
#
|
73
|
+
# # Use the following instructions:
|
74
|
+
#
|
49
75
|
# path_to :tags, "ruby", :posts
|
50
|
-
# #
|
76
|
+
# # => "/labels/ruby/articles"
|
51
77
|
def path_to(*args)
|
52
78
|
options.build_path_to(env['SCRIPT_NAME'], *args)
|
53
79
|
end
|
@@ -55,22 +81,31 @@ module Sinatra
|
|
55
81
|
private
|
56
82
|
|
57
83
|
# Extract all tag attributes from a hash keys and values.
|
58
|
-
def
|
59
|
-
hash.
|
60
|
-
|
61
|
-
:hreflang, :id, :lang,
|
62
|
-
:name, :onblur, :onclick,
|
63
|
-
:ondblclick, :onfocus, :onkeydown,
|
64
|
-
:onkeypress, :onkeyup, :onmousedown,
|
65
|
-
:onmousemove, :onmouseout, :onmouseover,
|
66
|
-
:onmouseup, :rel, :rev,
|
67
|
-
:shape, :style, :tabindex,
|
68
|
-
:target, :title, :type ].include? key
|
69
|
-
end.map do |attr, value|
|
70
|
-
"#{attr}=\"#{value}\""
|
84
|
+
def extract_link_attributes(hash)
|
85
|
+
select_link_attributes(hash).map do |attribute, value|
|
86
|
+
" #{attribute}=\"#{value}\""
|
71
87
|
end
|
72
88
|
end
|
73
89
|
|
90
|
+
# Returns only attributes for link tag.
|
91
|
+
def select_link_attributes(hash)
|
92
|
+
hash.select{ |key, value| link_attributes.include?key }
|
93
|
+
end
|
94
|
+
|
95
|
+
# Select all keys and values that not included in link attributes.
|
96
|
+
def extract_query_attributes(hash)
|
97
|
+
query = hash.select{ |key, value| !link_attributes.include?key }.flatten
|
98
|
+
Hash[*query] unless query.empty?
|
99
|
+
end
|
100
|
+
|
101
|
+
# Attribute list for link tag.
|
102
|
+
def link_attributes
|
103
|
+
[:accesskey, :charset, :coords, :hreflang, :id, :lang, :name, :onblur,
|
104
|
+
:onclick, :ondblclick, :onfocus, :onkeydown, :onkeypress, :onkeyup,
|
105
|
+
:onmousedown, :onmousemove, :onmouseout, :onmouseover, :onmouseup,
|
106
|
+
:rel, :rev, :shape, :style, :tabindex, :target, :title, :type]
|
107
|
+
end
|
108
|
+
|
74
109
|
end # module MappingHelpers
|
75
110
|
|
76
111
|
helpers MappingHelpers
|
data/test/test_mapping.rb
CHANGED
@@ -74,7 +74,11 @@ class AppForTest < Sinatra::Base
|
|
74
74
|
end
|
75
75
|
|
76
76
|
get search_path do
|
77
|
-
|
77
|
+
<<-end_content.gsub(/^ /,'')
|
78
|
+
#{title_path :search}:#{path_to :search, :keywords => 'ruby'}
|
79
|
+
#{link_to "Search", :search, :title => 'Search'}
|
80
|
+
#{link_to "Search", :search, :title => 'Search', :keywords => 'ruby'}
|
81
|
+
end_content
|
78
82
|
end
|
79
83
|
|
80
84
|
end
|
@@ -188,7 +192,9 @@ class TestMapping < Test::Unit::TestCase
|
|
188
192
|
get "#{app.search_path}?keywords=ruby" do |response|
|
189
193
|
assert response.ok?
|
190
194
|
assert_equal "http://example.org#{@locations[:search_path]}?keywords=ruby", last_request.url
|
191
|
-
assert_equal "Find articles:#{@locations[:search_path]}?keywords=ruby", response.body
|
195
|
+
assert_equal "Find articles:#{@locations[:search_path]}?keywords=ruby", response.body.split("\n")[0]
|
196
|
+
assert_equal "<a href=\"#{@locations[:search_path]}\" title=\"Search\">Search</a>", response.body.split("\n")[1]
|
197
|
+
assert_equal "<a href=\"#{@locations[:search_path]}?keywords=ruby\" title=\"Search\">Search</a>", response.body.split("\n")[2]
|
192
198
|
end
|
193
199
|
end
|
194
200
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra-mapping
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hallison Batista
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-07-
|
12
|
+
date: 2009-07-30 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|