| @@ -1,7 +1,4 @@ | |||||
| require 'dm-core' | |||||
| require 'dm-validations' | |||||
| require 'dm-timestamps' | |||||
| require 'dm-aggregates' | |||||
| require 'data_mapper' | |||||
| require 'pat' | require 'pat' | ||||
| class Postcode | class Postcode | ||||
| @@ -46,22 +43,95 @@ class Postcode | |||||
| end | end | ||||
| end | end | ||||
| class Ward | |||||
| class Candidate | |||||
| include DataMapper::Resource | 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) | def self.slugify(name) | ||||
| name.gsub(/[^\w\s-]/, '').gsub(/\s+/, '-').downcase | name.gsub(/[^\w\s-]/, '').gsub(/\s+/, '-').downcase | ||||
| end | 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 | end | ||||
| class Party | class Party | ||||
| @@ -71,10 +141,32 @@ class Party | |||||
| property :name, String, :required => true | property :name, String, :required => true | ||||
| property :colour, String | property :colour, String | ||||
| has n, :candidates, :order => ['surname'] | |||||
| has n, :councilcandidates, :order => ['surname'] | has n, :councilcandidates, :order => ['surname'] | ||||
| has n, :parliamentcandidates, :order => ['surname'] | has n, :parliamentcandidates, :order => ['surname'] | ||||
| end | 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 | class Councilcandidate | ||||
| include DataMapper::Resource | include DataMapper::Resource | ||||
| @@ -120,5 +212,5 @@ class Constituency | |||||
| has n, :parliamentcandidates, :order => ['surname'] | has n, :parliamentcandidates, :order => ['surname'] | ||||
| end | 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! | DataMapper.auto_upgrade! | ||||