described_routes 0.7.0 → 0.7.1
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.
- data/History.txt +4 -0
- data/README.rdoc +2 -2
- data/Rakefile +1 -0
- data/lib/described_routes/helpers/described_routes_helper.rb +29 -40
- data/lib/described_routes.rb +1 -1
- metadata +14 -4
data/History.txt
CHANGED
data/README.rdoc
CHANGED
@@ -4,9 +4,9 @@
|
|
4
4
|
|
5
5
|
Features:
|
6
6
|
* Dynamic, framework-neutral, client-friendly <code>ResourceTemplate</code> metadata describing the path/URI structures of your whole site or of specific resources
|
7
|
-
* JSON, YAML and XML formats, also a bonus plain text report
|
8
7
|
* A link header-based discovery protocol, enabling clients to find <code>ResourceTemplate</code> metadata from the resources of any enabled controller
|
9
8
|
* Easy integration with Rails
|
9
|
+
* JSON, YAML and XML formats, also a bonus plain text report
|
10
10
|
|
11
11
|
== SYNOPSIS:
|
12
12
|
|
@@ -62,7 +62,7 @@ include full URI templates.
|
|
62
62
|
|
63
63
|
There are two integration steps for run time support:
|
64
64
|
|
65
|
-
1)
|
65
|
+
1) Somewhere in your application include the controller, perhaps in an initializer:
|
66
66
|
|
67
67
|
require 'described_routes/rails_controller'
|
68
68
|
|
data/Rakefile
CHANGED
@@ -1,8 +1,11 @@
|
|
1
|
+
require 'link_header'
|
2
|
+
|
1
3
|
module DescribedRoutes
|
2
4
|
module DescribedRoutesHelper
|
3
|
-
# Map rels to standard relation types, used by #
|
5
|
+
# Map rels to standard relation types, used by #make_link_header
|
4
6
|
REGISTERED_RELS = {
|
5
|
-
'edit' => 'edit'
|
7
|
+
'edit' => 'edit',
|
8
|
+
'up' => 'up'
|
6
9
|
}
|
7
10
|
|
8
11
|
# The default options parameter to #link_elements; controls which links appear in html link elements
|
@@ -41,49 +44,27 @@ module DescribedRoutes
|
|
41
44
|
end
|
42
45
|
end
|
43
46
|
|
44
|
-
# Render
|
47
|
+
# Render links as <link <url> rel=<rel> ... type=<type>> elements. Add to the <head> part of your layout with:
|
45
48
|
# <%= link_elements %>
|
46
|
-
def link_elements(options=LINK_ELEMENT_OPTIONS)
|
47
|
-
|
48
|
-
[
|
49
|
-
%Q(<link href="#{url}"),
|
50
|
-
rels.map{|r| %Q(rel="#{r}")},
|
51
|
-
attrs.map{|k, v| %Q(#{k}="#{v}")}
|
52
|
-
].join(' ')
|
53
|
-
}.join("\n")
|
49
|
+
def link_elements(separator="\n", options=LINK_ELEMENT_OPTIONS)
|
50
|
+
make_link_header(options).to_html(separator)
|
54
51
|
end
|
55
52
|
|
56
|
-
# Render link_data as a link header. Usage:
|
57
|
-
# response.headers["Link"] = link_header(options)
|
58
|
-
# or use #set_link_header
|
59
|
-
def link_header(options=LINK_HEADER_OPTIONS)
|
60
|
-
link_data(options).map{|url, rels, attrs|
|
61
|
-
[
|
62
|
-
"<#{url}>",
|
63
|
-
rels.map{|r| %Q(rel="#{r}")},
|
64
|
-
attrs.map{|k, v| %Q(#{k}="#{v}")}
|
65
|
-
].join('; ')
|
66
|
-
}.join(', ')
|
67
|
-
end
|
68
|
-
|
69
53
|
# Sets a link header in the response
|
70
54
|
# after_filter :set_link_header
|
71
55
|
def set_link_header(options=LINK_HEADER_OPTIONS)
|
72
|
-
response.headers["Link"] =
|
56
|
+
response.headers["Link"] = make_link_header(options).to_s
|
73
57
|
end
|
74
58
|
|
75
|
-
# Returns
|
76
|
-
#
|
77
|
-
#
|
78
|
-
# 2) a hash of attributes, typically just one, either "role" (for regular resources) or "meta" (for metadata resources)
|
79
|
-
# The list of link relations types will contain a standard type ('self', 'up', 'describedby') &/or an extention type
|
59
|
+
# Returns a LinkHeader object that represents the required links.
|
60
|
+
#
|
61
|
+
# Link relation types ("rel" attributes) will contain a standard type ('self', 'up', 'describedby') &/or an extension type
|
80
62
|
# in the form "described_route_url(name)#rel", using the name and rel of the resource template.
|
81
63
|
#
|
82
64
|
# The output is filtered by the options hash, with members :self, :describedby, :up, :related.
|
83
|
-
# Rel values will include a short value (e.g. 'edit') if the template's rel has a mapping in REGISTERED_RELS.
|
84
65
|
#
|
85
|
-
def
|
86
|
-
|
66
|
+
def make_link_header(options)
|
67
|
+
links = []
|
87
68
|
rt = resource_template
|
88
69
|
if rt
|
89
70
|
type_prefix = described_routes_url + '#'
|
@@ -112,31 +93,39 @@ module DescribedRoutes
|
|
112
93
|
end
|
113
94
|
|
114
95
|
# data for rel="self"
|
115
|
-
|
96
|
+
links << LinkHeader::Link.new(request.url, [['rel', 'self'], ['role', type_prefix + rt.name]]) if options[:self]
|
116
97
|
|
117
98
|
# data for rel="described_by"
|
118
|
-
|
99
|
+
links << LinkHeader::Link.new(described_by_with_params, [['rel', 'describedby'], ['meta', meta]]) if options[:describedby]
|
119
100
|
|
120
101
|
# data for rel="up"
|
102
|
+
# TODO move this to ResourceTemplate
|
121
103
|
if options[:up]
|
122
104
|
if rt.parent
|
123
|
-
|
105
|
+
links << LinkHeader::Link.new(rt.parent.uri_for(resource_parameters), [['rel', 'up'], ['role', type_prefix + rt.parent.name]])
|
124
106
|
elsif rt.name != 'root'
|
125
|
-
|
107
|
+
links << LinkHeader::Link.new(root_url, [['rel', 'up'], ['role', type_prefix + 'root']])
|
126
108
|
end
|
127
109
|
end
|
128
110
|
|
129
111
|
# data for rel="related"
|
130
112
|
if options[:related]
|
131
|
-
related.expand_links(resource_parameters).
|
113
|
+
related.expand_links(resource_parameters).each do |l|
|
132
114
|
if l.name != rt.name
|
133
115
|
rel = l.rel || l.name
|
134
|
-
|
116
|
+
rels = [['rel', described_by + '#' + rel]]
|
117
|
+
if l.rel
|
118
|
+
registered_rel = REGISTERED_RELS[rel]
|
119
|
+
if registered_rel
|
120
|
+
rels.unshift(['rel', registered_rel])
|
121
|
+
end
|
122
|
+
end
|
123
|
+
links << LinkHeader::Link.new(l.uri, rels + [['role', type_prefix + l.name]])
|
135
124
|
end
|
136
125
|
end
|
137
126
|
end
|
138
127
|
end
|
139
|
-
|
128
|
+
LinkHeader.new(links)
|
140
129
|
end
|
141
130
|
end
|
142
131
|
end
|
data/lib/described_routes.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: described_routes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Burrows
|
@@ -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 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -22,6 +22,16 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 2.1.0
|
24
24
|
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: link_header
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.0.5
|
34
|
+
version:
|
25
35
|
- !ruby/object:Gem::Dependency
|
26
36
|
name: newgem
|
27
37
|
type: :development
|
@@ -45,9 +55,9 @@ dependencies:
|
|
45
55
|
description: |-
|
46
56
|
Features:
|
47
57
|
* Dynamic, framework-neutral, client-friendly <code>ResourceTemplate</code> metadata describing the path/URI structures of your whole site or of specific resources
|
48
|
-
* JSON, YAML and XML formats, also a bonus plain text report
|
49
58
|
* A link header-based discovery protocol, enabling clients to find <code>ResourceTemplate</code> metadata from the resources of any enabled controller
|
50
59
|
* Easy integration with Rails
|
60
|
+
* JSON, YAML and XML formats, also a bonus plain text report
|
51
61
|
email:
|
52
62
|
- mjb@asplake.co.uk
|
53
63
|
executables: []
|
@@ -139,7 +149,7 @@ rubyforge_project: describedroutes
|
|
139
149
|
rubygems_version: 1.3.5
|
140
150
|
signing_key:
|
141
151
|
specification_version: 3
|
142
|
-
summary: "Features: * Dynamic, framework-neutral, client-friendly <code>ResourceTemplate</code> metadata describing the path/URI structures of your whole site or of specific resources *
|
152
|
+
summary: "Features: * Dynamic, framework-neutral, client-friendly <code>ResourceTemplate</code> metadata describing the path/URI structures of your whole site or of specific resources * A link header-based discovery protocol, enabling clients to find <code>ResourceTemplate</code> metadata from the resources of any enabled controller * Easy integration with Rails * JSON, YAML and XML formats, also a bonus plain text report"
|
143
153
|
test_files:
|
144
154
|
- test/test_described_routes.rb
|
145
155
|
- test/test_helper.rb
|