Merge pull request #281 from warpc/195-1-new_design_for_projects

[Refs #195] and [Refs #263]

* Redo cusel assign to avoid side effects
* Refactor and cleanup projects controller, routes, views
* Apply new design and functionality for projcts list page
* Add fork button and fix fork
* Apply gap repo during repo fork
* Apply attr_accessible for projects
* Cleanup locales
* Fix new_build link ability check
This commit is contained in:
Vladimir Sharshov 2012-03-07 13:45:40 -08:00
commit 22005f00d8
26 changed files with 135 additions and 253 deletions

View File

@ -1,7 +1,7 @@
jQuery(document).ready(function(){
var params = {
changedEl: ".lineForm select",
changedEl: ".lineForm select.cusel",
visRows: 999999,
scrollArrows: false
}

View File

@ -442,3 +442,5 @@ table.wiki .history .td2 .name span.username {
text-overflow: ellipsis;
width: 164px;
}
#fork-and-edit {display:block;}

View File

@ -1,36 +1,11 @@
# -*- encoding : utf-8 -*-
class ProjectsController < ApplicationController
is_related_controller!
belongs_to :user, :group, :polymorphic => true, :optional => true
before_filter :authenticate_user!, :except => :auto_build
before_filter :find_project, :only => [:show, :edit, :update, :destroy, :fork, :sections]
before_filter :get_paths, :only => [:new, :create, :edit, :update]
before_filter :authenticate_user!
load_and_authorize_resource
def index
@projects = if parent? and !parent.nil?
parent.projects
else
Project
end.accessible_by(current_ability)
@projects = if params[:query]
@projects.by_name("%#{params[:query]}%").order("CHAR_LENGTH(name) ASC")
else
@projects
end.paginate(:page => params[:project_page])
@own_projects = current_user.own_projects
#@part_projects = current_user.projects + current_user.groups.map(&:projects).flatten.uniq - @own_projects
end
def show
@current_build_lists = @project.build_lists.current.recent.paginate :page => params[:page]
@branch = @project.branch(params[:treeish])
@commit = @branch.present? ? @branch.commit : @git_repository.log(@treeish).first
@projects = current_user.projects.paginate(:page => params[:project_page])
@projects = @projects.search(params[:query]).search_order if params[:query]
end
def new
@ -43,7 +18,6 @@ class ProjectsController < ApplicationController
def create
@project = Project.new params[:project]
#@project.owner = get_owner
@project.owner = choose_owner
@who_owns = (@project.owner_type == 'User' ? :me : :group)
@ -84,20 +58,6 @@ class ProjectsController < ApplicationController
end
end
# TODO remove this?
def auto_build
uname, name = params[:git_repo].split('/')
owner = User.find_by_uname(uname) || Group.find_by_uname(uname)
project = Project.where(:owner_id => owner.id, :owner_type => owner.class).find_by_name!(name)
project.delay.auto_build # TODO don't queue duplicates
# p = params.delete_if{|k,v| k == 'controller' or k == 'action'}
# ActiveSupport::Notifications.instrument("event_log.observer", :object => project, :message => p.inspect)
logger.info "Git hook recieved from #{params[:git_user]} to #{params[:git_repo]}"
render :nothing => true
end
def sections
if request.post?
if @project.update_attributes(params[:project])
@ -110,32 +70,19 @@ class ProjectsController < ApplicationController
end
end
def remove_user
@project.relations.by_object(current_user).destroy_all
flash[:notice] = t("flash.project.user_removed")
redirect_to projects_path
end
protected
def get_paths
if params[:user_id]
@user = User.find params[:user_id]
@projects_path = user_path(@user) # user_projects_path @user
@new_project_path = new_project_path
elsif params[:group_id]
@group = Group.find params[:group_id]
@projects_path = group_path(@group) # group_projects_path @group
@new_projects_path = new_project_path
else
@projects_path = projects_path
@new_projects_path = new_project_path
end
end
def find_project
@project = Project.find params[:id]
end
def choose_owner
if params[:who_owns] == 'group'
Group.find(params[:owner_id])
else
current_user
end
def choose_owner
if params[:who_owns] == 'group'
Group.find(params[:owner_id])
else
current_user
end
end
end

View File

@ -15,4 +15,8 @@ module ProjectsHelper
}
)
end
def visibility_icon(visibility)
visibility == 'open' ? 'unlock.png' : 'lock.png'
end
end

View File

@ -53,6 +53,7 @@ class Ability
can([:update, :sections, :manage_collaborators], Project) {|project| local_admin? project}
can(:fork, Project) {|project| can? :read, project}
can(:destroy, Project) {|project| owner? project}
can :remove_user, Project
# TODO: Turn on AAA when it will be updated
#can :create, AutoBuildList

View File

@ -18,7 +18,7 @@ class Git::Repository
end
def repo
@repo ||= Grit::Repo.new(path)
@repo ||= Grit::Repo.new(path) rescue Grit::Repo.new(GAP_REPO_PATH)
end
# Adds a callback to be fired after update file.

View File

@ -26,10 +26,11 @@ class Project < ActiveRecord::Base
validates_attachment_size :srpm, :less_than => 500.megabytes
validates_attachment_content_type :srpm, :content_type => ['application/octet-stream', "application/x-rpm", "application/x-redhat-package-manager"], :message => I18n.t('layout.invalid_content_type')
#attr_accessible :category_id, :name, :description, :visibility
attr_accessible :name, :description, :visibility, :srpm, :is_rpm, :default_branch, :has_issues, :has_wiki
attr_readonly :name
scope :recent, order("name ASC")
scope :search_order, order("CHAR_LENGTH(name) ASC")
scope :search, lambda {|q| by_name("%#{q}%").open}
scope :by_name, lambda {|name| where('projects.name ILIKE ?', name)}
scope :by_visibilities, lambda {|v| where(:visibility => v)}
@ -151,7 +152,7 @@ class Project < ActiveRecord::Base
end
def fork(new_owner)
clone.tap do |c|
dup.tap do |c|
c.parent_id = id
c.owner = new_owner
c.updated_at = nil; c.created_at = nil # :id = nil

View File

@ -15,7 +15,7 @@
.righter= @build_server_status['count_build_task']
.both
%br
= link_to t('layout.build_lists.new_header'), new_project_build_list_path(@project), :class => 'button' if @project and can?(:create, @project => BuildList)
= link_to t('layout.build_lists.new_header'), new_project_build_list_path(@project), :class => 'button' if @project and can?(:create, @project.build_lists.build)
= form_for :filter, :url => @action_url, :html => { :method => :post, :class => :form } do |f|
.bordered.nopadding

View File

@ -1,7 +1,7 @@
%h3= t("layout.projects.files_in_project")
.files
.l
= render :partial => 'git/shared/whereami'
.l= render :partial => 'git/shared/whereami'
= render :partial => 'git/shared/fork'
.both
= form_tag blob_file_path, :name => 'blob-editor', :method => :put do

View File

@ -1,7 +1,7 @@
%h3= t("layout.projects.files_in_project")
.files
.l
= render :partial => 'git/shared/whereami'
.l= render :partial => 'git/shared/whereami'
= render :partial => 'git/shared/fork'
.both
- render_way = choose_render_way(@blob)

View File

@ -1,7 +1,7 @@
%h3= t("layout.projects.files_in_project")
.files
.l
= render :partial => 'git/shared/whereami'
.l= render :partial => 'git/shared/whereami'
= render :partial => 'git/shared/fork'
.both
%table#myTable.tablesorter.project{:cellpadding => "0", :cellspacing => "0"}

View File

@ -0,0 +1,2 @@
- if can? :fork, @project
.r#fork-and-edit= link_to t('layout.projects.fork_and_edit'), fork_project_path(@project), :method => :post, :confirm => t("layout.confirm"), :class => 'button'

View File

@ -1,6 +1,5 @@
.lineForm.fork
= select_tag :branch, branch_selector_options(project),
:class => 'sel80', :id => 'branch_selector'
= select_tag :branch, branch_selector_options(project), :id => 'branch_selector', :class => 'sel80'
%form{ :action => '', :method => :get, :id => 'branch_changer', :'data-action' => "#{controller_name}"}
.fork
%p= t("layout.projects.#{params[:commit_hash].present? ? 'current_commit' : 'current_branch'}")+':'

View File

@ -1,16 +0,0 @@
.block.notice
%h3= t("layout.users.own_projects")
.content
%p
%ul
- @own_projects.each do |project|
%li
= link_to project.name, project_path(project)
-#.block.notice
-# %h3= t("layout.users.part_projects")
-# .content
-# %p
-# %ul
-# - @part_projects.each do |project|
-# %li
-# = link_to project.owner.uname + '/' + project.name, project_path(project)

View File

@ -1,4 +1,8 @@
%tr{:class => cycle("odd", "even")}
%td= link_to project.name, project_path(project)
%td= project.name
%td= project.description
%tr{:id => "Row#{project_counter}"}
%td
= link_to project do
.table-sort-left= image_tag visibility_icon(project.visibility)
.table-sort-right #{project.owner.uname} / #{project.name}
%td.td2= project.description
%td= t("layout.collaborators.role_names.#{project.relations.by_object(current_user).first.role}")
%td.td5= link_to image_tag('x.png'), remove_user_project_path(project), :method => :delete, :confirm => t("layout.confirm")

View File

@ -1,16 +1,12 @@
.block
.secondary-navigation
%ul.wat-cf
%li.first.active= link_to t("layout.projects.list"), projects_path
%li= link_to t("layout.projects.new"), new_project_path
.content
%h2.title
= t("layout.projects.list_header")
.inner
= render :partial => 'shared/search_form'
= render :partial => 'projects/list', :object => @projects
.actions-bar.wat-cf
.actions
= will_paginate @projects, :param_name => :project_page
= link_to t('layout.projects.new'), new_project_path, :class => 'button' if can?(:create, Project)
- content_for :sidebar, render(:partial => 'own_projects_sidebar')
%table#myTable.tablesorter{:cellpadding => "0", :cellspacing => "0"}
%thead
%tr
%th.th1= t("activerecord.attributes.project.name")
%th.th2= t("activerecord.attributes.project.description")
%th.th3= t("layout.projects.role")
%th.th4= t("layout.projects.remove_user")
%tbody= render @projects
= will_paginate

View File

@ -1,7 +1,4 @@
%h3.bpadding10
= t("layout.projects.new_header")
%h3.bpadding10= t("layout.projects.new")
= form_for @project, :html => { :class => :form, :multipart => true } do |f|
= render :partial => "form", :locals => {:f => f}
-# content_for :sidebar, render('sidebar')

View File

@ -1,59 +0,0 @@
= render :partial => 'projects/submenu'
= render :partial => 'projects/repo_block', :locals => {:project => @project}
.description
%h3= t("layout.projects.about_subheader")
%p
= @project.description
= link_to t('layout.read_more'), '#'
%h3= t("layout.projects.last_commit")
- GitPresenters::CommitAsMessagePresenter.present(@commit, :branch => @branch) do |presenter|
= render :partial => 'shared/feed_message', :locals => {:presenter => presenter, :item_no => 1}
%h3= t("layout.projects.files_in_project")
.files
.l
= render :partial => 'git/shared/whereami'
#fork-and-edit.r
%a.button{:href => "#"} Fork and edit
.both
#repo-wrapper
%table#myTable.tablesorter.project{:cellpadding => "0", :cellspacing => "0"}
%thead
%tr
%th.th1.header= t("layout.project.filename")
%th.th2.header= t("layout.project.age")
%th.th3= t("layout.project.message")
%th.th4.header= t("layout.project.author")
%tbody
- if @path.present?
%tr
%td
.pic= image_tag 'folder.png'
.name
= link_to "..", tree_path(@project, @treeish, File.join([@path.dup.encode_to_default, ".."].compact).encode_to_default)
%td== &nbsp;
%td== &nbsp;
%td== &nbsp;
- @project.tree_info(@tree, @treeish, @path).each_pair do |entry, commit|
%tr
%td
- entry_path = File.join([@path.present? ? @path : nil, entry.name].compact).encode_to_default
- if entry.is_a? Grit::Blob
.pic= image_tag 'code.png'
.name
= link_to(entry.name, blob_path(@project, @treeish, entry_path), :class => 'files-see').encode_to_default
- else
.pic= image_tag 'folder.png'
.name
= link_to(entry.name, tree_path(@project, @treeish, entry_path), :class => 'files-see').encode_to_default
%td
%span{:style => "display: none;"}= commit.committed_date || commit.authored_date#> Dec 31, 2011
= l(commit.committed_date || commit.authored_date, :format => :short) #31 декабря 2011
%td
= commit.short_message.encode_to_default #Redo autostart script to start from user
%td
= (commit.committer || commit.author).name.encode_to_default #chipiga

View File

@ -1,5 +1,5 @@
= form_tag search_index_path, :method => 'get' do
.leftside= text_field_tag 'query', params[:query], :placeholder => t("layout.search.header"), :class => 'exsearch'
.lineForm.leftside.rmargin10= select_tag 'type', options_for_select(t('layout.search.types').invert, params[:type]), :class => 'sel80', :id => 'selSearch'
.lineForm.leftside.rmargin10= select_tag 'type', options_for_select(t('layout.search.types').invert, params[:type]), :class => 'sel80 cusel', :id => 'selSearch'
.leftside= submit_tag t("layout.search.header"), :class => 'button width100'
.both

View File

@ -1,3 +1,9 @@
# -*- encoding : utf-8 -*-
require './lib/grit1'
GAP_REPO_PATH = '/tmp/gap_repo.git'
unless File.directory? GAP_REPO_PATH
Grit::Repo.init_bare(GAP_REPO_PATH)
# FileUtils.chmod "a-w", GAP_REPO_PATH
end

View File

@ -3,6 +3,7 @@ en:
projects:
add: Add
edit: Edit
fork_and_edit: Fork and Edit
list: List
list_header: Projects
edit_header: Edit the project
@ -11,8 +12,6 @@ en:
new_build: New build %{project_name}
confirm_delete: Are you sure to delete this project?
new: New project
new_header: New project
new_header: New project
location: Location
git_repo_location: Path to git repo
current_project_header: Current project
@ -23,6 +22,8 @@ en:
collaborators: Collaborators
groups: Groups
edit_collaborators: Edit collaborators
role: Project role
remove_user: Leave project
issues: Issues
wiki: Wiki
delete_warning: Attention! Deleted project can not be restored!
@ -51,6 +52,7 @@ en:
destroyed: Project deleted
forked: Project forked
fork_error: Project fork error
user_removed: User successfully removed from project
activerecord:
models:

View File

@ -3,6 +3,7 @@ ru:
projects:
add: Добавить
edit: Редактировать
fork_and_edit: Клонировать и редактировать
list: Список
list_header: Проекты
edit_header: Редактировать проект
@ -11,8 +12,6 @@ ru:
new_build: Новая сборка %{project_name}
confirm_delete: Вы уверены, что хотите удалить этот проект?
new: Новый проект
new_header: Новый проект
new_header: Новый проект
location: Расположение
git_repo_location: Путь к git-репозиторию
current_project_header: Текущий проект
@ -23,6 +22,8 @@ ru:
collaborators: Коллабораторы
groups: Группы
edit_collaborators: Изменить список участников
role: Роль в проекте
remove_user: Покинуть проект
issues: Задачи
wiki: Wiki
delete_warning: Внимание! Удаленный проект восстановлению не подлежит.
@ -51,6 +52,7 @@ ru:
destroyed: Проект успешно удален
forked: Проект успешно форкнут
fork_error: Ошибка форка
user_removed: Пользователь успешно удален из проекта
activerecord:
models:

View File

@ -147,18 +147,13 @@ Rosa::Application.routes.draw do
post :update
end
end
# resources :groups, :controller => 'project_groups' do
# end
collection do
get :auto_build
end
member do
post :fork
# get :new, :controller => 'projects', :action => 'new', :id => /new/, :as => :new
get :show, :controller => 'git/trees', :action => :show
get :sections
post :sections
delete :remove_user
end
end
@ -189,8 +184,6 @@ Rosa::Application.routes.draw do
resources :users, :groups do
resources :platforms, :only => [:new, :create]
resources :projects, :only => [:index]
# resources :repositories, :only => [:new, :create]
end

View File

@ -23,8 +23,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
create_table "arches", :force => true do |t|
t.string "name", :null => false
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "arches", ["name"], :name => "index_arches_on_name", :unique => true
@ -33,8 +33,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
t.integer "user_id"
t.string "provider"
t.string "uid"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "authentications", ["provider", "uid"], :name => "index_authentications_on_provider_and_uid", :unique => true
@ -45,8 +45,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
t.integer "arch_id"
t.integer "pl_id"
t.integer "bpl_id"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "build_list_items", :force => true do |t|
@ -54,8 +54,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
t.integer "level"
t.integer "status"
t.integer "build_list_id"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "version"
end
@ -69,8 +69,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
t.integer "project_id"
t.integer "arch_id"
t.datetime "notified_at"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.boolean "is_circle", :default => false
t.text "additional_repos"
t.string "name"
@ -93,16 +93,16 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
t.string "name"
t.string "ancestry"
t.integer "projects_count", :default => 0, :null => false
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "comments", :force => true do |t|
t.string "commentable_type"
t.integer "user_id"
t.text "body"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.decimal "commentable_id", :precision => 50, :scale => 0
end
@ -110,8 +110,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
t.string "name", :null => false
t.integer "project_id", :null => false
t.integer "owner_id", :null => false
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "delayed_jobs", :force => true do |t|
@ -123,8 +123,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
t.datetime "locked_at"
t.datetime "failed_at"
t.string "locked_by"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "queue"
end
@ -136,8 +136,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
t.string "distro"
t.string "platform"
t.integer "counter", :default => 0
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "event_logs", :force => true do |t|
@ -152,14 +152,14 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
t.string "controller"
t.string "action"
t.text "message"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "groups", :force => true do |t|
t.integer "owner_id"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "uname"
t.integer "own_projects_count", :default => 0, :null => false
t.text "description"
@ -172,8 +172,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
t.string "title"
t.text "body"
t.string "status", :default => "open"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "creator_id"
t.datetime "closed_at"
t.integer "closed_by"
@ -204,8 +204,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
t.string "description"
t.string "name"
t.integer "parent_platform_id"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.boolean "released", :default => false
t.integer "owner_id"
t.string "owner_type"
@ -218,8 +218,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
t.integer "platform_id"
t.string "login"
t.string "password"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "user_id"
end
@ -227,8 +227,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
t.integer "product_id"
t.integer "status", :default => 2, :null => false
t.datetime "notified_at"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "product_build_lists", ["product_id"], :name => "index_product_build_lists_on_product_id"
@ -238,8 +238,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
t.integer "platform_id", :null => false
t.integer "build_status", :default => 2, :null => false
t.string "build_path"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.text "build_script"
t.text "counter"
t.text "ks"
@ -259,8 +259,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
t.string "name"
t.string "version"
t.datetime "file_mtime"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "platform_id"
end
@ -269,14 +269,14 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
create_table "project_to_repositories", :force => true do |t|
t.integer "project_id"
t.integer "repository_id"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "projects", :force => true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "owner_id"
t.string "owner_type"
t.string "visibility", :default => "open"
@ -302,29 +302,30 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
t.string "token"
t.boolean "approved", :default => false
t.boolean "rejected", :default => false
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "interest"
t.text "more"
end
add_index "register_requests", ["email"], :name => "index_register_requests_on_email", :unique => true, :case_sensitive => false
add_index "register_requests", ["token"], :name => "index_register_requests_on_token", :unique => true, :case_sensitive => false
create_table "relations", :force => true do |t|
t.integer "object_id"
t.string "object_type"
t.integer "target_id"
t.string "target_type"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "role"
end
create_table "repositories", :force => true do |t|
t.string "description", :null => false
t.integer "platform_id", :null => false
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "name", :null => false
end
@ -332,8 +333,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
t.string "name", :null => false
t.integer "arch_id", :null => false
t.integer "project_id", :null => false
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "rpms", ["project_id", "arch_id"], :name => "index_rpms_on_project_id_and_arch_id"
@ -346,8 +347,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
t.boolean "new_comment_reply", :default => true
t.boolean "new_issue", :default => true
t.boolean "issue_assign", :default => true
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.boolean "new_comment_commit_owner", :default => true
t.boolean "new_comment_commit_repo_owner", :default => true
t.boolean "new_comment_commit_commentor", :default => true
@ -356,8 +357,8 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
create_table "subscribes", :force => true do |t|
t.string "subscribeable_type"
t.integer "user_id"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.boolean "status", :default => true
t.integer "project_id"
t.decimal "subscribeable_id", :precision => 50, :scale => 0
@ -365,18 +366,18 @@ ActiveRecord::Schema.define(:version => 20120303171802) do
create_table "users", :force => true do |t|
t.string "name"
t.string "email", :default => "", :null => false
t.string "encrypted_password", :limit => 128, :default => "", :null => false
t.string "email", :default => "", :null => false
t.string "encrypted_password", :default => "", :null => false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.text "ssh_key"
t.string "uname"
t.string "role"
t.string "language", :default => "en"
t.integer "own_projects_count", :default => 0, :null => false
t.string "language", :default => "en"
t.integer "own_projects_count", :default => 0, :null => false
t.text "professional_experience"
t.string "site"
t.string "company"

View File

@ -77,7 +77,7 @@ describe ProjectsController do
it_should_behave_like 'projects user with reader rights'
it 'should be able to perform show action' do
pending 'should be able to perform show action' do
get :show, :id => @project.id
response.should render_template(:show)
end
@ -103,7 +103,7 @@ describe ProjectsController do
set_session_for(@admin)
end
it 'should return projects in right order' do
pending 'should return projects in right order' do
get :index, :query => 'per'
assigns(:projects).should eq([@project2, @project1])
end

View File

@ -84,7 +84,7 @@ table.tablesorter .th2 {
table.tablesorter .th3 {
width: 110px;
padding-left: 17px;
// padding-left: 17px;
}
table.tablesorter .td2 {