Merge pull request #1640 from entantoencuanto/issue#1575-tag-administration

Issue #1575 tag administration
This commit is contained in:
Raimond Garcia
2017-06-30 10:43:55 +02:00
committed by GitHub
24 changed files with 101 additions and 112 deletions

View File

@@ -4,17 +4,12 @@ class Admin::TagsController < Admin::BaseController
respond_to :html, :js
def index
@tags = ActsAsTaggableOn::Tag.order(featured: :desc).page(params[:page])
@tag = ActsAsTaggableOn::Tag.new
@tags = ActsAsTaggableOn::Tag.category.page(params[:page])
@tag = ActsAsTaggableOn::Tag.category.new
end
def create
ActsAsTaggableOn::Tag.create(tag_params)
redirect_to admin_tags_path
end
def update
@tag.update(tag_params)
ActsAsTaggableOn::Tag.category.create(tag_params)
redirect_to admin_tags_path
end
@@ -26,11 +21,11 @@ class Admin::TagsController < Admin::BaseController
private
def tag_params
params.require(:tag).permit(:featured, :name)
params.require(:tag).permit(:name)
end
def find_tag
@tag = ActsAsTaggableOn::Tag.find(params[:id])
@tag = ActsAsTaggableOn::Tag.category.find(params[:id])
end
end

View File

@@ -67,7 +67,7 @@ module Budgets
end
def load_categories
@categories = ActsAsTaggableOn::Tag.where("kind = 'category'").order(:name)
@categories = ActsAsTaggableOn::Tag.category.order(:name)
end
def load_ballot_referer

View File

@@ -118,7 +118,7 @@ module Budgets
end
def load_categories
@categories = ActsAsTaggableOn::Tag.where("kind = 'category'").order(:name)
@categories = ActsAsTaggableOn::Tag.category.order(:name)
end
def tag_cloud

View File

@@ -92,7 +92,7 @@ module CommentableActions
end
def load_categories
@categories = ActsAsTaggableOn::Tag.where("kind = 'category'").order(:name)
@categories = ActsAsTaggableOn::Tag.category.order(:name)
end
def parse_tag_filter

View File

@@ -64,7 +64,7 @@ class Management::Budgets::InvestmentsController < Management::BaseController
end
def load_categories
@categories = ActsAsTaggableOn::Tag.where("kind = 'category'").order(:name)
@categories = ActsAsTaggableOn::Tag.category.order(:name)
end
end

View File

@@ -8,12 +8,6 @@
<%= f.text_field :name, placeholder: t("admin.tags.name.placeholder"), label: false %>
</div>
<div class="is-featured small-12 medium-6 column">
<%= f.label :featured do %>
<%= f.check_box :featured, title: t('admin.tags.mark_as_featured'), label: false %>
<span class="checkbox"><%= t("admin.tags.mark_as_featured") %></span>
<% end %>
</div>
</div>
<%= f.submit(t("admin.tags.create"), class: "button success") %>
@@ -33,13 +27,8 @@
<span class="float-left text-left">
<strong><%= tag.name %></strong>
<%= f.label "featured_#{tag.id}" do %>
<%= f.check_box :featured, title: t('admin.tags.mark_as_featured'), label: false, id: "tag_featured_#{tag.id}", class: "inline-block" %>
<span class="checkbox inline-block"><%= t("admin.tags.mark_as_featured") %></span>
<% end %>
</span>
<%= f.submit(t("admin.tags.update"), class: "button hollow on-hover") %>
<%= link_to t("admin.tags.destroy"), admin_tag_path(tag), method: :delete, class: "button hollow alert on-hover" %>
<% end %>
</td>

View File

@@ -29,6 +29,12 @@ module ActsAsTaggableOn
Tag.class_eval do
scope :category, -> { where(kind: "category") }
def category?
kind == "category"
end
include Graphqlable
scope :public_for_api, -> do
@@ -52,7 +58,7 @@ module ActsAsTaggableOn
end
def self.category_names
Tag.where("kind = 'category'").pluck(:name)
Tag.category.pluck(:name)
end
def self.spending_proposal_tags

View File

@@ -837,10 +837,8 @@ en:
index:
add_tag: Add a new proposal topic
title: Proposal topics
mark_as_featured: Propose topic upon creating proposal
name:
placeholder: Type the name of the topic
update: Update Topic
users:
columns:
name: Name

View File

@@ -837,10 +837,8 @@ es:
index:
add_tag: Añade un nuevo tema de propuesta
title: Temas de propuesta
mark_as_featured: Proponer tema al crear propuesta
name:
placeholder: Escribe el nombre del tema
update: Actualizar Tema
users:
columns:
name: Nombre

View File

@@ -649,10 +649,8 @@ fr:
index:
add_tag: Ajouter un nouveau sujet de proposition
title: Sujets de propositions
mark_as_featured: Proposer le sujet lors de la création d'une proposition
name:
placeholder: Saisir le nom du sujet
update: Mettre-à-jour le sujet
users:
index:
filter: Filtrer

View File

@@ -646,10 +646,8 @@ nl:
index:
add_tag: Add a new proposal topic
title: Proposal topics
mark_as_featured: Propose topic upon creating proposal
name:
placeholder: Type the name of the topic
update: Update Topic
users:
index:
filter: Filter

View File

@@ -130,21 +130,21 @@ not_org_users = User.where(['users.id NOT IN(?)', org_user_ids])
puts ""
print "Creating Tags Categories"
ActsAsTaggableOn::Tag.create!(name: "Asociaciones", featured: true, kind: "category")
ActsAsTaggableOn::Tag.create!(name: "Cultura", featured: true, kind: "category")
ActsAsTaggableOn::Tag.create!(name: "Deportes", featured: true, kind: "category")
ActsAsTaggableOn::Tag.create!(name: "Derechos Sociales", featured: true, kind: "category")
ActsAsTaggableOn::Tag.create!(name: "Economía", featured: true, kind: "category")
ActsAsTaggableOn::Tag.create!(name: "Empleo", featured: true, kind: "category")
ActsAsTaggableOn::Tag.create!(name: "Equidad", featured: true, kind: "category")
ActsAsTaggableOn::Tag.create!(name: "Sostenibilidad", featured: true, kind: "category")
ActsAsTaggableOn::Tag.create!(name: "Participación", featured: true, kind: "category")
ActsAsTaggableOn::Tag.create!(name: "Movilidad", featured: true, kind: "category")
ActsAsTaggableOn::Tag.create!(name: "Medios", featured: true, kind: "category")
ActsAsTaggableOn::Tag.create!(name: "Salud", featured: true, kind: "category")
ActsAsTaggableOn::Tag.create!(name: "Transparencia", featured: true, kind: "category")
ActsAsTaggableOn::Tag.create!(name: "Seguridad y Emergencias", featured: true, kind: "category")
ActsAsTaggableOn::Tag.create!(name: "Medio Ambiente", featured: true, kind: "category")
ActsAsTaggableOn::Tag.category.create!(name: "Asociaciones")
ActsAsTaggableOn::Tag.category.create!(name: "Cultura")
ActsAsTaggableOn::Tag.category.create!(name: "Deportes")
ActsAsTaggableOn::Tag.category.create!(name: "Derechos Sociales")
ActsAsTaggableOn::Tag.category.create!(name: "Economía")
ActsAsTaggableOn::Tag.category.create!(name: "Empleo")
ActsAsTaggableOn::Tag.category.create!(name: "Equidad")
ActsAsTaggableOn::Tag.category.create!(name: "Sostenibilidad")
ActsAsTaggableOn::Tag.category.create!(name: "Participación")
ActsAsTaggableOn::Tag.category.create!(name: "Movilidad")
ActsAsTaggableOn::Tag.category.create!(name: "Medios")
ActsAsTaggableOn::Tag.category.create!(name: "Salud")
ActsAsTaggableOn::Tag.category.create!(name: "Transparencia")
ActsAsTaggableOn::Tag.category.create!(name: "Seguridad y Emergencias")
ActsAsTaggableOn::Tag.category.create!(name: "Medio Ambiente")
puts ""
print "Creating Debates"

View File

@@ -0,0 +1,5 @@
class RemoveFeaturedFromTags < ActiveRecord::Migration
def change
remove_column :tags, :featured, :boolean, default: false
end
end

View File

@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20170621180611) do
ActiveRecord::Schema.define(version: 20170623141655) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -841,7 +841,6 @@ ActiveRecord::Schema.define(version: 20170621180611) do
create_table "tags", force: :cascade do |t|
t.string "name", limit: 40
t.integer "taggings_count", default: 0
t.boolean "featured", default: false
t.integer "debates_count", default: 0
t.integer "proposals_count", default: 0
t.integer "spending_proposals_count", default: 0

View File

@@ -538,12 +538,8 @@ FactoryGirl.define do
factory :tag, class: 'ActsAsTaggableOn::Tag' do
sequence(:name) { |n| "Tag #{n} name" }
trait :featured do
featured true
end
trait :unfeatured do
featured false
trait :category do
kind "category"
end
end

View File

@@ -3,12 +3,13 @@ require 'rails_helper'
feature 'Admin tags' do
background do
@tag1 = create(:tag)
@tag1 = create(:tag, :category)
login_as(create(:administrator).user)
end
scenario 'Index' do
create(:debate, tag_list: 'supertag')
debate = create(:debate)
debate.tag_list.add(create(:tag, :category, name: "supertag"))
visit admin_tags_path
expect(page).to have_content @tag1.name
@@ -30,23 +31,8 @@ feature 'Admin tags' do
expect(page).to have_content 'important issues'
end
scenario 'Update' do
visit admin_tags_path
featured_checkbox = find("#tag_featured_#{@tag1.id}")
expect(featured_checkbox.checked?).to be_blank
within("#edit_tag_#{@tag1.id}") do
check "tag_featured_#{@tag1.id}"
click_button 'Update Topic'
end
visit admin_tags_path
featured_checkbox = find("#tag_featured_#{@tag1.id}")
expect(featured_checkbox.checked?).to eq(true)
end
scenario 'Delete' do
tag2 = create(:tag, name: 'bad tag')
tag2 = create(:tag, :category, name: "bad tag")
create(:debate, tag_list: tag2.name)
visit admin_tags_path
@@ -63,7 +49,7 @@ feature 'Admin tags' do
end
scenario 'Delete tag with hidden taggables' do
tag2 = create(:tag, name: 'bad tag')
tag2 = create(:tag, :category, name: "bad tag")
debate = create(:debate, tag_list: tag2.name)
debate.hide
@@ -81,4 +67,25 @@ feature 'Admin tags' do
expect(page).to_not have_content tag2.name
end
context "Manage only tags of kind category" do
scenario "Index shows only categories" do
not_category_tag = create(:tag, name: "Not a category")
visit admin_tags_path
expect(page).to have_content @tag1.name
expect(page).to_not have_content "Not a category"
end
scenario "Create instanciates tags of correct kind" do
visit admin_tags_path
within("form.new_tag") do
fill_in "tag_name", with: "wow_category"
click_button 'Create Topic'
end
expect(ActsAsTaggableOn::Tag.category.where(name: "wow_category")).to exist
end
end
end

View File

@@ -1345,8 +1345,8 @@ feature 'Proposals' do
context "Summary" do
scenario "Displays proposals grouped by category" do
create(:tag, kind: 'category', name: 'Culture')
create(:tag, kind: 'category', name: 'Social Services')
create(:tag, :category, name: 'Culture')
create(:tag, :category, name: 'Social Services')
3.times { create(:proposal, tag_list: 'Culture') }
3.times { create(:proposal, tag_list: 'Social Services') }
@@ -1389,7 +1389,7 @@ feature 'Proposals' do
end
scenario "Displays a maximum of 3 proposals per category" do
create(:tag, kind: 'category', name: 'culture')
create(:tag, :category, name: 'culture')
4.times { create(:proposal, tag_list: 'culture') }
visit summary_proposals_path
@@ -1398,7 +1398,7 @@ feature 'Proposals' do
end
scenario "Orders proposals by votes" do
create(:tag, kind: 'category', name: 'culture')
create(:tag, :category, name: 'culture')
create(:proposal, title: 'Best', tag_list: 'culture').update_column(:confidence_score, 10)
create(:proposal, title: 'Worst', tag_list: 'culture').update_column(:confidence_score, 2)
create(:proposal, title: 'Medium', tag_list: 'culture').update_column(:confidence_score, 5)
@@ -1410,7 +1410,7 @@ feature 'Proposals' do
end
scenario "Displays proposals from last week" do
create(:tag, kind: 'category', name: 'culture')
create(:tag, :category, name: 'culture')
proposal1 = create(:proposal, tag_list: 'culture', created_at: 1.day.ago)
proposal2 = create(:proposal, tag_list: 'culture', created_at: 5.days.ago)
proposal3 = create(:proposal, tag_list: 'culture', created_at: 8.days.ago)

View File

@@ -79,8 +79,8 @@ feature 'Tags' do
scenario 'Category with category tags', :js do
login_as(author)
education = create(:tag, name: 'Education', kind: 'category')
health = create(:tag, name: 'Health', kind: 'category')
education = create(:tag, :category, name: 'Education')
health = create(:tag, :category, name: 'Health')
visit new_budget_investment_path(budget_id: budget.id)
@@ -221,8 +221,8 @@ feature 'Tags' do
context "Categories" do
let!(:tag1) { create(:tag, kind: 'category', name: 'Medio Ambiente') }
let!(:tag2) { create(:tag, kind: 'category', name: 'Economía') }
let!(:tag1) { create(:tag, :category, name: 'Medio Ambiente') }
let!(:tag2) { create(:tag, :category, name: 'Economía') }
let!(:investment1) { create(:budget_investment, heading: heading, tag_list: 'Medio Ambiente') }
let!(:investment2) { create(:budget_investment, heading: heading, tag_list: 'Medio Ambiente') }

View File

@@ -91,8 +91,8 @@ feature 'Tags' do
user = create(:user)
login_as(user)
education = create(:tag, name: 'Education', kind: 'category')
health = create(:tag, name: 'Health', kind: 'category')
education = create(:tag, :category, name: 'Education')
health = create(:tag, :category, name: 'Health')
visit new_proposal_path
@@ -265,8 +265,8 @@ feature 'Tags' do
context "Categories" do
scenario 'Display category tags' do
create(:tag, kind: 'category', name: 'Medio Ambiente')
create(:tag, kind: 'category', name: 'Economía')
create(:tag, :category, name: 'Medio Ambiente')
create(:tag, :category, name: 'Economía')
earth = create(:proposal, tag_list: 'Medio Ambiente')
money = create(:proposal, tag_list: 'Economía')
@@ -280,8 +280,8 @@ feature 'Tags' do
end
scenario "Filter by category tags" do
create(:tag, kind: 'category', name: 'Medio Ambiente')
create(:tag, kind: 'category', name: 'Economía')
create(:tag, :category, name: 'Medio Ambiente')
create(:tag, :category, name: 'Economía')
proposal1 = create(:proposal, tag_list: 'Medio Ambiente')
proposal2 = create(:proposal, tag_list: 'Medio Ambiente')

View File

@@ -148,8 +148,8 @@ feature 'Tags' do
end
scenario "scoped by category" do
create(:tag, kind: 'category', name: 'Medio Ambiente')
create(:tag, kind: 'category', name: 'Economía')
create(:tag, :category, name: 'Medio Ambiente')
create(:tag, :category, name: 'Economía')
earth = create(:proposal, tag_list: 'Medio Ambiente, Agua')
money = create(:proposal, tag_list: 'Economía, Corrupción')

View File

@@ -77,7 +77,7 @@ describe 'ActsAsTaggableOn' do
end
it "returns tags whose kind is 'category' and have at least one tagging whose taggable is not hidden" do
tag = create(:tag, kind: 'category')
tag = create(:tag, :category)
proposal = create(:proposal)
proposal.tag_list.add(tag)
proposal.save

View File

@@ -207,7 +207,7 @@ describe 'ConsulSchema' do
it 'only retruns tags with kind nil or category' do
tag = create(:tag, name: 'Parks')
category_tag = create(:tag, name: 'Health', kind: 'category')
category_tag = create(:tag, :category, name: 'Health')
admin_tag = create(:tag, name: 'Admin tag', kind: 'admin')
proposal = create(:proposal, tag_list: 'Parks, Health, Admin tag')
@@ -269,7 +269,7 @@ describe 'ConsulSchema' do
it 'only retruns tags with kind nil or category' do
tag = create(:tag, name: 'Parks')
category_tag = create(:tag, name: 'Health', kind: 'category')
category_tag = create(:tag, :category, name: 'Health')
admin_tag = create(:tag, name: 'Admin tag', kind: 'admin')
debate = create(:debate, tag_list: 'Parks, Health, Admin tag')
@@ -453,7 +453,7 @@ describe 'ConsulSchema' do
describe 'Tags' do
it 'only display tags with kind nil or category' do
tag = create(:tag, name: 'Parks')
category_tag = create(:tag, name: 'Health', kind: 'category')
category_tag = create(:tag, :category, name: 'Health')
admin_tag = create(:tag, name: 'Admin tag', kind: 'admin')
proposal = create(:proposal, tag_list: 'Parks')

View File

@@ -703,14 +703,14 @@ describe Proposal do
context "categories" do
it "should return proposals tagged with a category" do
create(:tag, kind: 'category', name: 'culture')
create(:tag, :category, name: 'culture')
proposal = create(:proposal, tag_list: 'culture')
expect(Proposal.for_summary.values.flatten).to include(proposal)
end
it "should not return proposals tagged without a category" do
create(:tag, kind: 'category', name: 'culture')
create(:tag, :category, name: 'culture')
proposal = create(:proposal, tag_list: 'parks')
expect(Proposal.for_summary.values.flatten).to_not include(proposal)
@@ -735,19 +735,19 @@ describe Proposal do
end
it "should return proposals created this week" do
create(:tag, kind: 'category', name: 'culture')
create(:tag, :category, name: 'culture')
proposal = create(:proposal, tag_list: 'culture')
expect(Proposal.for_summary.values.flatten).to include(proposal)
end
it "should not return proposals created more than a week ago" do
create(:tag, kind: 'category', name: 'culture')
create(:tag, :category, name: 'culture')
proposal = create(:proposal, tag_list: 'culture', created_at: 8.days.ago)
expect(Proposal.for_summary.values.flatten).to_not include(proposal)
end
it "should order proposals by votes" do
create(:tag, kind: 'category', name: 'culture')
create(:tag, :category, name: 'culture')
create(:proposal, tag_list: 'culture').update_column(:confidence_score, 2)
create(:proposal, tag_list: 'culture').update_column(:confidence_score, 10)
create(:proposal, tag_list: 'culture').update_column(:confidence_score, 5)
@@ -760,9 +760,9 @@ describe Proposal do
end
it "should order groups alphabetically" do
create(:tag, kind: 'category', name: 'health')
create(:tag, kind: 'category', name: 'culture')
create(:tag, kind: 'category', name: 'social services')
create(:tag, :category, name: 'health')
create(:tag, :category, name: 'culture')
create(:tag, :category, name: 'social services')
health_proposal = create(:proposal, tag_list: 'health')
culture_proposal = create(:proposal, tag_list: 'culture')
@@ -776,8 +776,8 @@ describe Proposal do
end
it "should return proposals grouped by tag" do
create(:tag, kind: 'category', name: 'culture')
create(:tag, kind: 'category', name: 'health')
create(:tag, :category, name: 'culture')
create(:tag, :category, name: 'health')
proposal1 = create(:proposal, tag_list: 'culture')
proposal2 = create(:proposal, tag_list: 'culture')

View File

@@ -41,8 +41,8 @@ describe TagCloud do
end
it "does not return category tags" do
create(:tag, kind: 'category', name: 'Education')
create(:tag, kind: 'category', name: 'Participation')
create(:tag, :category, name: 'Education')
create(:tag, :category, name: 'Participation')
create(:proposal, tag_list: 'education, parks')
create(:proposal, tag_list: 'participation, water')
@@ -65,8 +65,8 @@ describe TagCloud do
end
it "returns tags scoped by category" do
create(:tag, kind: 'category', name: 'Education')
create(:tag, kind: 'category', name: 'Participation')
create(:tag, :category, name: 'Education')
create(:tag, :category, name: 'Participation')
create(:proposal, tag_list: 'education, parks')
create(:proposal, tag_list: 'participation, water')