Basic models set up

This commit is contained in:
Shrey 2015-05-16 14:08:50 +05:30 committed by Matt Amos
parent 2bae7cd298
commit 5add3cf671
11 changed files with 234 additions and 0 deletions

View file

@ -68,6 +68,9 @@ gem "omniauth-github"
# Markdown formatting support # Markdown formatting support
gem "redcarpet" gem "redcarpet"
# For status transitions of Issues
gem "aasm"
# Load libxml support for XML parsing and generation # Load libxml support for XML parsing and generation
gem "libxml-ruby", ">= 2.0.5", :require => "libxml" gem "libxml-ruby", ">= 2.0.5", :require => "libxml"

View file

@ -2,6 +2,7 @@ GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
SystemTimer (1.2.3) SystemTimer (1.2.3)
aasm (4.1.0)
actionmailer (4.2.7) actionmailer (4.2.7)
actionpack (= 4.2.7) actionpack (= 4.2.7)
actionview (= 4.2.7) actionview (= 4.2.7)
@ -307,6 +308,7 @@ PLATFORMS
DEPENDENCIES DEPENDENCIES
SystemTimer (>= 1.1.3) SystemTimer (>= 1.1.3)
aasm
actionpack-page_caching actionpack-page_caching
autoprefixer-rails autoprefixer-rails
bigdecimal (~> 1.1.0) bigdecimal (~> 1.1.0)

42
app/models/issue.rb Normal file
View file

@ -0,0 +1,42 @@
class Issue < ActiveRecord::Base
belongs_to :reportable, :polymorphic => true
has_many :reports
validates :reportable_id, :uniqueness => { :scope => [ :reportable_type ] }
# Check if more statuses are needed
enum status: %w( open ignored resolved )
scope :with_status, -> (issue_status) { where(:status => statuses[issue_status])}
def read_reports
resolved_at.present? ? reports.where("created_at < ?", resolved_at) : nil
end
def unread_reports
resolved_at.present? ? reports.where("created_at >= ?", resolved_at) : reports
end
include AASM
aasm :column => :status, :no_direct_assignment => true do
state :open, :initial => true
state :ignored
state :resolved
event :ignore do
transitions :from => :open, :to => :ignored
end
event :resolve do
transitions :from => :open, :to => :resolved
after do
self.resolved_at = Time.now.getutc
end
end
event :reopen do
transitions :from => :resolved, :to => :open
end
end
end

5
app/models/report.rb Normal file
View file

@ -0,0 +1,5 @@
class Report < ActiveRecord::Base
belongs_to :issue
belongs_to :user
end

View file

@ -0,0 +1,16 @@
class CreateIssues < ActiveRecord::Migration
def change
create_table :issues do |t|
t.string :reportable_type
t.integer :reportable_id
t.integer :user_id
t.integer :status
t.datetime :resolved_at
t.integer :resolved_by
t.datetime :created_at
t.datetime :updated_at
t.timestamps null: false
end
end
end

View file

@ -0,0 +1,13 @@
class CreateReports < ActiveRecord::Migration
def change
create_table :reports do |t|
t.integer :issue_id
t.integer :user_id
t.text :details
t.datetime :created_at
t.datetime :updated_at
t.timestamps null: false
end
end
end

View file

@ -663,6 +663,42 @@ CREATE SEQUENCE gpx_files_id_seq
ALTER SEQUENCE gpx_files_id_seq OWNED BY gpx_files.id; ALTER SEQUENCE gpx_files_id_seq OWNED BY gpx_files.id;
--
-- Name: issues; Type: TABLE; Schema: public; Owner: -; Tablespace:
--
CREATE TABLE issues (
id integer NOT NULL,
reportable_type character varying,
reportable_id integer,
user_id integer,
status integer,
resolved_at timestamp without time zone,
resolved_by integer,
created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL
);
--
-- Name: issues_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE issues_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: issues_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE issues_id_seq OWNED BY issues.id;
-- --
-- Name: languages; Type: TABLE; Schema: public; Owner: - -- Name: languages; Type: TABLE; Schema: public; Owner: -
-- --
@ -964,6 +1000,39 @@ CREATE TABLE relations (
); );
--
-- Name: reports; Type: TABLE; Schema: public; Owner: -; Tablespace:
--
CREATE TABLE reports (
id integer NOT NULL,
issue_id integer,
user_id integer,
details text,
created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL
);
--
-- Name: reports_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE reports_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: reports_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE reports_id_seq OWNED BY reports.id;
-- --
-- Name: schema_migrations; Type: TABLE; Schema: public; Owner: - -- Name: schema_migrations; Type: TABLE; Schema: public; Owner: -
-- --
@ -1266,6 +1335,13 @@ ALTER TABLE ONLY gpx_file_tags ALTER COLUMN id SET DEFAULT nextval('gpx_file_tag
ALTER TABLE ONLY gpx_files ALTER COLUMN id SET DEFAULT nextval('gpx_files_id_seq'::regclass); ALTER TABLE ONLY gpx_files ALTER COLUMN id SET DEFAULT nextval('gpx_files_id_seq'::regclass);
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY issues ALTER COLUMN id SET DEFAULT nextval('issues_id_seq'::regclass);
-- --
-- Name: id; Type: DEFAULT; Schema: public; Owner: - -- Name: id; Type: DEFAULT; Schema: public; Owner: -
-- --
@ -1308,6 +1384,13 @@ ALTER TABLE ONLY oauth_tokens ALTER COLUMN id SET DEFAULT nextval('oauth_tokens_
ALTER TABLE ONLY redactions ALTER COLUMN id SET DEFAULT nextval('redactions_id_seq'::regclass); ALTER TABLE ONLY redactions ALTER COLUMN id SET DEFAULT nextval('redactions_id_seq'::regclass);
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY reports ALTER COLUMN id SET DEFAULT nextval('reports_id_seq'::regclass);
-- --
-- Name: id; Type: DEFAULT; Schema: public; Owner: - -- Name: id; Type: DEFAULT; Schema: public; Owner: -
-- --
@ -1472,6 +1555,14 @@ ALTER TABLE ONLY gpx_files
ADD CONSTRAINT gpx_files_pkey PRIMARY KEY (id); ADD CONSTRAINT gpx_files_pkey PRIMARY KEY (id);
--
-- Name: issues_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
--
ALTER TABLE ONLY issues
ADD CONSTRAINT issues_pkey PRIMARY KEY (id);
-- --
-- Name: languages_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- Name: languages_pkey; Type: CONSTRAINT; Schema: public; Owner: -
-- --
@ -1568,6 +1659,14 @@ ALTER TABLE ONLY relations
ADD CONSTRAINT relations_pkey PRIMARY KEY (relation_id, version); ADD CONSTRAINT relations_pkey PRIMARY KEY (relation_id, version);
--
-- Name: reports_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
--
ALTER TABLE ONLY reports
ADD CONSTRAINT reports_pkey PRIMARY KEY (id);
-- --
-- Name: user_blocks_pkey; Type: CONSTRAINT; Schema: public; Owner: - -- Name: user_blocks_pkey; Type: CONSTRAINT; Schema: public; Owner: -
-- --
@ -2554,6 +2653,10 @@ INSERT INTO schema_migrations (version) VALUES ('20150111192335');
INSERT INTO schema_migrations (version) VALUES ('20150222101847'); INSERT INTO schema_migrations (version) VALUES ('20150222101847');
INSERT INTO schema_migrations (version) VALUES ('20150516073616');
INSERT INTO schema_migrations (version) VALUES ('20150516075620');
INSERT INTO schema_migrations (version) VALUES ('21'); INSERT INTO schema_migrations (version) VALUES ('21');
INSERT INTO schema_migrations (version) VALUES ('22'); INSERT INTO schema_migrations (version) VALUES ('22');

21
test/fixtures/issues.yml vendored Normal file
View file

@ -0,0 +1,21 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
one:
reportable_type: MyString
reportable_id: 1
user_id: 1
status: 1
resolved_at: 2015-05-16 13:06:16
resolved_by: 1
created_at: 2015-05-16 13:06:16
updated_at: 2015-05-16 13:06:16
two:
reportable_type: MyString
reportable_id: 1
user_id: 1
status: 1
resolved_at: 2015-05-16 13:06:16
resolved_by: 1
created_at: 2015-05-16 13:06:16
updated_at: 2015-05-16 13:06:16

15
test/fixtures/reports.yml vendored Normal file
View file

@ -0,0 +1,15 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
one:
issue_id: 1
user_id: 1
details: MyText
created_at: 2015-05-16 13:26:20
updated_at: 2015-05-16 13:26:20
two:
issue_id: 1
user_id: 1
details: MyText
created_at: 2015-05-16 13:26:20
updated_at: 2015-05-16 13:26:20

View file

@ -0,0 +1,7 @@
require 'test_helper'
class IssueTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end

View file

@ -0,0 +1,7 @@
require 'test_helper'
class ReportTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end