Merge pull request #1920 from nickborromeo/list-controller

Extract queries to keep logic in the Categories Model
This commit is contained in:
Robin Ward 2014-02-11 15:48:20 -05:00
commit b035c050d2
3 changed files with 28 additions and 4 deletions

View File

@ -219,13 +219,12 @@ class ListController < ApplicationController
parent_category_id = nil
if parent_slug_or_id.present?
parent_category_id = Category.where(slug: parent_slug_or_id).pluck(:id).first ||
Category.where(id: parent_slug_or_id.to_i).pluck(:id).first
parent_category_id = Category.query_parent_category(parent_slug_or_id)
raise Discourse::NotFound.new if parent_category_id.blank?
end
@category = Category.where(slug: slug_or_id, parent_category_id: parent_category_id).includes(:featured_users).first ||
Category.where(id: slug_or_id.to_i, parent_category_id: parent_category_id).includes(:featured_users).first
@category = Category.query_category(slug_or_id, parent_category_id)
guardian.ensure_can_see!(@category)
raise Discourse::NotFound.new if @category.blank?

View File

@ -340,6 +340,16 @@ SQL
[read_restricted, mapped]
end
def self.query_parent_category(parent_slug)
self.where(slug: parent_slug).pluck(:id).first ||
self.where(id: parent_slug.to_i).pluck(:id).first
end
def self.query_category(slug, parent_category_id)
self.where(slug: slug, parent_category_id: parent_category_id).includes(:featured_users).first ||
self.where(id: slug.to_i, parent_category_id: parent_category_id).includes(:featured_users).first
end
def uncategorized?
id == SiteSetting.uncategorized_category_id
end

View File

@ -372,6 +372,21 @@ describe Category do
end
describe ".query_parent_category" do
it "should return the parent category id given a parent slug" do
parent_category.name = "Amazing Category"
parent_category.id.should == Category.query_parent_category(parent_category.slug)
end
end
describe ".query_category" do
it "should return the category" do
category = Fabricate(:category, name: "Amazing Category", parent_category_id: parent_category.id, user: user)
parent_category.name = "Amazing Parent Category"
category.should == Category.query_category(category.slug, parent_category.id)
end
end
end
end