Issue #83 - Project limit

This commit is contained in:
Valera Sizov 2011-10-09 11:15:01 -07:00
parent 9840102651
commit 67f0c62d07
13 changed files with 45 additions and 9 deletions

View file

@ -521,3 +521,7 @@ tbody tr:nth-child(2n) td, tbody tr.even td {
width:400px; width:400px;
} }
} }
#user_projects_limit{
width: 60px;
}

View file

@ -21,7 +21,7 @@ class Admin::UsersController < ApplicationController
end end
def new def new
@admin_user = User.new @admin_user = User.new(:projects_limit => 10)
respond_to do |format| respond_to do |format|
format.html # new.html.erb format.html # new.html.erb

View file

@ -25,6 +25,8 @@ class Project < ActiveRecord::Base
:uniqueness => true, :uniqueness => true,
:length => { :within => 3..12 } :length => { :within => 3..12 }
validate :check_limit
before_save :format_code before_save :format_code
after_destroy :destroy_gitosis_project after_destroy :destroy_gitosis_project
after_save :update_gitosis_project after_save :update_gitosis_project
@ -126,6 +128,12 @@ class Project < ActiveRecord::Base
path ? (tree / path) : tree path ? (tree / path) : tree
end end
def check_limit
unless owner.can_create_project?
errors[:base] << ("You can to have #{owner.projects_limit} your own projects")
end
end
def valid_repo? def valid_repo?
repo repo
rescue rescue

View file

@ -5,7 +5,7 @@ class User < ActiveRecord::Base
:recoverable, :rememberable, :trackable, :validatable :recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model # Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :name attr_accessible :email, :password, :password_confirmation, :remember_me, :name, :projects_limit
has_many :users_projects, :dependent => :destroy has_many :users_projects, :dependent => :destroy
has_many :projects, :through => :users_projects has_many :projects, :through => :users_projects
@ -29,6 +29,10 @@ class User < ActiveRecord::Base
def is_admin? def is_admin?
admin admin
end end
def can_create_project?
projects_limit >= my_own_projects.count
end
end end
# == Schema Information # == Schema Information
# #
@ -49,6 +53,6 @@ end
# updated_at :datetime # updated_at :datetime
# name :string(255) # name :string(255)
# admin :boolean default(FALSE), not null # admin :boolean default(FALSE), not null
# allowed_create_repo :boolean default(TRUE), not null # projects_limit :integer
# #

View file

@ -30,8 +30,8 @@
= f.check_box :admin = f.check_box :admin
= f.label :admin = f.label :admin
.field.prepend-top .field.prepend-top
= f.check_box :allowed_create_repo, :disabled => true = f.text_field :projects_limit, :class => "small_input"
= f.label :allowed_create_repo = f.label :projects_limit
.clear .clear
%br %br
.actions .actions

View file

@ -10,6 +10,9 @@
%p %p
%b Admin: %b Admin:
= @admin_user.admin = @admin_user.admin
%p
%b Projects limit:
= @admin_user.projects_limit
.clear .clear
= link_to 'Edit', edit_admin_user_path(@admin_user) = link_to 'Edit', edit_admin_user_path(@admin_user)

View file

@ -1,3 +1,4 @@
- if current_user.can_create_project?
= link_to 'New Project', new_project_path, :class => "lbutton vm" = link_to 'New Project', new_project_path, :class => "lbutton vm"
%table.round-borders#projects-list %table.round-borders#projects-list

View file

@ -6,5 +6,6 @@ admin = User.create(
:password_confirmation => "5iveL!fe" :password_confirmation => "5iveL!fe"
) )
admin.projects_limit = 10000
admin.admin = true admin.admin = true
admin.save! admin.save!

View file

@ -5,5 +5,6 @@ admin = User.create(
:password_confirmation => "5iveL!fe" :password_confirmation => "5iveL!fe"
) )
admin.projects_limit = 10000
admin.admin = true admin.admin = true
admin.save! admin.save!

View file

@ -0,0 +1,5 @@
class AddProjectsLimitToUser < ActiveRecord::Migration
def change
add_column :users, :projects_limit, :integer, :default => 10
end
end

View file

@ -0,0 +1,9 @@
class RemoveAllowCreateRepoFromUser < ActiveRecord::Migration
def up
remove_column :users, :allowed_create_repo
end
def down
add_column :users, :allowed_create_repo, :boolean, :default => true, :null => false
end
end

View file

@ -11,7 +11,7 @@
# #
# It's strongly recommended to check this file into your version control system. # It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20111009101738) do ActiveRecord::Schema.define(:version => 20111009111204) do
create_table "issues", :force => true do |t| create_table "issues", :force => true do |t|
t.string "title" t.string "title"
@ -70,7 +70,7 @@ ActiveRecord::Schema.define(:version => 20111009101738) do
t.datetime "updated_at" t.datetime "updated_at"
t.string "name" t.string "name"
t.boolean "admin", :default => false, :null => false t.boolean "admin", :default => false, :null => false
t.boolean "allowed_create_repo", :default => true, :null => false t.integer "projects_limit"
end end
add_index "users", ["email"], :name => "index_users_on_email", :unique => true add_index "users", ["email"], :name => "index_users_on_email", :unique => true

View file

@ -38,6 +38,6 @@ end
# updated_at :datetime # updated_at :datetime
# name :string(255) # name :string(255)
# admin :boolean default(FALSE), not null # admin :boolean default(FALSE), not null
# allowed_create_repo :boolean default(TRUE), not null # projects_limit :integer
# #