Merged r6098 from trunk.
Added Project#enable_module! and Project#disable_module! git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/1.2-stable@6106 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
102c9afadf
commit
7d77c3544a
|
@ -544,7 +544,27 @@ class Project < ActiveRecord::Base
|
||||||
def enabled_module_names
|
def enabled_module_names
|
||||||
enabled_modules.collect(&:name)
|
enabled_modules.collect(&:name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Enable a specific module
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
# project.enable_module!(:issue_tracking)
|
||||||
|
# project.enable_module!("issue_tracking")
|
||||||
|
def enable_module!(name)
|
||||||
|
enabled_modules << EnabledModule.new(:name => name.to_s) unless module_enabled?(name)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Disable a module if it exists
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
# project.disable_module!(:issue_tracking)
|
||||||
|
# project.disable_module!("issue_tracking")
|
||||||
|
# project.disable_module!(project.enabled_modules.first)
|
||||||
|
def disable_module!(target)
|
||||||
|
target = enabled_modules.detect{|mod| target.to_s == mod.name} unless enabled_modules.include?(target)
|
||||||
|
target.destroy unless target.blank?
|
||||||
|
end
|
||||||
|
|
||||||
safe_attributes 'name',
|
safe_attributes 'name',
|
||||||
'description',
|
'description',
|
||||||
'homepage',
|
'homepage',
|
||||||
|
|
|
@ -597,6 +597,54 @@ class ProjectTest < ActiveSupport::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "enabled_modules" do
|
||||||
|
setup do
|
||||||
|
@project = Project.find(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "define module by names and preserve ids" do
|
||||||
|
# Remove one module
|
||||||
|
modules = @project.enabled_modules.slice(0..-2)
|
||||||
|
assert modules.any?
|
||||||
|
assert_difference 'EnabledModule.count', -1 do
|
||||||
|
@project.enabled_module_names = modules.collect(&:name)
|
||||||
|
end
|
||||||
|
@project.reload
|
||||||
|
# Ids should be preserved
|
||||||
|
assert_equal @project.enabled_module_ids.sort, modules.collect(&:id).sort
|
||||||
|
end
|
||||||
|
|
||||||
|
should "enable a module" do
|
||||||
|
@project.enabled_module_names = []
|
||||||
|
@project.reload
|
||||||
|
assert_equal [], @project.enabled_module_names
|
||||||
|
#with string
|
||||||
|
@project.enable_module!("issue_tracking")
|
||||||
|
assert_equal ["issue_tracking"], @project.enabled_module_names
|
||||||
|
#with symbol
|
||||||
|
@project.enable_module!(:gantt)
|
||||||
|
assert_equal ["issue_tracking", "gantt"], @project.enabled_module_names
|
||||||
|
#don't add a module twice
|
||||||
|
@project.enable_module!("issue_tracking")
|
||||||
|
assert_equal ["issue_tracking", "gantt"], @project.enabled_module_names
|
||||||
|
end
|
||||||
|
|
||||||
|
should "disable a module" do
|
||||||
|
#with string
|
||||||
|
assert @project.enabled_module_names.include?("issue_tracking")
|
||||||
|
@project.disable_module!("issue_tracking")
|
||||||
|
assert ! @project.reload.enabled_module_names.include?("issue_tracking")
|
||||||
|
#with symbol
|
||||||
|
assert @project.enabled_module_names.include?("gantt")
|
||||||
|
@project.disable_module!(:gantt)
|
||||||
|
assert ! @project.reload.enabled_module_names.include?("gantt")
|
||||||
|
#with EnabledModule object
|
||||||
|
first_module = @project.enabled_modules.first
|
||||||
|
@project.disable_module!(first_module)
|
||||||
|
assert ! @project.reload.enabled_module_names.include?(first_module.name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_enabled_module_names_should_not_recreate_enabled_modules
|
def test_enabled_module_names_should_not_recreate_enabled_modules
|
||||||
project = Project.find(1)
|
project = Project.find(1)
|
||||||
# Remove one module
|
# Remove one module
|
||||||
|
|
Loading…
Reference in New Issue