Patch #7115 » 7115-improve-project-methods-to-enable-disable-modules.diff
app/models/project.rb | ||
---|---|---|
510 | 510 |
if module_names && module_names.is_a?(Array) |
511 | 511 |
module_names = module_names.collect(&:to_s).reject(&:blank?) |
512 | 512 |
# remove disabled modules |
513 |
enabled_modules.each {|mod| mod.destroy unless module_names.include?(mod.name)}
|
|
513 |
enabled_modules.each {|mod| disable_module!(mod) unless module_names.include?(mod.name)}
|
|
514 | 514 |
# add new modules |
515 |
module_names.reject {|name| module_enabled?(name)}.each {|name| enabled_modules << EnabledModule.new(:name => name)}
|
|
515 |
module_names.each {|name| enable_module!(name)}
|
|
516 | 516 |
else |
517 | 517 |
enabled_modules.clear |
518 | 518 |
end |
... | ... | |
522 | 522 |
def enabled_module_names |
523 | 523 |
enabled_modules.collect(&:name) |
524 | 524 |
end |
525 | ||
526 |
# Enable a specific module |
|
527 |
# |
|
528 |
# Examples: |
|
529 |
# project.enable_module!(:issue_tracking) |
|
530 |
# project.enable_module!("issue_tracking") |
|
531 |
def enable_module!(name) |
|
532 |
enabled_modules << EnabledModule.new(:name => name.to_s) unless module_enabled?(name) |
|
533 |
end |
|
534 | ||
535 |
# Disable a module if it exists |
|
536 |
# |
|
537 |
# Examples: |
|
538 |
# project.disable_module!(:issue_tracking) |
|
539 |
# project.disable_module!("issue_tracking") |
|
540 |
# project.disable_module!(project.enabled_modules.first) |
|
541 |
def disable_module!(target) |
|
542 |
target = enabled_modules.detect{|mod| target.to_s == mod.name} if target.respond_to?(:to_sym) |
|
543 |
target.destroy unless target.blank? |
|
544 |
end |
|
525 | 545 |
|
526 | 546 |
safe_attributes 'name', |
527 | 547 |
'description', |
test/unit/project_test.rb | ||
---|---|---|
553 | 553 |
assert_nil Project.next_identifier |
554 | 554 |
end |
555 | 555 |
|
556 |
context "enabled_modules" do |
|
557 |
setup do |
|
558 |
@project = Project.find(1) |
|
559 |
end |
|
556 | 560 | |
557 |
def test_enabled_module_names_should_not_recreate_enabled_modules |
|
558 |
project = Project.find(1) |
|
559 |
# Remove one module |
|
560 |
modules = project.enabled_modules.slice(0..-2) |
|
561 |
assert modules.any? |
|
562 |
assert_difference 'EnabledModule.count', -1 do |
|
563 |
project.enabled_module_names = modules.collect(&:name) |
|
561 |
should "define module by names and preserve ids" do |
|
562 |
# Remove one module |
|
563 |
modules = @project.enabled_modules.slice(0..-2) |
|
564 |
assert modules.any? |
|
565 |
assert_difference 'EnabledModule.count', -1 do |
|
566 |
@project.enabled_module_names = modules.collect(&:name) |
|
567 |
end |
|
568 |
@project.reload |
|
569 |
# Ids should be preserved |
|
570 |
assert_equal @project.enabled_module_ids.sort, modules.collect(&:id).sort |
|
571 |
end |
|
572 | ||
573 |
should "enable a module" do |
|
574 |
@project.enabled_module_names = [] |
|
575 |
@project.reload |
|
576 |
assert_equal [], @project.enabled_module_names |
|
577 |
#with string |
|
578 |
@project.enable_module!("issue_tracking") |
|
579 |
assert_equal ["issue_tracking"], @project.enabled_module_names |
|
580 |
#with symbol |
|
581 |
@project.enable_module!(:gantt) |
|
582 |
assert_equal ["issue_tracking", "gantt"], @project.enabled_module_names |
|
583 |
#don't add a module twice |
|
584 |
@project.enable_module!("issue_tracking") |
|
585 |
assert_equal ["issue_tracking", "gantt"], @project.enabled_module_names |
|
586 |
end |
|
587 | ||
588 |
should "disable a module" do |
|
589 |
#with string |
|
590 |
assert @project.enabled_module_names.include?("issue_tracking") |
|
591 |
@project.disable_module!("issue_tracking") |
|
592 |
assert ! @project.reload.enabled_module_names.include?("issue_tracking") |
|
593 |
#with symbol |
|
594 |
assert @project.enabled_module_names.include?("gantt") |
|
595 |
@project.disable_module!(:gantt) |
|
596 |
assert ! @project.reload.enabled_module_names.include?("gantt") |
|
597 |
#with EnabledModule object |
|
598 |
first_module = @project.enabled_modules.first |
|
599 |
@project.disable_module!(first_module) |
|
600 |
assert ! @project.reload.enabled_module_names.include?(first_module.name) |
|
564 | 601 |
end |
565 |
project.reload |
|
566 |
# Ids should be preserved |
|
567 |
assert_equal project.enabled_module_ids.sort, modules.collect(&:id).sort |
|
568 | 602 |
end |
569 | 603 | |
570 | 604 |
def test_copy_from_existing_project |