diff options
-rw-r--r-- | app/controllers/request_controller.rb | 24 | ||||
-rw-r--r-- | app/views/help/api.rhtml | 35 | ||||
-rw-r--r-- | app/views/layouts/default.rhtml | 3 | ||||
-rw-r--r-- | config/routes.rb | 1 | ||||
-rw-r--r-- | vendor/plugins/has_tag_string/lib/has_tag_string.rb | 5 |
5 files changed, 62 insertions, 6 deletions
diff --git a/app/controllers/request_controller.rb b/app/controllers/request_controller.rb index 7626e5ad2..6e7df2e17 100644 --- a/app/controllers/request_controller.rb +++ b/app/controllers/request_controller.rb @@ -68,6 +68,30 @@ class RequestController < ApplicationController # For send followup link at bottom @last_response = @info_request.get_last_response + + respond_to do |format| + format.html { @has_json = true } + format.json { + render :json => { + :id => @info_request.id, + :url_title => @info_request.url_title, + :title => @info_request.title, + :user => @info_request.user.url_name, + :public_body => @info_request.public_body.url_name, + :created_at => @info_request.created_at, + :updated_at => @info_request.updated_at, + :described_state => @info_request.described_state, + :awaiting_description => @info_request.awaiting_description , + :prominence => @info_request.prominence, + :law_used => @info_request.law_used, + :tags => @info_request.tag_array, + + # not sure we need to make these admin params public + # :allow_new_responses_from => @info_request.allow_new_responses_from, + # :handle_rejected_responses => @info_request.handle_rejected_responses, + } + } + end end # Extra info about a request, such as event history diff --git a/app/views/help/api.rhtml b/app/views/help/api.rhtml index f984bed4d..9679f3cc7 100644 --- a/app/views/help/api.rhtml +++ b/app/views/help/api.rhtml @@ -14,7 +14,9 @@ interact with WhatDoTheyKnow via an "API". lots of things that are similar in use to an API as they are requested. </p> -<h2> Linking to new requests </h2> +<hr> + +<h2> 1. Linking to new requests </h2> <p>To encourage your users to make links to a particular public authority, use URLs of the form <%= link_to new_request_to_body_url(:url_name => "liverpool_city_council") , new_request_to_body_url(:url_name => "liverpool_city_council") %>. @@ -27,18 +29,39 @@ These are the parameters you can add to those URLs, either in the URL or from a <li> <strong>tags</strong> - space separated list of tags, so you can find and link up any requests made later, e.g. <em>openlylocal spending_id:12345</em>. The : indicates it is a machine tag. The values of machine tags may also include colons, useful for URIs. </ul> -<h2> RSS (actually, Atom) feeds </h2> +<hr> + +<h2> 2. RSS (actually, Atom) feeds </h2> <p>There are Atom feeds throughout the site, which you can use to get updates -and links in XML format. +and links in XML format. Find the URL of the Atom feed in one of these ways: +<ul> + <li>Look for the <img src="/images/feed-16.png" alt=""> RSS feed links.</li> + <li>Examine the <tt><link rel="alternate" type="application/atom+xml"></tt> tag in the head of the HTML. </li> + <li>Add <tt>/feed</tt> to the start of another URL. +</ul> -<p>In particular, search queries, however complicated, all have Atom feeds. +<p>In particular, even complicated search queries have Atom feeds. You can do all sorts of things with them, such as query by authority, by file -type, by date range, by status. See the <a href="/search">advanced search +type, by date range, or by status. See the <a href="/search">advanced search tips</a> for details. -<dl> +<hr> + +<h2> 3. JSON structured data </h2> + +<p>Some pages have JSON feeds, which let you download information about objects +in a structured form. Find them by: +<ul> + <li>Adding <tt>.json</tt> to the end of the URL. </li> + <li>Look for the <tt><link rel="alternate" type="application/json"></tt> tag in the head of the HTML. </li> +</ul> +</p> + +<hr> +<p>Please <a href="/help/contact">contact us</a> if you need an API feature that isn't there yet. It's +very much a work in progress, and we do add things when people ask us to.</p> <div id="hash_link_padding"></div> diff --git a/app/views/layouts/default.rhtml b/app/views/layouts/default.rhtml index c5466964d..ca8904005 100644 --- a/app/views/layouts/default.rhtml +++ b/app/views/layouts/default.rhtml @@ -30,6 +30,9 @@ <link rel="alternate" type="application/atom+xml" title="<%=h feed[:title] %>" href="<%=h feed[:url]%>"> <% end %> <% end %> + <% if @has_json %> + <link rel="alternate" type="application/json" title="JSON version" href="<%=h main_url(request.request_uri) %>.json"> + <% end %> <% if @no_crawl %> <meta name="robots" content="noindex, nofollow"> diff --git a/config/routes.rb b/config/routes.rb index e4d6132a9..6205f2446 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -37,6 +37,7 @@ ActionController::Routing::Routes.draw do |map| request.new_request_to_body '/new/:url_name', :action => 'new' request.show_request '/request/:url_title', :action => 'show' + request.show_request '/request/:url_title.:format', :action => 'show' request.details_request '/details/request/:url_title', :action => 'details' request.similar_request '/similar/request/:url_title', :action => 'similar' diff --git a/vendor/plugins/has_tag_string/lib/has_tag_string.rb b/vendor/plugins/has_tag_string/lib/has_tag_string.rb index fdcc35a55..5382067fb 100644 --- a/vendor/plugins/has_tag_string/lib/has_tag_string.rb +++ b/vendor/plugins/has_tag_string/lib/has_tag_string.rb @@ -80,6 +80,11 @@ module HasTagString return self.tags.map { |t| t.name_and_value }.join(' ') end + # Returns the tags the model has, as an array of strings + def tag_array + return self.tags.map { |t| [t.name, t.value] } + end + # Test to see if class is tagged with the given tag def has_tag?(tag_as_string) for tag in self.tags |