@@ -545,6 +545,26 class Project < ActiveRecord::Base | |||
|
545 | 545 | enabled_modules.collect(&:name) |
|
546 | 546 | end |
|
547 | 547 | |
|
548 | # Enable a specific module | |
|
549 | # | |
|
550 | # Examples: | |
|
551 | # project.enable_module!(:issue_tracking) | |
|
552 | # project.enable_module!("issue_tracking") | |
|
553 | def enable_module!(name) | |
|
554 | enabled_modules << EnabledModule.new(:name => name.to_s) unless module_enabled?(name) | |
|
555 | end | |
|
556 | ||
|
557 | # Disable a module if it exists | |
|
558 | # | |
|
559 | # Examples: | |
|
560 | # project.disable_module!(:issue_tracking) | |
|
561 | # project.disable_module!("issue_tracking") | |
|
562 | # project.disable_module!(project.enabled_modules.first) | |
|
563 | def disable_module!(target) | |
|
564 | target = enabled_modules.detect{|mod| target.to_s == mod.name} unless enabled_modules.include?(target) | |
|
565 | target.destroy unless target.blank? | |
|
566 | end | |
|
567 | ||
|
548 | 568 | safe_attributes 'name', |
|
549 | 569 | 'description', |
|
550 | 570 | 'homepage', |
@@ -597,6 +597,54 class ProjectTest < ActiveSupport::TestCase | |||
|
597 | 597 | end |
|
598 | 598 | end |
|
599 | 599 | |
|
600 | context "enabled_modules" do | |
|
601 | setup do | |
|
602 | @project = Project.find(1) | |
|
603 | end | |
|
604 | ||
|
605 | should "define module by names and preserve ids" do | |
|
606 | # Remove one module | |
|
607 | modules = @project.enabled_modules.slice(0..-2) | |
|
608 | assert modules.any? | |
|
609 | assert_difference 'EnabledModule.count', -1 do | |
|
610 | @project.enabled_module_names = modules.collect(&:name) | |
|
611 | end | |
|
612 | @project.reload | |
|
613 | # Ids should be preserved | |
|
614 | assert_equal @project.enabled_module_ids.sort, modules.collect(&:id).sort | |
|
615 | end | |
|
616 | ||
|
617 | should "enable a module" do | |
|
618 | @project.enabled_module_names = [] | |
|
619 | @project.reload | |
|
620 | assert_equal [], @project.enabled_module_names | |
|
621 | #with string | |
|
622 | @project.enable_module!("issue_tracking") | |
|
623 | assert_equal ["issue_tracking"], @project.enabled_module_names | |
|
624 | #with symbol | |
|
625 | @project.enable_module!(:gantt) | |
|
626 | assert_equal ["issue_tracking", "gantt"], @project.enabled_module_names | |
|
627 | #don't add a module twice | |
|
628 | @project.enable_module!("issue_tracking") | |
|
629 | assert_equal ["issue_tracking", "gantt"], @project.enabled_module_names | |
|
630 | end | |
|
631 | ||
|
632 | should "disable a module" do | |
|
633 | #with string | |
|
634 | assert @project.enabled_module_names.include?("issue_tracking") | |
|
635 | @project.disable_module!("issue_tracking") | |
|
636 | assert ! @project.reload.enabled_module_names.include?("issue_tracking") | |
|
637 | #with symbol | |
|
638 | assert @project.enabled_module_names.include?("gantt") | |
|
639 | @project.disable_module!(:gantt) | |
|
640 | assert ! @project.reload.enabled_module_names.include?("gantt") | |
|
641 | #with EnabledModule object | |
|
642 | first_module = @project.enabled_modules.first | |
|
643 | @project.disable_module!(first_module) | |
|
644 | assert ! @project.reload.enabled_module_names.include?(first_module.name) | |
|
645 | end | |
|
646 | end | |
|
647 | ||
|
600 | 648 | def test_enabled_module_names_should_not_recreate_enabled_modules |
|
601 | 649 | project = Project.find(1) |
|
602 | 650 | # Remove one module |
General Comments 0
You need to be logged in to leave comments.
Login now