|
|
@@ -1,7 +1,4 @@ |
|
|
|
require 'dm-core' |
|
|
|
require 'dm-validations' |
|
|
|
require 'dm-timestamps' |
|
|
|
require 'dm-aggregates' |
|
|
|
require 'data_mapper' |
|
|
|
require 'pat' |
|
|
|
|
|
|
|
class Postcode |
|
|
@@ -46,22 +43,95 @@ class Postcode |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
class Ward |
|
|
|
class Candidate |
|
|
|
include DataMapper::Resource |
|
|
|
|
|
|
|
property :id, Serial |
|
|
|
property :forenames, String, :required => true |
|
|
|
property :surname, String, :required => true |
|
|
|
property :sex, String |
|
|
|
|
|
|
|
property :id, Serial |
|
|
|
property :slug, String, :required => true |
|
|
|
property :ons_id, String, :required => true |
|
|
|
property :name, String, :required => true |
|
|
|
property :constituency_id, Integer, :required => true |
|
|
|
|
|
|
|
has n, :councilcandidates, :order => ['surname'] |
|
|
|
belongs_to :constituency |
|
|
|
has n, :candidacies |
|
|
|
|
|
|
|
def short_name |
|
|
|
@forenames.split(' ')[0] + ' ' + @surname |
|
|
|
end |
|
|
|
|
|
|
|
def name |
|
|
|
@forenames + ' ' + @surname |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
class Candidacy |
|
|
|
include DataMapper::Resource |
|
|
|
|
|
|
|
property :id, Serial |
|
|
|
property :election_id, Integer, :required => true |
|
|
|
property :candidate_id, Integer, :required => true |
|
|
|
property :party_id, Integer |
|
|
|
property :district_id, Integer, :required => true |
|
|
|
property :votes, Integer |
|
|
|
property :address, String, :length => 200 |
|
|
|
property :postcode, String |
|
|
|
property :position, Integer |
|
|
|
property :elected, Boolean |
|
|
|
property :seats, Integer |
|
|
|
|
|
|
|
belongs_to :election |
|
|
|
belongs_to :candidate |
|
|
|
belongs_to :party |
|
|
|
belongs_to :district |
|
|
|
end |
|
|
|
|
|
|
|
class Election |
|
|
|
include DataMapper::Resource |
|
|
|
|
|
|
|
property :id, Serial |
|
|
|
property :body_id, Integer, :required => true |
|
|
|
property :d, Date, :required => true |
|
|
|
property :reason, String, :length => 255 |
|
|
|
property :kind, String, :length => 255 |
|
|
|
|
|
|
|
has n, :candidacies |
|
|
|
belongs_to :body |
|
|
|
|
|
|
|
def self.past |
|
|
|
self.all(:d.lt => Time.now.to_s, :order => [ :d.desc ]) |
|
|
|
end |
|
|
|
|
|
|
|
def self.future |
|
|
|
self.all(:d.gte => Time.now.to_s, :order => [ :d.desc ]) |
|
|
|
end |
|
|
|
|
|
|
|
end |
|
|
|
|
|
|
|
class District |
|
|
|
include DataMapper::Resource |
|
|
|
|
|
|
|
property :id, Serial |
|
|
|
property :body_id, Integer, :required => true |
|
|
|
property :name, String, :length => 255, :required => true |
|
|
|
property :slug, String |
|
|
|
property :seats, Integer |
|
|
|
|
|
|
|
belongs_to :body |
|
|
|
|
|
|
|
def self.slugify(name) |
|
|
|
name.gsub(/[^\w\s-]/, '').gsub(/\s+/, '-').downcase |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
class Body |
|
|
|
include DataMapper::Resource |
|
|
|
|
|
|
|
property :id, Serial |
|
|
|
property :name, String, :length => 255, :required => true |
|
|
|
property :district_name, String, :length => 255, :required => true # singular |
|
|
|
property :districts_name, String, :length => 255, :required => true # plural |
|
|
|
property :slug, String, :length => 255 |
|
|
|
|
|
|
|
has n, :elections |
|
|
|
has n, :districts |
|
|
|
end |
|
|
|
|
|
|
|
class Party |
|
|
@@ -71,10 +141,32 @@ class Party |
|
|
|
property :name, String, :required => true |
|
|
|
property :colour, String |
|
|
|
|
|
|
|
has n, :candidates, :order => ['surname'] |
|
|
|
|
|
|
|
has n, :councilcandidates, :order => ['surname'] |
|
|
|
has n, :parliamentcandidates, :order => ['surname'] |
|
|
|
end |
|
|
|
|
|
|
|
# These models are now redundant |
|
|
|
|
|
|
|
class Ward |
|
|
|
include DataMapper::Resource |
|
|
|
|
|
|
|
property :id, Serial |
|
|
|
property :slug, String, :required => true |
|
|
|
property :ons_id, String, :required => true |
|
|
|
property :name, String, :required => true |
|
|
|
property :constituency_id, Integer, :required => true |
|
|
|
|
|
|
|
has n, :councilcandidates, :order => ['surname'] |
|
|
|
belongs_to :constituency |
|
|
|
|
|
|
|
def self.slugify(name) |
|
|
|
name.gsub(/[^\w\s-]/, '').gsub(/\s+/, '-').downcase |
|
|
|
end |
|
|
|
|
|
|
|
end |
|
|
|
|
|
|
|
class Councilcandidate |
|
|
|
include DataMapper::Resource |
|
|
|
|
|
|
@@ -120,5 +212,5 @@ class Constituency |
|
|
|
has n, :parliamentcandidates, :order => ['surname'] |
|
|
|
end |
|
|
|
|
|
|
|
DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/suttonelections.db") |
|
|
|
DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/db/suttonelections.db") |
|
|
|
DataMapper.auto_upgrade! |