Commit 0727edd8a0c68b640b95fabce21472b04a806562

Authored by Dmitriy Zaporozhets
1 parent 3fe9d297

Removed issues,mr delete buttons. Refactored models

app/controllers/merge_requests_controller.rb
... ... @@ -30,7 +30,7 @@ class MergeRequestsController < ApplicationController
30 30 else @merge_requests.opened
31 31 end
32 32  
33   - @merge_requests = @merge_requests.includes(:author, :project)
  33 + @merge_requests = @merge_requests.includes(:author, :project).order("created_at desc")
34 34 end
35 35  
36 36 def show
... ...
app/models/key.rb
... ... @@ -14,8 +14,6 @@ class Key < ActiveRecord::Base
14 14  
15 15 before_save :set_identifier
16 16 before_validation :strip_white_space
17   - after_save :update_repository
18   - after_destroy :repository_delete_key
19 17 delegate :name, :email, :to => :user, :prefix => true
20 18 validate :unique_key
21 19  
... ...
app/models/key_observer.rb 0 → 100644
... ... @@ -0,0 +1,9 @@
  1 +class KeyObserver < ActiveRecord::Observer
  2 + def after_save(key)
  3 + key.update_repository
  4 + end
  5 +
  6 + def after_destroy(key)
  7 + key.repository_delete_key
  8 + end
  9 +end
... ...
app/models/project.rb
... ... @@ -3,19 +3,17 @@ require &quot;grit&quot;
3 3 class Project < ActiveRecord::Base
4 4 belongs_to :owner, :class_name => "User"
5 5  
6   - has_many :events, :dependent => :destroy
  6 + has_many :users, :through => :users_projects
  7 + has_many :events, :dependent => :destroy
7 8 has_many :merge_requests, :dependent => :destroy
8   - has_many :issues, :dependent => :destroy, :order => "position"
  9 + has_many :issues, :dependent => :destroy, :order => "position"
9 10 has_many :users_projects, :dependent => :destroy
10   - has_many :users, :through => :users_projects
11   - has_many :notes, :dependent => :destroy
12   - has_many :snippets, :dependent => :destroy
13   - has_many :deploy_keys, :dependent => :destroy, :foreign_key => "project_id", :class_name => "Key"
14   - has_many :web_hooks, :dependent => :destroy
  11 + has_many :notes, :dependent => :destroy
  12 + has_many :snippets, :dependent => :destroy
  13 + has_many :deploy_keys, :dependent => :destroy, :foreign_key => "project_id", :class_name => "Key"
  14 + has_many :web_hooks, :dependent => :destroy
  15 + has_many :wikis, :dependent => :destroy
15 16 has_many :protected_branches, :dependent => :destroy
16   - has_many :wikis, :dependent => :destroy
17   -
18   - acts_as_taggable
19 17  
20 18 validates :name,
21 19 :uniqueness => true,
... ... @@ -39,15 +37,10 @@ class Project &lt; ActiveRecord::Base
39 37 :message => "only letters, digits & '_' '-' '.' allowed" },
40 38 :length => { :within => 3..255 }
41 39  
42   - validates :owner,
43   - :presence => true
44   -
  40 + validates :owner, :presence => true
45 41 validate :check_limit
46 42 validate :repo_name
47 43  
48   - after_destroy :destroy_repository
49   - after_save :update_repository
50   -
51 44 attr_protected :private_flag, :owner_id
52 45  
53 46 scope :public_only, where(:private_flag => false)
... ... @@ -163,18 +156,6 @@ class Project &lt; ActiveRecord::Base
163 156 users_projects.find_by_user_id(user_id)
164 157 end
165 158  
166   - def fresh_merge_requests(n)
167   - merge_requests.includes(:project, :author).order("created_at desc").first(n)
168   - end
169   -
170   - def fresh_issues(n)
171   - issues.includes(:project, :author).order("created_at desc").first(n)
172   - end
173   -
174   - def fresh_notes(n)
175   - notes.inc_author_project.order("created_at desc").first(n)
176   - end
177   -
178 159 def common_notes
179 160 notes.where(:noteable_type => ["", nil]).inc_author_project
180 161 end
... ... @@ -277,9 +258,7 @@ class Project &lt; ActiveRecord::Base
277 258 end
278 259  
279 260 def last_activity
280   - events.last
281   - rescue
282   - nil
  261 + events.last || nil
283 262 end
284 263  
285 264 def last_activity_date
... ... @@ -294,43 +273,6 @@ class Project &lt; ActiveRecord::Base
294 273 last_activity_date
295 274 end
296 275  
297   - # Get project updates from cache
298   - # or calculate.
299   - def cached_updates(limit, expire = 2.minutes)
300   - activities_key = "project_#{id}_activities"
301   - cached_activities = Rails.cache.read(activities_key)
302   - if cached_activities
303   - activities = cached_activities
304   - else
305   - activities = updates(limit)
306   - Rails.cache.write(activities_key, activities, :expires_in => expire)
307   - end
308   -
309   - activities
310   - end
311   -
312   - # Get 20 events for project like
313   - # commits, issues or notes
314   - def updates(n = 3)
315   - [
316   - fresh_commits(n),
317   - fresh_issues(n),
318   - fresh_notes(n)
319   - ].compact.flatten.sort do |x, y|
320   - y.created_at <=> x.created_at
321   - end[0...n]
322   - end
323   -
324   - def activities(n=3)
325   - [
326   - fresh_issues(n),
327   - fresh_merge_requests(n),
328   - notes.inc_author_project.where("noteable_type is not null").order("created_at desc").first(n)
329   - ].compact.flatten.sort do |x, y|
330   - y.created_at <=> x.created_at
331   - end[0...n]
332   - end
333   -
334 276 def check_limit
335 277 unless owner.can_create_project?
336 278 errors[:base] << ("Your own projects limit is #{owner.projects_limit}! Please contact administrator to increase it")
... ...
app/models/project_observer.rb 0 → 100644
... ... @@ -0,0 +1,9 @@
  1 +class ProjectObserver < ActiveRecord::Observer
  2 + def after_save(project)
  3 + project.update_repository
  4 + end
  5 +
  6 + def after_destroy(project)
  7 + project.destroy_repository
  8 + end
  9 +end
... ...
app/views/issues/_form.html.haml
... ... @@ -9,6 +9,10 @@
9 9 %li= msg
10 10  
11 11 .clearfix
  12 + = f.label :title
  13 + .input= f.text_area :title, :maxlength => 255, :class => "xxlarge"
  14 +
  15 + .clearfix
12 16 = f.label :assignee_id
13 17 .input= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Select user" })
14 18  
... ... @@ -21,9 +25,6 @@
21 25 = f.label :closed
22 26 .input= f.check_box :closed
23 27  
24   - .clearfix
25   - = f.label :title
26   - .input= f.text_area :title, :maxlength => 255, :class => "xxlarge"
27 28 .actions
28 29 = f.submit 'Save', :class => "primary btn"
29 30  
... ... @@ -34,8 +35,3 @@
34 35 = link_to "Cancel", project_issues_path(@project), :class => "btn"
35 36 - else
36 37 = link_to "Cancel", project_issue_path(@project, @issue), :class => "btn"
37   -
38   -
39   - - unless @issue.new_record?
40   - .right
41   - = link_to 'Remove', [@project, @issue], :confirm => 'Are you sure?', :method => :delete, :class => "danger btn"
... ...
app/views/issues/_show.html.haml
... ... @@ -6,8 +6,6 @@
6 6 - else
7 7 = link_to 'Resolve', project_issue_path(issue.project, issue, :issue => {:closed => true }, :status_only => true), :method => :put, :class => "success btn small", :remote => true
8 8 = link_to 'Edit', edit_project_issue_path(issue.project, issue), :class => "btn small edit-issue-link", :remote => true
9   - -#- if can?(current_user, :admin_issue, @project) || issue.author == current_user
10   - = link_to 'Remove', [issue.project, issue], :confirm => 'Are you sure?', :method => :delete, :remote => true, :class => "danger btn small delete-issue", :id => "destroy_issue_#{issue.id}"
11 9 = image_tag gravatar_icon(issue.assignee_email), :class => "avatar"
12 10 %span.update-author
13 11 assigned to
... ...
app/views/merge_requests/_form.html.haml
... ... @@ -6,6 +6,9 @@
6 6 %li= msg
7 7  
8 8 .clearfix
  9 + = f.label :title
  10 + .input= f.text_area :title, :class => "xxlarge", :maxlength => 255, :rows => 5
  11 + .clearfix
9 12 = f.label :source_branch, "From"
10 13 .input= f.select(:source_branch, @project.heads.map(&:name), { :include_blank => "Select branch" }, :style => "width:250px")
11 14 .clearfix
... ... @@ -15,9 +18,6 @@
15 18 = f.label :assignee_id, "Assign to"
16 19 .input= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Select user" }, :style => "width:250px")
17 20  
18   - .clearfix
19   - = f.label :title
20   - .input= f.text_area :title, :class => "xlarge", :maxlength => 255, :rows => 5
21 21 .actions
22 22 = f.submit 'Save', :class => "primary btn"
23 23 - if @merge_request.new_record?
... ... @@ -26,11 +26,6 @@
26 26 - else
27 27 = link_to project_merge_request_path(@project, @merge_request), :class => "btn" do
28 28 Cancel
29   - &nbsp;
30   - - unless @merge_request.new_record?
31   - .right
32   - = link_to 'Remove', [@project, @merge_request], :confirm => 'Are you sure?', :method => :delete, :class => "btn danger"
33   -
34 29  
35 30  
36 31  
... ...
app/views/projects/index.html.haml
1   -- unless @projects.empty?
2   - .row
3   - .span4
4   - %div.leftbar.ui-box
5   - %h5
6   - Projects
7   - - if current_user.can_create_project?
8   - %span.right
9   - = link_to new_project_path, :class => "btn very_small info" do
10   - New Project
11   - .content_list
12   - - @projects.each do |project|
13   - = link_to project_path(project), :remote => true, :class => dom_class(project) do
14   - %h4
15   - %span.ico.project
16   - = truncate(project.name, :length => 22)
17   - .span12.right
18   - .show_holder.ui-box.padded
19   - .loading
20   -
21   -- else
22   - %h2 Nothing here
  1 +.row
  2 + .span4
  3 + %div.leftbar.ui-box
  4 + %h5
  5 + Projects
  6 + - if current_user.can_create_project?
  7 + %span.right
  8 + = link_to new_project_path, :class => "btn very_small info" do
  9 + New Project
  10 + .content_list
  11 + - @projects.each do |project|
  12 + = link_to project_path(project), :remote => true, :class => dom_class(project) do
  13 + %h4
  14 + %span.ico.project
  15 + = truncate(project.name, :length => 22)
  16 + .span12.right
  17 + .show_holder.ui-box.padded
  18 + .loading
23 19  
24 20  
25 21 :javascript
... ...
config/application.rb
... ... @@ -23,7 +23,7 @@ module Gitlab
23 23 # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
24 24  
25 25 # Activate observers that should always be running.
26   - config.active_record.observers = :mailer_observer, :activity_observer
  26 + config.active_record.observers = :mailer_observer, :activity_observer, :project_observer, :key_observer
27 27  
28 28 # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
29 29 # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
... ...
db/schema.rb
... ... @@ -24,25 +24,13 @@ ActiveRecord::Schema.define(:version =&gt; 20120301185805) do
24 24 t.integer "action"
25 25 end
26 26  
27   - create_table "features", :force => true do |t|
28   - t.string "name"
29   - t.string "branch_name"
30   - t.integer "assignee_id"
31   - t.integer "author_id"
32   - t.integer "project_id"
33   - t.datetime "created_at"
34   - t.datetime "updated_at"
35   - t.string "version"
36   - t.integer "status", :default => 0, :null => false
37   - end
38   -
39 27 create_table "issues", :force => true do |t|
40 28 t.string "title"
41 29 t.integer "assignee_id"
42 30 t.integer "author_id"
43 31 t.integer "project_id"
44   - t.datetime "created_at"
45   - t.datetime "updated_at"
  32 + t.datetime "created_at", :null => false
  33 + t.datetime "updated_at", :null => false
46 34 t.boolean "closed", :default => false, :null => false
47 35 t.integer "position", :default => 0
48 36 t.boolean "critical", :default => false, :null => false
... ... @@ -53,8 +41,8 @@ ActiveRecord::Schema.define(:version =&gt; 20120301185805) do
53 41  
54 42 create_table "keys", :force => true do |t|
55 43 t.integer "user_id"
56   - t.datetime "created_at"
57   - t.datetime "updated_at"
  44 + t.datetime "created_at", :null => false
  45 + t.datetime "updated_at", :null => false
58 46 t.text "key"
59 47 t.string "title"
60 48 t.string "identifier"
... ... @@ -69,8 +57,8 @@ ActiveRecord::Schema.define(:version =&gt; 20120301185805) do
69 57 t.integer "assignee_id"
70 58 t.string "title"
71 59 t.boolean "closed", :default => false, :null => false
72   - t.datetime "created_at"
73   - t.datetime "updated_at"
  60 + t.datetime "created_at", :null => false
  61 + t.datetime "updated_at", :null => false
74 62 end
75 63  
76 64 add_index "merge_requests", ["project_id"], :name => "index_merge_requests_on_project_id"
... ... @@ -80,8 +68,8 @@ ActiveRecord::Schema.define(:version =&gt; 20120301185805) do
80 68 t.string "noteable_id"
81 69 t.string "noteable_type"
82 70 t.integer "author_id"
83   - t.datetime "created_at"
84   - t.datetime "updated_at"
  71 + t.datetime "created_at", :null => false
  72 + t.datetime "updated_at", :null => false
85 73 t.integer "project_id"
86 74 t.string "attachment"
87 75 t.string "line_code"
... ... @@ -94,8 +82,8 @@ ActiveRecord::Schema.define(:version =&gt; 20120301185805) do
94 82 t.string "name"
95 83 t.string "path"
96 84 t.text "description"
97   - t.datetime "created_at"
98   - t.datetime "updated_at"
  85 + t.datetime "created_at", :null => false
  86 + t.datetime "updated_at", :null => false
99 87 t.boolean "private_flag", :default => true, :null => false
100 88 t.string "code"
101 89 t.integer "owner_id"
... ... @@ -118,8 +106,8 @@ ActiveRecord::Schema.define(:version =&gt; 20120301185805) do
118 106 t.text "content"
119 107 t.integer "author_id", :null => false
120 108 t.integer "project_id", :null => false
121   - t.datetime "created_at"
122   - t.datetime "updated_at"
  109 + t.datetime "created_at", :null => false
  110 + t.datetime "updated_at", :null => false
123 111 t.string "file_name"
124 112 t.datetime "expires_at"
125 113 end
... ... @@ -152,8 +140,8 @@ ActiveRecord::Schema.define(:version =&gt; 20120301185805) do
152 140 t.datetime "last_sign_in_at"
153 141 t.string "current_sign_in_ip"
154 142 t.string "last_sign_in_ip"
155   - t.datetime "created_at"
156   - t.datetime "updated_at"
  143 + t.datetime "created_at", :null => false
  144 + t.datetime "updated_at", :null => false
157 145 t.string "name"
158 146 t.boolean "admin", :default => false, :null => false
159 147 t.integer "projects_limit", :default => 10
... ... @@ -171,16 +159,16 @@ ActiveRecord::Schema.define(:version =&gt; 20120301185805) do
171 159 create_table "users_projects", :force => true do |t|
172 160 t.integer "user_id", :null => false
173 161 t.integer "project_id", :null => false
174   - t.datetime "created_at"
175   - t.datetime "updated_at"
  162 + t.datetime "created_at", :null => false
  163 + t.datetime "updated_at", :null => false
176 164 t.integer "project_access", :default => 0, :null => false
177 165 end
178 166  
179 167 create_table "web_hooks", :force => true do |t|
180 168 t.string "url"
181 169 t.integer "project_id"
182   - t.datetime "created_at"
183   - t.datetime "updated_at"
  170 + t.datetime "created_at", :null => false
  171 + t.datetime "updated_at", :null => false
184 172 end
185 173  
186 174 create_table "wikis", :force => true do |t|
... ...
spec/models/project_spec.rb
... ... @@ -2,13 +2,17 @@ require &#39;spec_helper&#39;
2 2  
3 3 describe Project do
4 4 describe "Associations" do
5   - it { should have_many(:events) }
6 5 it { should have_many(:users) }
7   - it { should have_many(:users_projects) }
8   - it { should have_many(:issues) }
9   - it { should have_many(:notes) }
10   - it { should have_many(:snippets) }
  6 + it { should have_many(:protected_branches).dependent(:destroy) }
  7 + it { should have_many(:events).dependent(:destroy) }
  8 + it { should have_many(:wikis).dependent(:destroy) }
  9 + it { should have_many(:merge_requests).dependent(:destroy) }
  10 + it { should have_many(:users_projects).dependent(:destroy) }
  11 + it { should have_many(:issues).dependent(:destroy) }
  12 + it { should have_many(:notes).dependent(:destroy) }
  13 + it { should have_many(:snippets).dependent(:destroy) }
11 14 it { should have_many(:web_hooks).dependent(:destroy) }
  15 + it { should have_many(:deploy_keys).dependent(:destroy) }
12 16 end
13 17  
14 18 describe "Validation" do
... ... @@ -70,30 +74,6 @@ describe Project do
70 74 end
71 75 end
72 76  
73   - describe "updates" do
74   - let(:project) { Factory :project }
75   -
76   - before do
77   - @issue = Factory :issue,
78   - :project => project,
79   - :author => Factory(:user),
80   - :assignee => Factory(:user)
81   -
82   - @note = Factory :note,
83   - :project => project,
84   - :author => Factory(:user)
85   -
86   - @commit = project.fresh_commits(1).first
87   - end
88   -
89   - describe "return commit, note & issue" do
90   - it { project.updates(3).count.should == 3 }
91   - it { project.updates(3).last.id.should == @commit.id }
92   - it { project.updates(3).include?(@issue).should be_true }
93   - it { project.updates(3).include?(@note).should be_true }
94   - end
95   - end
96   -
97 77 describe "last_activity" do
98 78 let(:project) { Factory :project }
99 79  
... ...
spec/requests/issues_spec.rb
... ... @@ -46,21 +46,6 @@ describe &quot;Issues&quot; do
46 46 page.body.should have_selector("entry summary", :text => @issue.title)
47 47 end
48 48  
49   - describe "Destroy" do
50   - before do
51   - # admin access to remove issue
52   - @user.users_projects.destroy_all
53   - project.add_access(@user, :read, :write, :admin)
54   - visit edit_project_issue_path(project, @issue)
55   - end
56   -
57   - it "should remove entry" do
58   - expect {
59   - click_link "Remove"
60   - }.to change { Issue.count }.by(-1)
61   - end
62   - end
63   -
64 49 describe "statuses" do
65 50 before do
66 51 @closed_issue = Factory :issue,
... ...