mirror of
https://github.com/ENSL/ensl.org.git
synced 2024-12-28 13:31:06 +00:00
Merge branch 'develop' into feature/rails-4
This commit is contained in:
commit
48dc948fc0
14 changed files with 321 additions and 21 deletions
|
@ -32,12 +32,6 @@ class Topic < ActiveRecord::Base
|
|||
|
||||
scope :basic, :include => [:latest, { forum: :forumer }, :user]
|
||||
scope :ordered, :order => "state DESC, posts.id DESC"
|
||||
scope :recent,
|
||||
:conditions => "forumers.id IS NULL AND posts.id = (SELECT id FROM posts AS P WHERE P.topic_id = topics.id ORDER BY id DESC LIMIT 1)",
|
||||
:order => "posts.id DESC",
|
||||
:group => "topics.id"
|
||||
scope :latest_page,
|
||||
lambda { |page| {:limit => "#{(page-1)*LATEST_PER_PAGE}, #{(page-1)*LATEST_PER_PAGE+LATEST_PER_PAGE}"} }
|
||||
|
||||
validates_presence_of :user_id, :forum_id
|
||||
validates_length_of :title, :in => 1..50
|
||||
|
@ -47,6 +41,24 @@ class Topic < ActiveRecord::Base
|
|||
|
||||
acts_as_readable
|
||||
|
||||
def self.recent_topics
|
||||
find_by_sql %q{
|
||||
SELECT DISTINCT topics.*
|
||||
FROM (SELECT id, topic_id
|
||||
FROM posts
|
||||
ORDER BY id DESC
|
||||
LIMIT 20) AS T
|
||||
INNER JOIN topics
|
||||
ON T.topic_id = topics.id
|
||||
INNER JOIN forums
|
||||
ON forums.id = topics.forum_id
|
||||
LEFT OUTER JOIN forumers
|
||||
ON forumers.forum_id = forums.id
|
||||
WHERE forumers.id IS NULL
|
||||
LIMIT 5
|
||||
}
|
||||
end
|
||||
|
||||
def to_s
|
||||
title
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<ol>
|
||||
<% Topic.basic.recent.latest_page(page).each do |topic| %>
|
||||
<% Topic.recent_topics.each do |topic| %>
|
||||
<li class="bold">
|
||||
<%= link_to (h topic), lastpost(topic) %>
|
||||
</li>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<div class="widget-content-wrapper">
|
||||
<div class="separator">Latest forum posts</div>
|
||||
<ol>
|
||||
<% Topic.basic.recent.latest_page(1).each do |topic| %>
|
||||
<% Topic.recent_topics.each do |topic| %>
|
||||
<li>
|
||||
<%= link_to shorten(topic, 28), lastpost(topic) %>
|
||||
</li>
|
||||
|
|
6
db/migrate/20150820223313_add_index_to_forumers.rb
Normal file
6
db/migrate/20150820223313_add_index_to_forumers.rb
Normal file
|
@ -0,0 +1,6 @@
|
|||
class AddIndexToForumers < ActiveRecord::Migration
|
||||
def change
|
||||
add_index :forumers, :forum_id
|
||||
add_index :forumers, :group_id
|
||||
end
|
||||
end
|
141
db/schema.rb
141
db/schema.rb
|
@ -11,7 +11,21 @@
|
|||
#
|
||||
# It's strongly recommended to check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(:version => 20150701233306) do
|
||||
ActiveRecord::Schema.define(:version => 20150820223313) do
|
||||
|
||||
create_table "admin_requests", :force => true do |t|
|
||||
t.string "addr"
|
||||
t.string "pwd"
|
||||
t.integer "server_id"
|
||||
t.string "player"
|
||||
t.integer "user_id"
|
||||
t.string "msg"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
add_index "admin_requests", ["server_id"], :name => "index_admin_requests_on_server_id"
|
||||
add_index "admin_requests", ["user_id"], :name => "index_admin_requests_on_user_id"
|
||||
|
||||
create_table "article_versions", :force => true do |t|
|
||||
t.integer "article_id"
|
||||
|
@ -200,6 +214,16 @@ ActiveRecord::Schema.define(:version => 20150701233306) do
|
|||
add_index "data_files", ["directory_id"], :name => "index_data_files_on_directory_id"
|
||||
add_index "data_files", ["related_id"], :name => "index_data_files_on_related_id"
|
||||
|
||||
create_table "deleteds", :force => true do |t|
|
||||
t.integer "deletable_id"
|
||||
t.string "deletable_type"
|
||||
t.integer "user_id"
|
||||
t.text "reason"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.integer "related_id"
|
||||
end
|
||||
|
||||
create_table "directories", :force => true do |t|
|
||||
t.string "name"
|
||||
t.string "description"
|
||||
|
@ -212,6 +236,21 @@ ActiveRecord::Schema.define(:version => 20150701233306) do
|
|||
|
||||
add_index "directories", ["parent_id"], :name => "index_directories_on_parent_id"
|
||||
|
||||
create_table "firms", :force => true do |t|
|
||||
t.string "name"
|
||||
t.string "y_code"
|
||||
t.string "email"
|
||||
t.string "website"
|
||||
t.string "phone"
|
||||
t.string "address"
|
||||
t.integer "zipcode"
|
||||
t.string "town"
|
||||
t.integer "owner"
|
||||
t.string "opentime"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
create_table "forumers", :force => true do |t|
|
||||
t.integer "forum_id"
|
||||
t.integer "group_id"
|
||||
|
@ -220,6 +259,9 @@ ActiveRecord::Schema.define(:version => 20150701233306) do
|
|||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
add_index "forumers", ["forum_id"], :name => "index_forumers_on_forum_id"
|
||||
add_index "forumers", ["group_id"], :name => "index_forumers_on_group_id"
|
||||
|
||||
create_table "forums", :force => true do |t|
|
||||
t.string "title"
|
||||
t.string "description"
|
||||
|
@ -340,6 +382,44 @@ ActiveRecord::Schema.define(:version => 20150701233306) do
|
|||
|
||||
add_index "locks", ["lockable_id", "lockable_type"], :name => "index_locks_on_lockable_id_and_lockable_type"
|
||||
|
||||
create_table "log_events", :force => true do |t|
|
||||
t.string "name"
|
||||
t.string "description"
|
||||
t.integer "team"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
create_table "log_files", :force => true do |t|
|
||||
t.string "name"
|
||||
t.string "md5"
|
||||
t.integer "size"
|
||||
t.integer "server_id"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
add_index "log_files", ["server_id"], :name => "index_log_files_on_server_id"
|
||||
|
||||
create_table "logs", :force => true do |t|
|
||||
t.integer "server_id"
|
||||
t.text "text"
|
||||
t.integer "domain"
|
||||
t.datetime "created_at"
|
||||
t.integer "round_id"
|
||||
t.string "details"
|
||||
t.integer "actor_id"
|
||||
t.integer "target_id"
|
||||
t.string "specifics1"
|
||||
t.string "specifics2"
|
||||
t.integer "log_file_id"
|
||||
end
|
||||
|
||||
add_index "logs", ["actor_id"], :name => "index_logs_on_actor_id"
|
||||
add_index "logs", ["log_file_id"], :name => "index_logs_on_log_file_id"
|
||||
add_index "logs", ["round_id"], :name => "index_logs_on_round_id"
|
||||
add_index "logs", ["server_id"], :name => "index_logs_on_server_id"
|
||||
add_index "logs", ["target_id"], :name => "index_logs_on_target_id"
|
||||
|
||||
create_table "maps", :force => true do |t|
|
||||
t.string "name"
|
||||
t.string "download"
|
||||
|
@ -441,6 +521,13 @@ ActiveRecord::Schema.define(:version => 20150701233306) do
|
|||
add_index "movies", ["status"], :name => "index_movies_on_status"
|
||||
add_index "movies", ["user_id"], :name => "index_movies_on_user_id"
|
||||
|
||||
create_table "nodes", :force => true do |t|
|
||||
t.string "name"
|
||||
t.integer "foreign_key"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
create_table "options", :force => true do |t|
|
||||
t.string "option"
|
||||
t.integer "poll_id"
|
||||
|
@ -583,6 +670,42 @@ ActiveRecord::Schema.define(:version => 20150701233306) do
|
|||
add_index "readings", ["user_id", "readable_id", "readable_type"], :name => "index_readings_on_user_id_and_readable_id_and_readable_type"
|
||||
add_index "readings", ["user_id"], :name => "index_readings_on_user_id"
|
||||
|
||||
create_table "rounders", :force => true do |t|
|
||||
t.integer "round_id"
|
||||
t.integer "user_id"
|
||||
t.integer "team"
|
||||
t.string "roles"
|
||||
t.integer "kills"
|
||||
t.integer "deaths"
|
||||
t.string "name"
|
||||
t.string "steamid"
|
||||
t.integer "team_id"
|
||||
end
|
||||
|
||||
add_index "rounders", ["round_id"], :name => "index_rounders_on_round_id"
|
||||
add_index "rounders", ["team_id"], :name => "index_rounders_on_team_id"
|
||||
add_index "rounders", ["user_id"], :name => "index_rounders_on_user_id"
|
||||
|
||||
create_table "rounds", :force => true do |t|
|
||||
t.integer "server_id"
|
||||
t.datetime "start"
|
||||
t.datetime "end"
|
||||
t.integer "winner"
|
||||
t.integer "match_id"
|
||||
t.integer "commander_id"
|
||||
t.integer "team1_id"
|
||||
t.integer "team2_id"
|
||||
t.string "map_name"
|
||||
t.integer "map_id"
|
||||
end
|
||||
|
||||
add_index "rounds", ["commander_id"], :name => "index_rounds_on_commander_id"
|
||||
add_index "rounds", ["map_id"], :name => "index_rounds_on_map_id"
|
||||
add_index "rounds", ["match_id"], :name => "index_rounds_on_match_id"
|
||||
add_index "rounds", ["server_id"], :name => "index_rounds_on_server_id"
|
||||
add_index "rounds", ["team1_id"], :name => "index_rounds_on_team1_id"
|
||||
add_index "rounds", ["team2_id"], :name => "index_rounds_on_team2_id"
|
||||
|
||||
create_table "server_versions", :force => true do |t|
|
||||
t.integer "server_id"
|
||||
t.integer "version"
|
||||
|
@ -638,18 +761,6 @@ ActiveRecord::Schema.define(:version => 20150701233306) do
|
|||
add_index "sessions", ["session_id"], :name => "index_sessions_on_session_id"
|
||||
add_index "sessions", ["updated_at"], :name => "index_sessions_on_updated_at"
|
||||
|
||||
create_table "shoutmsg_archive", :force => true do |t|
|
||||
t.integer "user_id"
|
||||
t.string "text"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.string "shoutable_type"
|
||||
t.integer "shoutable_id"
|
||||
end
|
||||
|
||||
add_index "shoutmsg_archive", ["shoutable_type", "shoutable_id"], :name => "index_shoutmsgs_on_shoutable_type_and_shoutable_id"
|
||||
add_index "shoutmsg_archive", ["user_id"], :name => "index_shoutmsgs_on_user_id"
|
||||
|
||||
create_table "shoutmsgs", :force => true do |t|
|
||||
t.integer "user_id"
|
||||
t.string "text"
|
||||
|
@ -744,9 +855,13 @@ ActiveRecord::Schema.define(:version => 20150701233306) do
|
|||
t.string "time_zone"
|
||||
t.integer "version"
|
||||
t.boolean "public_email", :default => false, :null => false
|
||||
t.string "salt"
|
||||
end
|
||||
|
||||
add_index "users", ["email"], :name => "index_users_on_email"
|
||||
add_index "users", ["password"], :name => "index_users_on_password"
|
||||
add_index "users", ["team_id"], :name => "index_users_on_team_id"
|
||||
add_index "users", ["username"], :name => "index_users_on_username"
|
||||
|
||||
create_table "versions", :force => true do |t|
|
||||
t.string "item_type", :null => false
|
||||
|
|
6
spec/factories/forum.rb
Normal file
6
spec/factories/forum.rb
Normal file
|
@ -0,0 +1,6 @@
|
|||
FactoryGirl.define do
|
||||
factory :forum do
|
||||
sequence(:title) { |n| "Forum Title #{n}" }
|
||||
sequence(:description) { |n| "Forum Description #{n}" }
|
||||
end
|
||||
end
|
7
spec/factories/forumer.rb
Normal file
7
spec/factories/forumer.rb
Normal file
|
@ -0,0 +1,7 @@
|
|||
FactoryGirl.define do
|
||||
factory :forumer do
|
||||
forum
|
||||
group
|
||||
access Forumer::ACCESS_TOPIC
|
||||
end
|
||||
end
|
7
spec/factories/post.rb
Normal file
7
spec/factories/post.rb
Normal file
|
@ -0,0 +1,7 @@
|
|||
FactoryGirl.define do
|
||||
factory :post do
|
||||
sequence(:text) { |n| "Post Body #{n}" }
|
||||
topic
|
||||
user
|
||||
end
|
||||
end
|
10
spec/factories/topic.rb
Normal file
10
spec/factories/topic.rb
Normal file
|
@ -0,0 +1,10 @@
|
|||
FactoryGirl.define do
|
||||
factory :topic do
|
||||
sequence(:title) { |n| "Topic Title #{n}" }
|
||||
forum
|
||||
user
|
||||
before(:create) do |topic|
|
||||
topic.first_post = "My first post on the topic"
|
||||
end
|
||||
end
|
||||
end
|
29
spec/models/forum_spec.rb
Normal file
29
spec/models/forum_spec.rb
Normal file
|
@ -0,0 +1,29 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: forums
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# title :string(255)
|
||||
# description :string(255)
|
||||
# category_id :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# position :integer
|
||||
#
|
||||
|
||||
require "spec_helper"
|
||||
|
||||
describe Forum do
|
||||
let!(:user) { create :user }
|
||||
|
||||
describe "create" do
|
||||
let(:forum) { build :forum }
|
||||
|
||||
it "creates a new forum" do
|
||||
expect(forum.valid?).to eq(true)
|
||||
expect do
|
||||
forum.save!
|
||||
end.to change(Forum, :count).by(1)
|
||||
end
|
||||
end
|
||||
end
|
26
spec/models/forumer_spec.rb
Normal file
26
spec/models/forumer_spec.rb
Normal file
|
@ -0,0 +1,26 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: forumers
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# forum_id :integer
|
||||
# group_id :integer
|
||||
# access :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
#
|
||||
|
||||
require "spec_helper"
|
||||
|
||||
describe Forumer do
|
||||
describe "create" do
|
||||
let(:forumer) { build :forumer }
|
||||
|
||||
it "creates a new forumer" do
|
||||
expect(forumer.valid?).to eq(true)
|
||||
expect do
|
||||
forumer.save!
|
||||
end.to change(Forumer, :count).by(1)
|
||||
end
|
||||
end
|
||||
end
|
30
spec/models/post_spec.rb
Normal file
30
spec/models/post_spec.rb
Normal file
|
@ -0,0 +1,30 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: posts
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# text :text
|
||||
# topic_id :integer
|
||||
# user_id :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# text_parsed :text
|
||||
#
|
||||
|
||||
require "spec_helper"
|
||||
|
||||
describe Post do
|
||||
let!(:user) { create :user }
|
||||
|
||||
describe "create" do
|
||||
let(:post) { build :post }
|
||||
|
||||
it "creates a new post" do
|
||||
# expect(post.valid?).to eq(true)
|
||||
post.topic = create :topic
|
||||
expect do
|
||||
post.save!
|
||||
end.to change(Post, :count).by(1)
|
||||
end
|
||||
end
|
||||
end
|
51
spec/models/topic_spec.rb
Normal file
51
spec/models/topic_spec.rb
Normal file
|
@ -0,0 +1,51 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: topics
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# title :string(255)
|
||||
# user_id :integer
|
||||
# forum_id :integer
|
||||
# created_at :datetime
|
||||
# updated_at :datetime
|
||||
# state :integer default(0), not null
|
||||
#
|
||||
|
||||
require "spec_helper"
|
||||
|
||||
describe Topic do
|
||||
let!(:user) { create :user }
|
||||
let!(:forum) { create :forum }
|
||||
|
||||
describe "create" do
|
||||
let(:topic) { build :topic, user: user, forum: forum }
|
||||
|
||||
it "creates a new topic" do
|
||||
topic.first_post = "Foo"
|
||||
expect do
|
||||
topic.save!
|
||||
end.to change(Topic, :count).by(1)
|
||||
end
|
||||
end
|
||||
|
||||
describe ".recent_topics" do
|
||||
it "returns 5 unique, most recently posted topics" do
|
||||
topics = []
|
||||
6.times do
|
||||
topic = create :topic
|
||||
topics << topic
|
||||
3.times { create :post, topic: topic }
|
||||
end
|
||||
recent_topics = Topic.recent_topics
|
||||
topics.last(5).each do |topic|
|
||||
expect(recent_topics).to include(topic)
|
||||
end
|
||||
end
|
||||
it "does not return posts from restricted forums" do
|
||||
restricted_topic = create :topic, title: "Restricted"
|
||||
create :forumer, forum: restricted_topic.forum
|
||||
create :post, topic: restricted_topic
|
||||
expect(Topic.recent_topics).to_not include(restricted_topic)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -19,6 +19,7 @@
|
|||
# time_zone :string(255)
|
||||
# version :integer
|
||||
# public_email :boolean default(FALSE), not null
|
||||
# salt :string(255)
|
||||
#
|
||||
|
||||
require 'spec_helper'
|
||||
|
|
Loading…
Reference in a new issue