git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10664 e93f8b46-1217-0410-a6f0-8f06a7374b81tags/2.2.0
@@ -18,13 +18,26 @@ | |||
class EnumerationsController < ApplicationController | |||
layout 'admin' | |||
before_filter :require_admin | |||
before_filter :require_admin, :except => :index | |||
before_filter :require_admin_or_api_request, :only => :index | |||
before_filter :build_new_enumeration, :only => [:new, :create] | |||
before_filter :find_enumeration, :only => [:edit, :update, :destroy] | |||
accept_api_auth :index | |||
helper :custom_fields | |||
def index | |||
respond_to do |format| | |||
format.html | |||
format.api { | |||
@klass = Enumeration.get_subclass(params[:type]) | |||
if @klass | |||
@enumerations = @klass.shared.sorted.all | |||
else | |||
render_404 | |||
end | |||
} | |||
end | |||
end | |||
def new | |||
@@ -33,7 +46,7 @@ class EnumerationsController < ApplicationController | |||
def create | |||
if request.post? && @enumeration.save | |||
flash[:notice] = l(:notice_successful_create) | |||
redirect_to :action => 'index', :type => @enumeration.type | |||
redirect_to :action => 'index' | |||
else | |||
render :action => 'new' | |||
end | |||
@@ -45,7 +58,7 @@ class EnumerationsController < ApplicationController | |||
def update | |||
if request.put? && @enumeration.update_attributes(params[:enumeration]) | |||
flash[:notice] = l(:notice_successful_update) | |||
redirect_to :action => 'index', :type => @enumeration.type | |||
redirect_to :action => 'index' | |||
else | |||
render :action => 'edit' | |||
end |
@@ -36,6 +36,7 @@ class Enumeration < ActiveRecord::Base | |||
validates_length_of :name, :maximum => 30 | |||
scope :shared, where(:project_id => nil) | |||
scope :sorted, order("#{table_name}.position ASC") | |||
scope :active, where(:active => true) | |||
scope :named, lambda {|arg| where("LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip)} | |||
@@ -0,0 +1,9 @@ | |||
api.array @klass.name.underscore.pluralize do | |||
@enumerations.each do |enumeration| | |||
api.__send__ @klass.name.underscore do | |||
api.id enumeration.id | |||
api.name enumeration.name | |||
api.is_default enumeration.is_default | |||
end | |||
end | |||
end |
@@ -98,7 +98,7 @@ RedmineApp::Application.routes.draw do | |||
match 'copy', :via => [:get, :post] | |||
end | |||
resources :memberships, :shallow => true, :controller => 'members', :only => [:index, :show, :create, :update, :destroy] do | |||
resources :memberships, :shallow => true, :controller => 'members', :only => [:index, :show, :new, :create, :update, :destroy] do | |||
collection do | |||
get 'autocomplete' | |||
end | |||
@@ -295,6 +295,7 @@ RedmineApp::Application.routes.draw do | |||
end | |||
end | |||
resources :enumerations, :except => :show | |||
match 'enumerations/:type', :to => 'enumerations#index', :via => :get | |||
get 'projects/:id/search', :controller => 'search', :action => 'index' | |||
get 'search', :controller => 'search', :action => 'index' |
@@ -22,8 +22,7 @@ module Redmine | |||
end | |||
module ClassMethods | |||
# Returns an instance of the given subclass name | |||
def new_subclass_instance(class_name, *args) | |||
def get_subclass(class_name) | |||
klass = nil | |||
begin | |||
klass = class_name.to_s.classify.constantize | |||
@@ -33,6 +32,12 @@ module Redmine | |||
unless subclasses.include? klass | |||
klass = nil | |||
end | |||
klass | |||
end | |||
# Returns an instance of the given subclass name | |||
def new_subclass_instance(class_name, *args) | |||
klass = get_subclass(class_name) | |||
if klass | |||
klass.new(*args) | |||
end |
@@ -30,6 +30,12 @@ class EnumerationsControllerTest < ActionController::TestCase | |||
assert_template 'index' | |||
end | |||
def test_index_should_require_admin | |||
@request.session[:user_id] = nil | |||
get :index | |||
assert_response 302 | |||
end | |||
def test_new | |||
get :new, :type => 'IssuePriority' | |||
assert_response :success | |||
@@ -48,7 +54,7 @@ class EnumerationsControllerTest < ActionController::TestCase | |||
assert_difference 'IssuePriority.count' do | |||
post :create, :enumeration => {:type => 'IssuePriority', :name => 'Lowest'} | |||
end | |||
assert_redirected_to '/enumerations?type=IssuePriority' | |||
assert_redirected_to '/enumerations' | |||
e = IssuePriority.find_by_name('Lowest') | |||
assert_not_nil e | |||
end | |||
@@ -77,7 +83,7 @@ class EnumerationsControllerTest < ActionController::TestCase | |||
assert_no_difference 'IssuePriority.count' do | |||
put :update, :id => 6, :enumeration => {:type => 'IssuePriority', :name => 'New name'} | |||
end | |||
assert_redirected_to '/enumerations?type=IssuePriority' | |||
assert_redirected_to '/enumerations' | |||
e = IssuePriority.find(6) | |||
assert_equal 'New name', e.name | |||
end |
@@ -0,0 +1,44 @@ | |||
# Redmine - project management software | |||
# Copyright (C) 2006-2012 Jean-Philippe Lang | |||
# | |||
# This program is free software; you can redistribute it and/or | |||
# modify it under the terms of the GNU General Public License | |||
# as published by the Free Software Foundation; either version 2 | |||
# of the License, or (at your option) any later version. | |||
# | |||
# This program is distributed in the hope that it will be useful, | |||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
# GNU General Public License for more details. | |||
# | |||
# You should have received a copy of the GNU General Public License | |||
# along with this program; if not, write to the Free Software | |||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
require File.expand_path('../../../test_helper', __FILE__) | |||
class ApiTest::EnumerationsTest < ActionController::IntegrationTest | |||
fixtures :enumerations | |||
def setup | |||
Setting.rest_api_enabled = '1' | |||
end | |||
context "/enumerations/issue_priorities" do | |||
context "GET" do | |||
should "return priorities" do | |||
get '/enumerations/issue_priorities.xml' | |||
assert_response :success | |||
assert_equal 'application/xml', response.content_type | |||
assert_select 'issue_priorities[type=array]' do | |||
assert_select 'issue_priority' do | |||
assert_select 'id', :text => '6' | |||
assert_select 'name', :text => 'High' | |||
end | |||
end | |||
end | |||
end | |||
end | |||
end |
@@ -43,5 +43,9 @@ class RoutingEnumerationsTest < ActionController::IntegrationTest | |||
{ :method => 'delete', :path => "/enumerations/2" }, | |||
{ :controller => 'enumerations', :action => 'destroy', :id => '2' } | |||
) | |||
assert_routing( | |||
{ :method => 'get', :path => "/enumerations/issue_priorities.xml" }, | |||
{ :controller => 'enumerations', :action => 'index', :type => 'issue_priorities', :format => 'xml' } | |||
) | |||
end | |||
end |