described_routes 0.7.1 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/PostInstall.txt +2 -2
- data/README.rdoc +15 -17
- data/lib/described_routes/rails_routes.rb +1 -0
- data/lib/described_routes.rb +1 -1
- data/test_rails_app/app/controllers/application_controller.rb +10 -7
- data/test_rails_app/config/environment.rb +6 -2
- data/test_rails_app/config/initializers/described_routes.rb +3 -1
- data/test_rails_app/config/routes.rb +2 -1
- data/test_rails_app/test/fixtures/build_time/described_routes.json +1 -1
- data/test_rails_app/test/fixtures/run_time/described_routes.json +1 -1
- data/test_rails_app/test/integration/described_routes_run_time_test.rb +1 -1
- metadata +5 -3
data/History.txt
CHANGED
data/PostInstall.txt
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
|
+
ATTENTION: 0.8.0 adds Rails integration via Rack middleware. The Rails controller and helpers are hereby deprecated!
|
3
|
+
|
2
4
|
For more information on described_routes, see http://describedroutes.rubyforge.org
|
3
5
|
|
4
|
-
NOTE: Change this information in PostInstall.txt
|
5
|
-
You can also delete it if you don't want it.
|
6
6
|
|
7
7
|
|
data/README.rdoc
CHANGED
@@ -8,7 +8,9 @@ Features:
|
|
8
8
|
* Easy integration with Rails
|
9
9
|
* JSON, YAML and XML formats, also a bonus plain text report
|
10
10
|
|
11
|
-
|
11
|
+
ATTENTION: 0.8.0 adds Rails integration via Rack middleware; the Rails controller and helpers are hereby deprecated!
|
12
|
+
|
13
|
+
== USAGE:
|
12
14
|
|
13
15
|
=== Build time
|
14
16
|
|
@@ -60,15 +62,14 @@ include full URI templates.
|
|
60
62
|
|
61
63
|
=== Run time
|
62
64
|
|
63
|
-
|
64
|
-
|
65
|
-
1) Somewhere in your application include the controller, perhaps in an initializer:
|
66
|
-
|
67
|
-
require 'described_routes/rails_controller'
|
65
|
+
In your config/environment.rb, add the DescribedRoutes::Middleware::Rails middleware in the <code>Rails::Initializer.run</code> block:
|
68
66
|
|
69
|
-
|
70
|
-
|
71
|
-
|
67
|
+
require 'described_routes/middleware/rails'
|
68
|
+
|
69
|
+
Rails::Initializer.run do |config|
|
70
|
+
config.middleware.use DescribedRoutes::Middleware::Rails
|
71
|
+
end
|
72
|
+
There are two integration steps for run time support:
|
72
73
|
|
73
74
|
You (or your client application) can now browse to any of the following top level addresses:
|
74
75
|
|
@@ -88,7 +89,7 @@ and for the named route "users" (say):
|
|
88
89
|
|
89
90
|
In the absence of content negotiation, requests to addresses without format extensions redirect to the respective .txt address.
|
90
91
|
|
91
|
-
|
92
|
+
Note that
|
92
93
|
|
93
94
|
Example:
|
94
95
|
|
@@ -171,16 +172,13 @@ JSON example (after pretty printing):
|
|
171
172
|
]
|
172
173
|
}
|
173
174
|
|
174
|
-
=== Link
|
175
|
-
|
176
|
-
Generate link headers (see the draft spec http://tools.ietf.org/id/draft-nottingham-http-link-header-06.txt) by including
|
175
|
+
=== Link Header Discovery Protocol
|
177
176
|
|
178
|
-
|
179
|
-
after_filter :set_link_header
|
177
|
+
A discovery protocol based on link headers is added automatically by the middleware (controller changes are no longer required). This protocol is understood by <code>path-to</code> (enabling client APIs to be bootstrapped easily) and the link headers can be regarded as adding useful type information to resources.
|
180
178
|
|
181
|
-
|
179
|
+
Regular resources are given a link header that points to that resource's <code>ResourceTemplate</code> metadata. That in turn is given a link header that points to the </code>ResourceTemplates</code> metadata for the entire application. The root resource has a link header that points to the </code>ResourceTemplates</code> metadata directly.
|
182
180
|
|
183
|
-
|
181
|
+
For further information on link headers, see the draft spec http://tools.ietf.org/id/draft-nottingham-http-link-header-06.txt and the <code>link_header</code> gem.
|
184
182
|
|
185
183
|
== DATA STRUCTURES and FORMATS
|
186
184
|
|
data/lib/described_routes.rb
CHANGED
@@ -7,7 +7,6 @@ class ApplicationController < ActionController::Base
|
|
7
7
|
include DescribedRoutes::DescribedRoutesHelper
|
8
8
|
helper DescribedRoutes::DescribedRoutesHelper
|
9
9
|
|
10
|
-
after_filter :set_link_headers
|
11
10
|
|
12
11
|
layout "default"
|
13
12
|
|
@@ -15,10 +14,14 @@ class ApplicationController < ActionController::Base
|
|
15
14
|
|
16
15
|
# Scrub sensitive parameters from your log
|
17
16
|
# filter_parameter_logging :password
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
|
18
|
+
# This is no longer required - DescribedRoutes::Middleware::Rails takes care of it all!
|
19
|
+
#
|
20
|
+
# after_filter :set_link_headers
|
21
|
+
#
|
22
|
+
# protected
|
23
|
+
#
|
24
|
+
# def set_link_headers
|
25
|
+
# set_link_header :self => true, :up => true, :describedby => true, :related => true
|
26
|
+
# end
|
24
27
|
end
|
@@ -1,12 +1,16 @@
|
|
1
1
|
# Be sure to restart your server when you modify this file
|
2
2
|
|
3
|
+
require "described_routes/middleware/rails"
|
4
|
+
|
3
5
|
# Specifies gem version of Rails to use when vendor/rails is not present
|
4
|
-
RAILS_GEM_VERSION = '2.3.
|
6
|
+
RAILS_GEM_VERSION = '2.3.3' unless defined? RAILS_GEM_VERSION
|
5
7
|
|
6
8
|
# Bootstrap the Rails environment, frameworks, and default configuration
|
7
9
|
require File.join(File.dirname(__FILE__), 'boot')
|
8
10
|
|
9
11
|
Rails::Initializer.run do |config|
|
12
|
+
config.middleware.use DescribedRoutes::Middleware::Rails, :self => true, :up => true, :related => true
|
13
|
+
|
10
14
|
# Settings in config/environments/* take precedence over those specified here.
|
11
15
|
# Application configuration should go into files in config/initializers
|
12
16
|
# -- all .rb files in that directory are automatically loaded.
|
@@ -38,4 +42,4 @@ Rails::Initializer.run do |config|
|
|
38
42
|
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
39
43
|
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}')]
|
40
44
|
# config.i18n.default_locale = :de
|
41
|
-
end
|
45
|
+
end
|
@@ -22,7 +22,8 @@ ActionController::Routing::Routes.draw do |map|
|
|
22
22
|
map.root :controller => "welcome"
|
23
23
|
|
24
24
|
#
|
25
|
-
# described_routes at runtime
|
25
|
+
# described_routes at runtime. DEPRECATED - use DescribedRoutes::Middleware::Rails instead - but retained here
|
26
|
+
# until the test fixtures have had the resulting routes removed
|
26
27
|
#
|
27
28
|
map.resources :described_routes, :controller => "described_routes/rails"
|
28
29
|
end
|
@@ -1 +1 @@
|
|
1
|
-
[{"name":"root","path_template":"
|
1
|
+
[{"name":"root","path_template":"/"},{"name":"admin_products","resource_templates":[{"name":"new_admin_product","options":["GET"],"path_template":"/admin/products/new{-prefix|.|format}","rel":"new_admin_product","optional_params":["format"]},{"name":"admin_product","resource_templates":[{"name":"edit_admin_product","options":["GET"],"path_template":"/admin/products/{product_id}/edit{-prefix|.|format}","rel":"edit","optional_params":["format"],"params":["product_id"]}],"options":["GET","PUT","DELETE"],"path_template":"/admin/products/{product_id}{-prefix|.|format}","optional_params":["format"],"params":["product_id"]}],"options":["GET","POST"],"path_template":"/admin/products{-prefix|.|format}","optional_params":["format"]},{"name":"described_routes","resource_templates":[{"name":"new_described_route","options":["GET"],"path_template":"/described_routes/new{-prefix|.|format}","rel":"new_described_route","optional_params":["format"]},{"name":"described_route","resource_templates":[{"name":"edit_described_route","options":["GET"],"path_template":"/described_routes/{route_name}/edit{-prefix|.|format}","rel":"edit","optional_params":["format"],"params":["route_name"]}],"options":["GET","PUT","DELETE"],"path_template":"/described_routes/{route_name}{-prefix|.|format}","optional_params":["format"],"params":["route_name"]}],"options":["GET","POST"],"path_template":"/described_routes{-prefix|.|format}","optional_params":["format"]},{"name":"pages","resource_templates":[{"name":"new_page","options":["GET"],"path_template":"/pages/new{-prefix|.|format}","rel":"new_page","optional_params":["format"]},{"name":"page","resource_templates":[{"name":"edit_page","options":["GET"],"path_template":"/pages/{page_id}/edit{-prefix|.|format}","rel":"edit","optional_params":["format"],"params":["page_id"]},{"name":"summary_page","options":["GET"],"path_template":"/pages/{page_id}/summary{-prefix|.|format}","rel":"summary","optional_params":["format"],"params":["page_id"]},{"name":"toggle_visibility_page","options":["POST"],"path_template":"/pages/{page_id}/toggle_visibility{-prefix|.|format}","rel":"toggle_visibility","optional_params":["format"],"params":["page_id"]}],"options":["GET","PUT","DELETE"],"path_template":"/pages/{page_id}{-prefix|.|format}","optional_params":["format"],"params":["page_id"]}],"options":["GET","POST"],"path_template":"/pages{-prefix|.|format}","optional_params":["format"]},{"name":"users","resource_templates":[{"name":"new_user","options":["GET"],"path_template":"/users/new{-prefix|.|format}","rel":"new_user","optional_params":["format"]},{"name":"user","resource_templates":[{"name":"edit_user","options":["GET"],"path_template":"/users/{user_id}/edit{-prefix|.|format}","rel":"edit","optional_params":["format"],"params":["user_id"]},{"name":"user_articles","resource_templates":[{"name":"new_user_article","options":["GET"],"path_template":"/users/{user_id}/articles/new{-prefix|.|format}","rel":"new_user_article","optional_params":["format"],"params":["user_id"]},{"name":"recent_user_articles","options":["GET"],"path_template":"/users/{user_id}/articles/recent{-prefix|.|format}","rel":"recent","optional_params":["format"],"params":["user_id"]},{"name":"user_article","resource_templates":[{"name":"edit_user_article","options":["GET"],"path_template":"/users/{user_id}/articles/{article_id}/edit{-prefix|.|format}","rel":"edit","optional_params":["format"],"params":["user_id","article_id"]}],"options":["GET","PUT","DELETE"],"path_template":"/users/{user_id}/articles/{article_id}{-prefix|.|format}","optional_params":["format"],"params":["user_id","article_id"]}],"options":["GET","POST"],"path_template":"/users/{user_id}/articles{-prefix|.|format}","rel":"articles","optional_params":["format"],"params":["user_id"]},{"name":"user_profile","resource_templates":[{"name":"edit_user_profile","options":["GET"],"path_template":"/users/{user_id}/profile/edit{-prefix|.|format}","rel":"edit","optional_params":["format"],"params":["user_id"]},{"name":"new_user_profile","options":["GET"],"path_template":"/users/{user_id}/profile/new{-prefix|.|format}","rel":"new","optional_params":["format"],"params":["user_id"]}],"options":["GET","PUT","DELETE","POST"],"path_template":"/users/{user_id}/profile{-prefix|.|format}","rel":"profile","optional_params":["format"],"params":["user_id"]}],"options":["GET","PUT","DELETE"],"path_template":"/users/{user_id}{-prefix|.|format}","optional_params":["format"],"params":["user_id"]}],"options":["GET","POST"],"path_template":"/users{-prefix|.|format}","optional_params":["format"]}]
|
@@ -1 +1 @@
|
|
1
|
-
[{"name":"root","path_template":"
|
1
|
+
[{"name":"root","path_template":"/","uri_template":"http://www.example.com/"},{"name":"admin_products","resource_templates":[{"name":"new_admin_product","options":["GET"],"path_template":"/admin/products/new{-prefix|.|format}","uri_template":"http://www.example.com/admin/products/new{-prefix|.|format}","rel":"new_admin_product","optional_params":["format"]},{"name":"admin_product","resource_templates":[{"name":"edit_admin_product","options":["GET"],"path_template":"/admin/products/{product_id}/edit{-prefix|.|format}","uri_template":"http://www.example.com/admin/products/{product_id}/edit{-prefix|.|format}","rel":"edit","optional_params":["format"],"params":["product_id"]}],"options":["GET","PUT","DELETE"],"path_template":"/admin/products/{product_id}{-prefix|.|format}","uri_template":"http://www.example.com/admin/products/{product_id}{-prefix|.|format}","optional_params":["format"],"params":["product_id"]}],"options":["GET","POST"],"path_template":"/admin/products{-prefix|.|format}","uri_template":"http://www.example.com/admin/products{-prefix|.|format}","optional_params":["format"]},{"name":"described_routes","resource_templates":[{"name":"new_described_route","options":["GET"],"path_template":"/described_routes/new{-prefix|.|format}","uri_template":"http://www.example.com/described_routes/new{-prefix|.|format}","rel":"new_described_route","optional_params":["format"]},{"name":"described_route","resource_templates":[{"name":"edit_described_route","options":["GET"],"path_template":"/described_routes/{route_name}/edit{-prefix|.|format}","uri_template":"http://www.example.com/described_routes/{route_name}/edit{-prefix|.|format}","rel":"edit","optional_params":["format"],"params":["route_name"]}],"options":["GET","PUT","DELETE"],"path_template":"/described_routes/{route_name}{-prefix|.|format}","uri_template":"http://www.example.com/described_routes/{route_name}{-prefix|.|format}","optional_params":["format"],"params":["route_name"]}],"options":["GET","POST"],"path_template":"/described_routes{-prefix|.|format}","uri_template":"http://www.example.com/described_routes{-prefix|.|format}","optional_params":["format"]},{"name":"pages","resource_templates":[{"name":"new_page","options":["GET"],"path_template":"/pages/new{-prefix|.|format}","uri_template":"http://www.example.com/pages/new{-prefix|.|format}","rel":"new_page","optional_params":["format"]},{"name":"page","resource_templates":[{"name":"edit_page","options":["GET"],"path_template":"/pages/{page_id}/edit{-prefix|.|format}","uri_template":"http://www.example.com/pages/{page_id}/edit{-prefix|.|format}","rel":"edit","optional_params":["format"],"params":["page_id"]},{"name":"summary_page","options":["GET"],"path_template":"/pages/{page_id}/summary{-prefix|.|format}","uri_template":"http://www.example.com/pages/{page_id}/summary{-prefix|.|format}","rel":"summary","optional_params":["format"],"params":["page_id"]},{"name":"toggle_visibility_page","options":["POST"],"path_template":"/pages/{page_id}/toggle_visibility{-prefix|.|format}","uri_template":"http://www.example.com/pages/{page_id}/toggle_visibility{-prefix|.|format}","rel":"toggle_visibility","optional_params":["format"],"params":["page_id"]}],"options":["GET","PUT","DELETE"],"path_template":"/pages/{page_id}{-prefix|.|format}","uri_template":"http://www.example.com/pages/{page_id}{-prefix|.|format}","optional_params":["format"],"params":["page_id"]}],"options":["GET","POST"],"path_template":"/pages{-prefix|.|format}","uri_template":"http://www.example.com/pages{-prefix|.|format}","optional_params":["format"]},{"name":"users","resource_templates":[{"name":"new_user","options":["GET"],"path_template":"/users/new{-prefix|.|format}","uri_template":"http://www.example.com/users/new{-prefix|.|format}","rel":"new_user","optional_params":["format"]},{"name":"user","resource_templates":[{"name":"edit_user","options":["GET"],"path_template":"/users/{user_id}/edit{-prefix|.|format}","uri_template":"http://www.example.com/users/{user_id}/edit{-prefix|.|format}","rel":"edit","optional_params":["format"],"params":["user_id"]},{"name":"user_articles","resource_templates":[{"name":"new_user_article","options":["GET"],"path_template":"/users/{user_id}/articles/new{-prefix|.|format}","uri_template":"http://www.example.com/users/{user_id}/articles/new{-prefix|.|format}","rel":"new_user_article","optional_params":["format"],"params":["user_id"]},{"name":"recent_user_articles","options":["GET"],"path_template":"/users/{user_id}/articles/recent{-prefix|.|format}","uri_template":"http://www.example.com/users/{user_id}/articles/recent{-prefix|.|format}","rel":"recent","optional_params":["format"],"params":["user_id"]},{"name":"user_article","resource_templates":[{"name":"edit_user_article","options":["GET"],"path_template":"/users/{user_id}/articles/{article_id}/edit{-prefix|.|format}","uri_template":"http://www.example.com/users/{user_id}/articles/{article_id}/edit{-prefix|.|format}","rel":"edit","optional_params":["format"],"params":["user_id","article_id"]}],"options":["GET","PUT","DELETE"],"path_template":"/users/{user_id}/articles/{article_id}{-prefix|.|format}","uri_template":"http://www.example.com/users/{user_id}/articles/{article_id}{-prefix|.|format}","optional_params":["format"],"params":["user_id","article_id"]}],"options":["GET","POST"],"path_template":"/users/{user_id}/articles{-prefix|.|format}","uri_template":"http://www.example.com/users/{user_id}/articles{-prefix|.|format}","rel":"articles","optional_params":["format"],"params":["user_id"]},{"name":"user_profile","resource_templates":[{"name":"edit_user_profile","options":["GET"],"path_template":"/users/{user_id}/profile/edit{-prefix|.|format}","uri_template":"http://www.example.com/users/{user_id}/profile/edit{-prefix|.|format}","rel":"edit","optional_params":["format"],"params":["user_id"]},{"name":"new_user_profile","options":["GET"],"path_template":"/users/{user_id}/profile/new{-prefix|.|format}","uri_template":"http://www.example.com/users/{user_id}/profile/new{-prefix|.|format}","rel":"new","optional_params":["format"],"params":["user_id"]}],"options":["GET","PUT","DELETE","POST"],"path_template":"/users/{user_id}/profile{-prefix|.|format}","uri_template":"http://www.example.com/users/{user_id}/profile{-prefix|.|format}","rel":"profile","optional_params":["format"],"params":["user_id"]}],"options":["GET","PUT","DELETE"],"path_template":"/users/{user_id}{-prefix|.|format}","uri_template":"http://www.example.com/users/{user_id}{-prefix|.|format}","optional_params":["format"],"params":["user_id"]}],"options":["GET","POST"],"path_template":"/users{-prefix|.|format}","uri_template":"http://www.example.com/users{-prefix|.|format}","optional_params":["format"]}]
|
@@ -30,7 +30,7 @@ class DescribedRoutesRunTimeTest < ActionController::IntegrationTest
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def test_partial_expand
|
33
|
-
get "/described_routes/new_user_profile.text
|
33
|
+
get "/described_routes/new_user_profile.text", "user_id" => "dojo", "format" => "json"
|
34
34
|
assert_equal("new_user_profile new_user_profile GET http://www.example.com/users/dojo/profile/new.json", body.chomp)
|
35
35
|
end
|
36
36
|
end
|
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.
|
4
|
+
version: 0.8.0
|
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-
|
12
|
+
date: 2009-08-02 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -58,6 +58,8 @@ description: |-
|
|
58
58
|
* A link header-based discovery protocol, enabling clients to find <code>ResourceTemplate</code> metadata from the resources of any enabled controller
|
59
59
|
* Easy integration with Rails
|
60
60
|
* JSON, YAML and XML formats, also a bonus plain text report
|
61
|
+
|
62
|
+
ATTENTION: 0.8.0 adds Rails integration via Rack middleware; the Rails controller and helpers are hereby deprecated!
|
61
63
|
email:
|
62
64
|
- mjb@asplake.co.uk
|
63
65
|
executables: []
|
@@ -149,7 +151,7 @@ rubyforge_project: describedroutes
|
|
149
151
|
rubygems_version: 1.3.5
|
150
152
|
signing_key:
|
151
153
|
specification_version: 3
|
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"
|
154
|
+
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 ATTENTION: 0.8.0 adds Rails integration via Rack middleware; the Rails controller and helpers are hereby deprecated!"
|
153
155
|
test_files:
|
154
156
|
- test/test_described_routes.rb
|
155
157
|
- test/test_helper.rb
|