Skip to content

Commit

Permalink
Adding Atom feed
Browse files Browse the repository at this point in the history
  • Loading branch information
Lucas-C committed Feb 21, 2015
1 parent 4d385ec commit 264dedc
Show file tree
Hide file tree
Showing 8 changed files with 55 additions and 1 deletion.
6 changes: 6 additions & 0 deletions app/controllers/places_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@ class PlacesController < ApplicationController
def index
end

def feed
respond_to do |format|
format.atom { @places_items = Place.order('updated_at DESC') }
end
end

def new
@place = Place.new
end
Expand Down
1 change: 1 addition & 0 deletions app/views/layouts/application.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ places_count = Place.displayable.count

<%= stylesheet_link_tag 'application' %>
<%= csrf_meta_tags %>
<%= auto_discovery_link_tag :atom, "/feed" %>
</head>

<body>
Expand Down
37 changes: 37 additions & 0 deletions app/views/places/feed.atom.builder
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
def place_to_html_description(place)
def format_entry(name, value)
i18n_name = I18n.t("simple_form.labels.place.#{name}")
displayed_value = (name == 'kind' ? I18n.t("kinds.codes.#{value}") : value)
"<b>#{i18n_name} :</b> #{displayed_value}"
end
text_entries = place.attributes
.slice('name', 'kind', 'street', 'zip_code', 'city', 'description', 'owner_name')
.reject { |k, v| v.nil? }
.map { |name, value| format_entry(name, value) }
twitname = place.twitter_name
twitter_entry = format_entry('twitter_name', "<a href='https://twitter.com/#{twitname}'>@#{twitname}</a>") unless !twitname
url_entry = format_entry('url', "<a href='#{place.url}'>#{place.url}</a>") unless !place.url
logo_img = "<img src='#{place.logo_url}' alt='#{place.name} logo'>" unless !place.logo_url
direct_link = "<a href='/#/place/#{place.id}'>#{I18n.t 'feed.link_to_map_marker'}</a>"
[
logo_img,
*text_entries,
url_entry,
twitter_entry,
direct_link,
].compact.join '<br>'
end

atom_feed language: (I18n.locale == :fr ? 'fr-FR' : 'en-US') do |feed|
feed.title I18n.t 'feed.title'
feed.updated @places_items.first.updated_at
@places_items.each do |place_item|
feed.entry( place_item ) do |entry|
entry.title place_item.name
entry.content place_to_html_description(place_item), type: 'html'
entry.author do |author|
author.name place_item.owner_name
end
end
end
end
3 changes: 3 additions & 0 deletions config/locales/app.en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,6 @@ en:
owner_email: Your email
place_update:
<<: *place
feed:
title: Last added places
link_to_map_marker: Link to map marker
3 changes: 3 additions & 0 deletions config/locales/app.fr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,6 @@ fr:
owner_email: Votre adresse email
place_update:
<<: *place
feed:
title: Derniers lieux ajoutés
link_to_map_marker: Lien vers le marqueur sur la carte
2 changes: 2 additions & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

resources :places, only: [:new, :create, :edit, :update]

get '/feed' => 'places#feed', as: 'feed', defaults: { format: 'atom' }

namespace :api, defaults: { format: 'json' } do
namespace :v1 do
resources :places, only: [:index, :show]
Expand Down
2 changes: 1 addition & 1 deletion spec/fixtures/csv/valid.csv
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
name;kind;street;zip_code;city;url;latitude;longitude;twitter_name;logo_url;description;owner_name;owner_email
Craftsmen;company;25 rue Lenepveu;49000;Angers;http://craftsmen.io;47.472041;-0.551269;craftsmenhq;;;;
Craftsmen;company;25 rue Lenepveu;49100;Angers;http://craftsmen.io;47.472041;-0.551269;craftsmenhq;https://pbs.twimg.com/profile_images/425256684244566016/N0wcdLyQ_400x400.jpeg;Webdesign studio;Mehdi Lahmam;mehdi@craftsmen.io
2 changes: 2 additions & 0 deletions spec/fixtures/csv/valid2.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
name;kind;street;zip_code;city;url;latitude;longitude;twitter_name;logo_url;description;owner_name;owner_email
Ecolutis;company;25 rue Lenepveu;49100;Angers;http://www.ecolutis.com;47.472041;-0.551269;ecolutis;http://www.ecolutis.com/wp-content/uploads/2013/12/logo.png;Opérateur de covoiturage;Olivier Demaegdt;olivier@ecolutis.com

0 comments on commit 264dedc

Please sign in to comment.