OSDN Git Service

New field added
authorAndrew8xx8 <avk@8xx8.ru>
Mon, 11 Feb 2013 14:17:43 +0000 (18:17 +0400)
committerAndrew8xx8 <avk@8xx8.ru>
Thu, 28 Feb 2013 12:11:13 +0000 (16:11 +0400)
app/models/project.rb
app/views/admin/projects/_form.html.haml
app/views/projects/_form.html.haml
config/gitlab.yml.example
spec/factories.rb
spec/models/project_spec.rb

index 612a318..e47e2a0 100644 (file)
@@ -28,7 +28,7 @@ class Project < ActiveRecord::Base
   class TransferError < StandardError; end
 
   attr_accessible :name, :path, :description, :default_branch, :issues_tracker,
-    :issues_enabled, :wall_enabled, :merge_requests_enabled,
+    :issues_enabled, :wall_enabled, :merge_requests_enabled, :issues_tracker_id,
     :wiki_enabled, :public, :import_url, as: [:default, :admin]
 
   attr_accessible :namespace_id, :creator_id, as: :admin
@@ -74,6 +74,7 @@ class Project < ActiveRecord::Base
                       message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" }
   validates :issues_enabled, :wall_enabled, :merge_requests_enabled,
             :wiki_enabled, inclusion: { in: [true, false] }
+  validates :issues_tracker_id, length: { within: 0..255 }
 
   validates_uniqueness_of :name, scope: :namespace_id
   validates_uniqueness_of :path, scope: :namespace_id
@@ -217,6 +218,10 @@ class Project < ActiveRecord::Base
     self.issues_tracker == Project.issues_tracker.default_value
   end
 
+  def can_have_issues_tracker_id?
+    self.issues_enabled && !self.used_default_issues_tracker?
+  end
+
   def services
     [gitlab_ci_service].compact
   end
index 657a66f..9049dcd 100644 (file)
       .input= f.select(:issues_tracker, Project.issues_tracker.values, {}, { disabled: !@project.issues_enabled })
 
     .clearfix
+      = f.label :issues_tracker_id, "Project name or id in issues tracker", class: 'control-label'
+      .input= f.text_field :issues_tracker_id, class: "xxlarge", disabled: !@project.can_have_issues_tracker_id?
+
+    .clearfix
       = f.label :merge_requests_enabled, "Merge Requests"
       .input= f.check_box :merge_requests_enabled
 
index 7072d78..c9d6231 100644 (file)
       = f.label :issues_tracker, "Issues tracker", class: 'control-label'
       .input= f.select(:issues_tracker, Project.issues_tracker.values, {}, { disabled: !@project.issues_enabled })
 
+    .clearfix
+      = f.label :issues_tracker_id, "Project name or id in issues tracker", class: 'control-label'
+      .input= f.text_field :issues_tracker_id, class: "xxlarge", disabled: !@project.can_have_issues_tracker_id?
+
     .control-group
       = f.label :merge_requests_enabled, "Merge Requests", class: 'control-label'
       .controls
index 93824e8..cc38b3a 100644 (file)
@@ -7,8 +7,6 @@
 # 2. Replace gitlab -> host with your domain
 # 3. Replace gitlab -> email_from
 
-<<<<<<< HEAD
-<<<<<<< HEAD
 production: &base
   #
   # 1. GitLab app settings
@@ -43,9 +41,7 @@ production: &base
   ## External issues trackers
   issues_tracker:
     redmine:
-      ## If not nil Issues link in project page will be replaced to this
-      url: "http://redmine.sample"
-      ## If not nil links from /#\d/ entities from commit messages will replaced to this
+      ## If not nil, links from /#\d/ entities from commit messages will replaced to this
       ## Use placeholders:
       ##  :project_id        - Gitlab project identifier
       ##  :issues_tracker_id - Project Name or Id in external issue tracker
index b846f0a..4176685 100644 (file)
@@ -31,6 +31,7 @@ FactoryGirl.define do
 
   factory :redmine_project, parent: :project do
     issues_tracker { "redmine" }
+    issues_tracker_id { "project_name_in_redmine" }
   end
 
   factory :group do
index c5603f5..44f4cd4 100644 (file)
@@ -60,6 +60,7 @@ describe Project do
     it { should ensure_inclusion_of(:wall_enabled).in_array([true, false]) }
     it { should ensure_inclusion_of(:merge_requests_enabled).in_array([true, false]) }
     it { should ensure_inclusion_of(:wiki_enabled).in_array([true, false]) }
+    it { should ensure_length_of(:issues_tracker_id).is_within(0..255) }
 
     it "should not allow new projects beyond user limits" do
       project.stub(:creator).and_return(double(can_create_project?: false, projects_limit: 1))
@@ -223,4 +224,24 @@ describe Project do
     end
   end
 
+  describe :can_have_issues_tracker_id? do
+    let(:project) { create(:project) }
+    let(:ext_project) { create(:redmine_project) }
+
+    it "should be true for projects with external issues tracker if issues enabled" do
+      ext_project.can_have_issues_tracker_id?.should be_true
+    end 
+
+    it "should be false for projects with internal issue tracker if issues enabled" do
+      project.can_have_issues_tracker_id?.should be_false
+    end
+
+    it "should be always false if issues disbled" do
+      project.issues_enabled = false
+      ext_project.issues_enabled = false
+
+      project.can_have_issues_tracker_id?.should be_false
+      ext_project.can_have_issues_tracker_id?.should be_false
+    end
+  end
 end