Переглянути джерело

Added parliamentary candidates. Text and style changes

tags/last-sinatra-version
Adrian Short 16 роки тому
джерело
коміт
ab294690e2
8 змінених файлів з 106 додано та 60 видалено
  1. +6
    -3
      app.rb
  2. +53
    -34
      import.rb
  3. +17
    -0
      lib/models.rb
  4. +2
    -0
      public/style.css
  5. +10
    -5
      views/about.haml
  6. +4
    -1
      views/home.haml
  7. +1
    -0
      views/layout.haml
  8. +13
    -17
      views/wards.haml

+ 6
- 3
app.rb Переглянути файл

@@ -1,5 +1,6 @@
require 'rubygems' require 'rubygems'
require 'sinatra' require 'sinatra'
require 'haml'
require 'pat' require 'pat'
require 'dm-core' require 'dm-core'
require 'dm-validations' require 'dm-validations'
@@ -13,7 +14,8 @@ end


get '/wards/:id' do get '/wards/:id' do
@ward = Ward.get(params[:id]) @ward = Ward.get(params[:id])
@candidates = Councilcandidate.all( :ward_id => @ward.id, :order => 'surname' )
@council_candidates = Councilcandidate.all( :ward_id => @ward.id, :order => 'surname' )
@parly_candidates = Parliamentcandidate.all( :constituency_id => @ward.constituency.id, :order => 'surname')
haml :wards haml :wards
end end


@@ -22,8 +24,9 @@ get '/wards' do
result = Pat.get(@postcode) result = Pat.get(@postcode)
@district_name = result['administrative']['district']['title'] @district_name = result['administrative']['district']['title']
@ward_name = result['administrative']['ward']['title'] @ward_name = result['administrative']['ward']['title']
@ward = Ward.first( :name => @ward_name )
@candidates = Councilcandidate.all( :ward_id => @ward.id, :order => 'surname')
@ward = Ward.first( { :name => @ward_name } )
@council_candidates = Councilcandidate.all( :ward_id => @ward.id, :order => 'surname')
@parly_candidates = Parliamentcandidate.all( :constituency_id => @ward.constituency.id, :order => 'surname')
haml :wards haml :wards
end end




+ 53
- 34
import.rb Переглянути файл

@@ -5,51 +5,70 @@ require 'dm-validations'
require 'dm-timestamps' require 'dm-timestamps'
require 'lib/models' require 'lib/models'


DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/db.sqlite3")
DataMapper.auto_upgrade!

# Import wards # 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


CSV::Reader.parse(File.open('wards.csv', 'rb')) do |row|
p row
Ward.create(
'ons_id' => row[0],
'name' => row[1]
)
end
# parties = [
# "British National Party",
# "Christian Peoples Alliance",
# "Conservative Party",
# "Green Party",
# "Labour Party",
# "Labour and Co-Operative Party",
# "Liberal Democrats",
# "United Kingdom Independence Party",
# "Libertarian Party"
# ]
#
# for party in parties
# puts party
# Party.create( :name => party )
# end


# Define parties
# Import council candidates


parties = [
"British National Party",
"Christian Peoples Alliance",
"Conservative Party",
"Green Party",
"Labour Party",
"Labour and Co-Operative Party",
"Liberal Democrats",
"United Kingdom Independence Party"
]

for party in parties
puts party
Party.create( :name => party )
end
# CSV::Reader.parse(File.open('../candidates-pretty.csv', 'rb')) do |row|
# p row
#
# c = Councilcandidate.new(
# 'forenames' => row[1],
# 'surname' => row[2],
# 'address' => row[4],
# 'postcode' => row[5]
# )
#
# c.ward = Ward.first( :name => row[0] )
# c.party = Party.first( :name => row[3] )
#
# unless c.save
# puts "ERROR: Failed to save candidate"
# c.errors.each do |e|
# puts e
# end
# end
# end


# Import candidates
# Import parliament candidates


CSV::Reader.parse(File.open('../candidates-pretty.csv', 'rb')) do |row|
CSV::Reader.parse(File.open('../parliament-candidates.csv', 'rb')) do |row|
p row p row
c = Councilcandidate.new(
c = Parliamentcandidate.new(
'forenames' => row[1], 'forenames' => row[1],
'surname' => row[2],
'address' => row[4],
'postcode' => row[5]
'surname' => row[2]
) )


c.ward = Ward.first( :name => row[0] )
c.party = Party.first( :name => row[3] )
c.constituency = Constituency.first( :name => row[3] )
c.party = Party.first( :name => row[0] )


unless c.save unless c.save
puts "ERROR: Failed to save candidate" puts "ERROR: Failed to save candidate"


+ 17
- 0
lib/models.rb Переглянути файл

@@ -31,6 +31,7 @@ class Party
property :name, String, :required => true property :name, String, :required => true
has n, :councilcandidates has n, :councilcandidates
has n, :parliamentcandidates
end end


class Councilcandidate class Councilcandidate
@@ -48,6 +49,21 @@ class Councilcandidate
belongs_to :ward belongs_to :ward
end end


class Parliamentcandidate
include DataMapper::Resource
property :id, Serial
property :constituency_id, Integer, :required => true
property :party_id, Integer, :required => true
property :forenames, String, :required => true
property :surname, String, :required => true
property :address, String, :length => 200
property :postcode, String

belongs_to :party
belongs_to :constituency
end

class Constituency class Constituency
include DataMapper::Resource include DataMapper::Resource
@@ -55,6 +71,7 @@ class Constituency
property :name, String, :required => true property :name, String, :required => true
has n, :wards has n, :wards
has n, :parliamentcandidates
end end


DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/db.sqlite3") DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/db.sqlite3")

+ 2
- 0
public/style.css Переглянути файл

@@ -56,6 +56,7 @@ a:hover
h2 h2
{ {
margin-top: 50px; margin-top: 50px;
line-height: 1.5em;
} }


form form
@@ -78,6 +79,7 @@ a.date
h1 h1
{ {
margin-top: 50px; margin-top: 50px;
line-height: 1.5em;
} }


.candidate_name .candidate_name


+ 10
- 5
views/about.haml Переглянути файл

@@ -2,15 +2,20 @@


%p %p
This website was designed by This website was designed by
%a{ :href => 'http://adrianshort.co.uk' } Adrian Short
%a{ :href => 'http://adrianshort.co.uk' }> Adrian Short
\.
You can contact me by email at
%a{ :href => "mailto:adrian.short@gmail.com" }< adrian.short@gmail.com
and
%a{ :href => "http://twitter.com/adrianshort" }<follow me on Twitter
\.
%p It is independent of Sutton Council, all political parties and candidates.
%p This site is independent of Sutton Council, all political parties and candidates. It exists only to provide information about the voting system and local candidates.


%p %p
The code for this website is open source and managed on Github. It is hosted by Heroku.

The council candidates' data comes from Sutton Council who also provided information on council wards and parliamentary constituencies.
%p %p
The candidates' data comes from Sutton Council who also provided information on council wards and parliamentary constituencies.
The code for this website is open source and managed on Github. It is hosted by Heroku.
%p %p
The postcode lookup is done by UK Postcodes using open data from Ordnance Survey Code-Point Open enhanced by MySociety. I use the Ruby Pat gem to access the postcodes API. The postcode lookup is done by UK Postcodes using open data from Ordnance Survey Code-Point Open enhanced by MySociety. I use the Ruby Pat gem to access the postcodes API.


+ 4
- 1
views/home.haml Переглянути файл

@@ -1,4 +1,7 @@
%h1 One day. Two elections in Sutton.
%h1
Vote for your MP and councillors
%br
in Sutton


%p %p
On 6 May you can vote to On 6 May you can vote to


+ 1
- 0
views/layout.haml Переглянути файл

@@ -1,3 +1,4 @@
!!! XML
!!! !!!
%html %html
%head %head


+ 13
- 17
views/wards.haml Переглянути файл

@@ -1,16 +1,5 @@
- if @postcode
%h1
= @postcode
is in
= @ward_name
Ward
-else
%h1
= @ward.name
Ward

%h2
Your candidates for
%h1
Candidates for
= @ward.constituency.name = @ward.constituency.name
member of parliament member of parliament
@@ -19,7 +8,14 @@
%strong %strong
ONE ONE
of these people to become your next MP. of these people to become your next MP.

- for candidate in @parly_candidates
%p
%span.candidate_name
= candidate.forenames
= candidate.surname
%br
= candidate.party.name
%p.highlight %p.highlight
This list of candidates may be incomplete as people have until This list of candidates may be incomplete as people have until
@@ -29,8 +25,8 @@
= @ward.constituency.name = @ward.constituency.name
MP. MP.
%h2
Your council candidates in
%h1
Council candidates in
= @ward.name = @ward.name
Ward Ward


@@ -44,7 +40,7 @@
Find out more about Find out more about
%a{ :href => '/how-the-council-election-works' } how the council election works. %a{ :href => '/how-the-council-election-works' } how the council election works.
- for candidate in @candidates
- for candidate in @council_candidates
%p %p
%span.candidate_name %span.candidate_name
= candidate.forenames = candidate.forenames


Завантаження…
Відмінити
Зберегти