diff options
| author | Robin Houston <robin.houston@gmail.com> | 2012-07-04 11:27:43 +0100 | 
|---|---|---|
| committer | Robin Houston <robin.houston@gmail.com> | 2012-07-04 11:27:43 +0100 | 
| commit | b3f46a4232e244e19c9dc1345c37322ea4a091da (patch) | |
| tree | d14e4e5ec882f81d7bd833d5e51ee2794f35a154 | |
| parent | 5c2eb90495ff5ccd38ac1a0cddc3c2408c69bcf9 (diff) | |
WIP new requests feed
| -rw-r--r-- | app/controllers/api_controller.rb | 14 | ||||
| -rw-r--r-- | app/models/info_request.rb | 6 | ||||
| -rw-r--r-- | app/models/public_body.rb | 4 | ||||
| -rw-r--r-- | app/models/user.rb | 3 | ||||
| -rw-r--r-- | app/views/api/new_requests.atom.builder | 21 | ||||
| -rw-r--r-- | config/routes.rb | 6 | 
6 files changed, 42 insertions, 12 deletions
diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index 524aa44b7..b34386377 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -155,6 +155,20 @@ class ApiController < ApplicationController          head :no_content      end +    def body_new_requests +      feed_type = params[:feed_type] +      raise PermissionDenied.new("#{@public_body.id} != #{params[:id]}") if @public_body.id != params[:id].to_i +       +      @requests = @public_body.info_requests +      if feed_type == "atom" +        render :template => "api/new_requests.atom" +      elsif feed_type == "json" +        render :json => @requests +      else +        raise ActiveRecord::RecordNotFound.new("Unrecognised feed type: " + feed_type) +      end +    end +          protected      def check_api_key          raise "Missing required parameter 'k'" if params[:k].nil? diff --git a/app/models/info_request.rb b/app/models/info_request.rb index d09acbcf6..a41d6d2db 100644 --- a/app/models/info_request.rb +++ b/app/models/info_request.rb @@ -1,11 +1,10 @@  # == Schema Information -# Schema version: 114  #  # Table name: info_requests  #  #  id                        :integer         not null, primary key  #  title                     :text            not null -#  user_id                   :integer         not null +#  user_id                   :integer  #  public_body_id            :integer         not null  #  created_at                :datetime        not null  #  updated_at                :datetime        not null @@ -17,10 +16,11 @@  #  allow_new_responses_from  :string(255)     default("anybody"), not null  #  handle_rejected_responses :string(255)     default("bounce"), not null  #  idhash                    :string(255)     not null +#  external_user_name        :string(255) +#  external_url              :string(255)  #  attention_requested       :boolean         default(FALSE)  # -  require 'digest/sha1'  class InfoRequest < ActiveRecord::Base diff --git a/app/models/public_body.rb b/app/models/public_body.rb index bc8f084bb..9efeadf55 100644 --- a/app/models/public_body.rb +++ b/app/models/public_body.rb @@ -1,5 +1,4 @@  # == Schema Information -# Schema version: 114  #  # Table name: public_bodies  # @@ -19,7 +18,6 @@  #  publication_scheme :text            default(""), not null  #  api_key            :string(255)     not null  # -  # models/public_body.rb:  # A public body, from which information can be requested.  # @@ -583,5 +581,3 @@ class PublicBody < ActiveRecord::Base      end  end - - diff --git a/app/models/user.rb b/app/models/user.rb index a21676f68..657ea2a4a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,5 +1,4 @@  # == Schema Information -# Schema version: 114  #  # Table name: users  # @@ -21,9 +20,7 @@  #  email_bounce_message   :text            default(""), not null  #  no_limit               :boolean         default(FALSE), not null  #  receive_email_alerts   :boolean         default(TRUE), not null -#  user_similarity_id     :integer  # -  # models/user.rb:  # Model of people who use the site to file requests, make comments etc.  # diff --git a/app/views/api/new_requests.atom.builder b/app/views/api/new_requests.atom.builder new file mode 100644 index 000000000..38d33bce3 --- /dev/null +++ b/app/views/api/new_requests.atom.builder @@ -0,0 +1,21 @@ +atom_feed do |feed| +    feed.title("New requests made to #{@public_body.name}") +    feed.updated(@requests.first.updated_at) + +    for request in @requests +        feed.entry(request) do |entry| +            entry.updated(request.updated_at) +            entry.published(request.created_at) +            entry.title(request.title) +            entry.content(content, :type => 'html') +            entry.author do |author| +                author.name(request.user_name) +                if !request.user.nil? +                    author.uri(main_url(user_url(request.user))) +                end +                author.email(request.incoming_email) +            end +        end +    end +end + diff --git a/config/routes.rb b/config/routes.rb index 13ab6669e..e76d86816 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -244,8 +244,10 @@ ActionController::Routing::Routes.draw do |map|      map.with_options :controller => 'api' do |api|          api.api_create_request '/api/v2/request.json', :action => 'create_request', :conditions => { :method => :post } -        api.api_show_request '/api/v2/request/:id.json', :action => 'show_request',  :conditions => { :method => :get } -        api.api_add_correspondence '/api/v2/request/:id.json', :action => 'add_correspondence',  :conditions => { :method => :post } +        api.api_show_request '/api/v2/request/:id.json', :action => 'show_request', :conditions => { :method => :get } +        api.api_add_correspondence '/api/v2/request/:id.json', :action => 'add_correspondence', :conditions => { :method => :post } +         +        api.api_body_new_requests '/api/v2/body/:id/new_requests.:feed_type', :action => 'body_new_requests', :feed_type => '^(json|atom)$'      end      map.filter('conditionallyprependlocale')  | 
