OSDN Git Service

Issue #83 - Project limit
authorValera Sizov <vsv2711@gmail.com>
Sun, 9 Oct 2011 18:15:01 +0000 (11:15 -0700)
committerValera Sizov <vsv2711@gmail.com>
Sun, 9 Oct 2011 18:15:01 +0000 (11:15 -0700)
13 files changed:
app/assets/stylesheets/projects.css.scss
app/controllers/admin/users_controller.rb
app/models/project.rb
app/models/user.rb
app/views/admin/users/_form.html.haml
app/views/admin/users/show.html.haml
app/views/projects/index.html.haml
db/fixtures/development/001_admin.rb
db/fixtures/production/001_admin.rb
db/migrate/20111009110913_add_projects_limit_to_user.rb [new file with mode: 0644]
db/migrate/20111009111204_remove_allow_create_repo_from_user.rb [new file with mode: 0644]
db/schema.rb
spec/models/user_spec.rb

index fcefac1..d3c4c48 100644 (file)
@@ -521,3 +521,7 @@ tbody tr:nth-child(2n) td, tbody tr.even td {
     width:400px;
   }
 }
+
+#user_projects_limit{
+  width: 60px;  
+}
index 5190dd0..e9ad1e5 100644 (file)
@@ -21,7 +21,7 @@ class Admin::UsersController < ApplicationController
   end
 
   def new
-    @admin_user = User.new
+    @admin_user = User.new(:projects_limit => 10)
 
     respond_to do |format|
       format.html # new.html.erb
index 48c288e..182c784 100644 (file)
@@ -25,6 +25,8 @@ class Project < ActiveRecord::Base
             :uniqueness => true,
             :length   => { :within => 3..12 }
 
+  validate :check_limit
+  
   before_save :format_code
   after_destroy :destroy_gitosis_project
   after_save :update_gitosis_project
@@ -126,6 +128,12 @@ class Project < ActiveRecord::Base
     path ? (tree / path) : tree
   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?
     repo
   rescue
index 1efaf31..104843a 100644 (file)
@@ -5,7 +5,7 @@ class User < ActiveRecord::Base
          :recoverable, :rememberable, :trackable, :validatable
 
   # 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 :projects, :through => :users_projects
@@ -29,6 +29,10 @@ class User < ActiveRecord::Base
   def is_admin?
     admin
   end
+
+  def can_create_project?
+    projects_limit >= my_own_projects.count
+  end
 end
 # == Schema Information
 #
@@ -49,6 +53,6 @@ end
 #  updated_at             :datetime
 #  name                   :string(255)
 #  admin                  :boolean         default(FALSE), not null
-#  allowed_create_repo    :boolean         default(TRUE), not null
+#  projects_limit         :integer
 #
 
index a5e4d8a..17be416 100644 (file)
@@ -30,8 +30,8 @@
           = f.check_box :admin
           = f.label :admin
         .field.prepend-top
-          = f.check_box :allowed_create_repo, :disabled => true
-          = f.label :allowed_create_repo
+          = f.text_field :projects_limit, :class => "small_input"
+          = f.label :projects_limit
     .clear
     %br
     .actions
index f41fc51..b1d110b 100644 (file)
@@ -10,6 +10,9 @@
   %p
     %b Admin:
     = @admin_user.admin
+  %p
+    %b Projects limit:
+    = @admin_user.projects_limit
 
   .clear
   = link_to 'Edit', edit_admin_user_path(@admin_user)
index 5171728..a33b4f5 100644 (file)
@@ -1,4 +1,5 @@
-= link_to 'New Project', new_project_path, :class => "lbutton vm"
+- if current_user.can_create_project?
+  = link_to 'New Project', new_project_path, :class => "lbutton vm"
 
 %table.round-borders#projects-list
   %tr
index 5020ecc..9c5a6da 100644 (file)
@@ -6,5 +6,6 @@ admin = User.create(
   :password_confirmation => "5iveL!fe"
 )
 
+admin.projects_limit = 10000
 admin.admin = true
 admin.save!
index a50a693..94d1abe 100644 (file)
@@ -5,5 +5,6 @@ admin = User.create(
   :password_confirmation => "5iveL!fe"
 )
 
+admin.projects_limit = 10000
 admin.admin = true
 admin.save!
diff --git a/db/migrate/20111009110913_add_projects_limit_to_user.rb b/db/migrate/20111009110913_add_projects_limit_to_user.rb
new file mode 100644 (file)
index 0000000..8eb8382
--- /dev/null
@@ -0,0 +1,5 @@
+class AddProjectsLimitToUser < ActiveRecord::Migration
+  def change
+    add_column :users, :projects_limit, :integer, :default => 10
+  end
+end
diff --git a/db/migrate/20111009111204_remove_allow_create_repo_from_user.rb b/db/migrate/20111009111204_remove_allow_create_repo_from_user.rb
new file mode 100644 (file)
index 0000000..6145200
--- /dev/null
@@ -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
index ad4b288..ed5816c 100644 (file)
@@ -11,7 +11,7 @@
 #
 # 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|
     t.string   "title"
@@ -70,7 +70,7 @@ ActiveRecord::Schema.define(:version => 20111009101738) do
     t.datetime "updated_at"
     t.string   "name"
     t.boolean  "admin",                                 :default => false, :null => false
-    t.boolean  "allowed_create_repo",                   :default => true,  :null => false
+    t.integer  "projects_limit"
   end
 
   add_index "users", ["email"], :name => "index_users_on_email", :unique => true
index 7a9e1fa..77abe2c 100644 (file)
@@ -38,6 +38,6 @@ end
 #  updated_at             :datetime
 #  name                   :string(255)
 #  admin                  :boolean         default(FALSE), not null
-#  allowed_create_repo    :boolean         default(TRUE), not null
+#  projects_limit         :integer
 #