Browse Source

Added slugs for wards and /wards ward list page

tags/last-sinatra-version
Adrian Short 14 years ago
parent
commit
f849c5872d
7 changed files with 60 additions and 35 deletions
  1. +28
    -19
      app.rb
  2. +19
    -0
      import-wards.rb
  3. +0
    -10
      import.rb
  4. +2
    -5
      lib/models.rb
  5. +1
    -1
      views/home.haml
  6. +2
    -0
      views/layout.haml
  7. +8
    -0
      views/wardlist.haml

+ 28
- 19
app.rb View File

@@ -2,37 +2,46 @@ require 'rubygems'
require 'sinatra' require 'sinatra'
require 'sinatra-helpers/haml/partials' require 'sinatra-helpers/haml/partials'
require 'haml' require 'haml'
# require 'pat'
require 'lib/models' require 'lib/models'


get '/' do get '/' do
if params[:postcode]
@postcode = params[:postcode].strip.upcase

unless result = Postcode.finder(@postcode)
# Invalid postcode
redirect '/error'
end
# Postcode valid but not in LB Sutton
if result.district_code != "00BF"
redirect '/aliens'
end
# Postcode in LB Sutton
@ward = Ward.first( :ons_id => result.ward_code )
redirect "/wards/#{@ward.slug}/postcode/#{@postcode}"
end
haml :home haml :home
end end


get '/wards/:id' do
@ward = Ward.get(params[:id])
get '/wards/:slug/postcode/:postcode/?' do
@ward = Ward.first(:slug => params[:slug])
@postcode = params[:postcode]
haml :wards haml :wards
end end


get '/wards' do
@postcode = params[:postcode].strip.upcase
unless result = Postcode.finder(@postcode)
# Invalid postcode
redirect '/error'
end

# Postcode valid but not in LB Sutton
if result.district_code != "00BF"
redirect '/aliens'
end
# Postcode in LB Sutton
@ward = Ward.first( :ons_id => result.ward_code )
get '/wards/:slug/?' do
@ward = Ward.first(:slug => params[:slug])
haml :wards haml :wards
end end


get '/wards/?' do
@wards = Ward.all
haml :wardlist
end

get '/how-the-council-election-works' do get '/how-the-council-election-works' do
haml :election haml :election
end end


+ 19
- 0
import-wards.rb View File

@@ -0,0 +1,19 @@
require 'rubygems'
require 'csv'
require 'dm-core'
require 'dm-validations'
require 'dm-timestamps'
require 'lib/models'

# Import wards

CSV::Reader.parse(File.open('wards.csv', 'rb')) do |row|
p row
puts Ward.create!(
'ons_id' => row[0],
'name' => row[1],
'slug' => Ward.slugify(row[1]),
'constituency_id' => row[2] == 'Carshalton and Wallington' ? 1 : 2
)
end

+ 0
- 10
import.rb View File

@@ -5,16 +5,6 @@ require 'dm-validations'
require 'dm-timestamps' require 'dm-timestamps'
require 'lib/models' require 'lib/models'


# Import wards
#
# CSV::Reader.parse(File.open('wards.csv', 'rb')) do |row|
# p row
# Ward.create(
# 'ons_id' => row[0],
# 'name' => row[1]
# )
# end
#
# Define parties # Define parties


# parties = [ # parties = [


+ 2
- 5
lib/models.rb View File

@@ -17,10 +17,6 @@ class Postcode
property :ward_name, String, :required => true property :ward_name, String, :required => true
property :ward_code, String, :required => true property :ward_code, String, :required => true
def postcode=(postcode)
attribute_set(:postcode, postcode.strip.upcase)
end
def self.finder(postcode) def self.finder(postcode)
postcode = postcode.strip.upcase postcode = postcode.strip.upcase
@@ -32,7 +28,7 @@ class Postcode


unless result.code == 404 unless result.code == 404
# cache API result # cache API result
return self.create(
self.create(
:postcode => postcode, :postcode => postcode,
:lat => result['geo']['lat'], :lat => result['geo']['lat'],
:lng => result['geo']['lng'], :lng => result['geo']['lng'],
@@ -53,6 +49,7 @@ class Ward
include DataMapper::Resource include DataMapper::Resource
property :id, Serial property :id, Serial
property :slug, String, :required => true
property :ons_id, String, :required => true property :ons_id, String, :required => true
property :name, String, :required => true property :name, String, :required => true
property :constituency_id, Integer, :required => true property :constituency_id, Integer, :required => true


+ 1
- 1
views/home.haml View File

@@ -16,7 +16,7 @@
%p Who you can vote for depends on where you live. You can find your local candidates and get more information on how the elections work here. %p Who you can vote for depends on where you live. You can find your local candidates and get more information on how the elections work here.
%form{ :method => 'get', :action => '/wards' }
%form{ :method => 'get', :action => '/' }
%label{ :for => "postcode" } My postcode is %label{ :for => "postcode" } My postcode is
%input{ :type => 'text', :name => 'postcode', :value => 'SM1 1EA', :size => 8, :maxlength => 8 } %input{ :type => 'text', :name => 'postcode', :value => 'SM1 1EA', :size => 8, :maxlength => 8 }
%input{ :type => 'submit', :value => "Find it" } %input{ :type => 'submit', :value => "Find it" }

+ 2
- 0
views/layout.haml View File

@@ -21,6 +21,8 @@
%a{ :href => '/how-the-parliament-election-works' } How the parliament election works %a{ :href => '/how-the-parliament-election-works' } How the parliament election works
%p %p
%a{ :href => '/how-the-council-election-works' } How the council election works %a{ :href => '/how-the-council-election-works' } How the council election works
%p
%a{ :href => '/wards' } Sutton Council wards
%p %p
%a{ :href => '/about' } About this website %a{ :href => '/about' } About this website
<script type="text/javascript"> <script type="text/javascript">


+ 8
- 0
views/wardlist.haml View File

@@ -0,0 +1,8 @@
.grid_9
%h1 Sutton Council Wards
- for ward in @wards
%p.adr
%a{ :href => "/wards/#{ward.slug}" }
%span.locality
= ward.name

Loading…
Cancel
Save