Project/platform management

This commit is contained in:
Alexey Nayden 2011-03-10 16:38:50 +03:00
parent 7c39293855
commit eccb4e0a6c
10 changed files with 87 additions and 20 deletions

View File

@ -6,10 +6,12 @@ class PlatformsController < ApplicationController
end end
def show def show
@platform = Platform.find params[:id] @platform = Platform.find params[:id], :include => :projects
@projects = @platform.projects
end end
def new def new
@platforms = Platform.all
@platform = Platform.new @platform = Platform.new
end end

View File

@ -1,2 +1,25 @@
class ProjectsController < ApplicationController class ProjectsController < ApplicationController
before_filter :authenticate_user!
before_filter :find_platform
def new
@project = @platform.projects.new
end
def create
@project = @platform.projects.new params[:project]
if @project.save
flash[:notice] = t('flash.project.saved')
redirect_to @platform
else
flash[:error] = t('flash.project.save_error')
render :action => :new
end
end
protected
def find_platform
@platform = Platform.find params[:platform_id]
end
end end

View File

@ -3,18 +3,14 @@ class Platform < ActiveRecord::Base
has_one :parent, :class_name => 'Platform', :foreign_key => 'parent_platform_id' has_one :parent, :class_name => 'Platform', :foreign_key => 'parent_platform_id'
validate :name, :presence => true, :uniqueness => true validate :name, :presence => true, :uniqueness => true
validate :unixname, :presence => true, :uniqueness => true validate :unixname, :uniqueness => true, :presence => true, :format => { :with => /^[a-zA-Z0-9\-.]+$/ }, :allow_nil => false, :allow_blank => false
validate :validate_unixname
before_validation :generate_unixname before_validation :generate_unixname
protected protected
def generate_unixname def generate_unixname
#TODO: Implement unixname generation self.unixname = name.gsub(/[^a-zA-Z0-9\-.]/, '-')
end #TODO: Fix non-unique unixname
def validate_unixname
#TODO: Implement unixname validation
end end
end end

View File

@ -1,22 +1,22 @@
class Project < ActiveRecord::Base class Project < ActiveRecord::Base
belongs_to :platform belongs_to :platform
validate :name, :uniqueness => true, :presence => true validate :name, :uniqueness => true, :presence => true, :allow_nil => false, :allow_blank => false
validate :unixname, :uniqueness => true, :presence => true validate :unixname, :uniqueness => true, :presence => true, :format => { :with => /^[a-zA-Z0-9\-.]+$/ }, :allow_nil => false, :allow_blank => false
validate :validate_unixname
before_validation :generate_unixname before_validation :generate_unixname
include Project::HasRepository include Project::HasRepository
# Redefining a method from Project::HasRepository module to reflect current situation
def git_repo_path
@git_repo_path ||= File.join(APP_CONFIG['root_path'], platform.unixname, project.unixname, project.unixname + '.git')
end
protected protected
def generate_unixname def generate_unixname
#TODO: Implement unixname generation self.unixname = name.gsub(/[^a-zA-Z0-9\-.]/, '-')
#TODO: Fix non-unique unixname
end end
def validate_unixname
#TODO: Implement unixname validation
end
end end

View File

@ -9,6 +9,6 @@ module Project::HasRepository
protected protected
def git_repo_path def git_repo_path
@git_repo_path ||= "xxx" @git_repo_path ||= File.join(APP_CONFIG['root_path'], platform.unixname, project.unixname, project.unixname + '.git')
end end
end end

View File

@ -1,7 +1,7 @@
%h1= t('layout.platforms.list') %h1= t('layout.platforms.list')
- @platforms.each do |platform| - @platforms.each do |platform|
= div_for platform do = div_for platform do
= platform.name = link_to platform.name, platform
= link_to t('layout.platforms.new'), new_platform_path = link_to t('layout.platforms.new'), new_platform_path
.div .div
= link_to t('layout.user_list'), users_path = link_to t('layout.user_list'), users_path

View File

@ -0,0 +1,11 @@
%h1= t('layout.platforms.new_header')
= form_for @platform do |f|
%p
= f.label :name
= f.text_field :name
%p
= f.label :parent_platform_id
= f.select :parent_platform_id, @platforms.map { |p| [p.name, p.id] }, :include_blank => true
%p
= f.submit t('layout.create')
= link_to t('layout.cancel'), platforms_path

View File

@ -0,0 +1,11 @@
%h1
= t('layout.platforms.show')
= @platform.name
%h2= t('layout.platforms.projects')
- @projects.each do |project|
= div_for project do
= link_to project.name, [@platform, project]
= link_to t('layout.projects.new'), new_platform_project_path(@platform)
%h2= t('layout.platforms.products')

View File

@ -0,0 +1,8 @@
%h1= t('layout.projects.new')
= form_for [@platform, @project] do |f|
%p
= f.label :name
= f.text_field :name
%p
= f.submit t('layout.create')
= link_to t('layout.cancel'), platform_path(@platform)

View File

@ -4,10 +4,26 @@ ru:
logged_in_as: Вы вошли как logged_in_as: Вы вошли как
logout: Выйти logout: Выйти
user_list: Список пользователей user_list: Список пользователей
cancel: Отмена
create: Создать
save: Сохранить
platforms: platforms:
list: Платформы list: Платформы
new: Создать новую платформу new: Создать новую платформу
new_header: Новая платформа
show: Платформа
projects: Проекты
products: Продукты
projects:
new: Новый проект
flash:
project:
saved: Проект успешно сохранен
save_error: Не удалось сохранить проект
attributes: attributes:
password: Пароль password: Пароль
remember_me: Запомнить remember_me: Запомнить
name: Название
parent_platform_id: Родительская платформа