Commit 84457708 authored by DZ's avatar DZ

Merge branch 'dev' of dev.gitlabhq.com:gitlabhq into dev

parents d64f23e2 bd219fcc
...@@ -33,7 +33,7 @@ end ...@@ -33,7 +33,7 @@ end
group :development, :test do group :development, :test do
gem 'rspec-rails' gem 'rspec-rails'
gem 'shoulda' gem "shoulda", "~> 3.0.0.beta2"
gem 'capybara' gem 'capybara'
gem 'autotest' gem 'autotest'
gem 'autotest-rails' gem 'autotest-rails'
......
...@@ -200,7 +200,11 @@ GEM ...@@ -200,7 +200,11 @@ GEM
ffi (>= 1.0.7) ffi (>= 1.0.7)
json_pure json_pure
rubyzip rubyzip
shoulda (2.11.3) shoulda (3.0.0.beta2)
shoulda-context (~> 1.0.0.beta1)
shoulda-matchers (~> 1.0.0.beta1)
shoulda-context (1.0.0.beta1)
shoulda-matchers (1.0.0.beta3)
simplecov (0.5.3) simplecov (0.5.3)
multi_json (~> 1.0.3) multi_json (~> 1.0.3)
simplecov-html (~> 0.5.3) simplecov-html (~> 0.5.3)
...@@ -264,7 +268,7 @@ DEPENDENCIES ...@@ -264,7 +268,7 @@ DEPENDENCIES
ruby-debug19 ruby-debug19
sass-rails (~> 3.1.0) sass-rails (~> 3.1.0)
seed-fu! seed-fu!
shoulda shoulda (~> 3.0.0.beta2)
simplecov simplecov
six six
sqlite3 sqlite3
......
...@@ -5,11 +5,14 @@ ...@@ -5,11 +5,14 @@
// the compiled file. // the compiled file.
// //
//= require jquery //= require jquery
//= require jquery-ui
//= require jquery_ujs //= require jquery_ujs
//= require jquery.ui.selectmenu
//= require jquery.cookie
//= require_tree . //= require_tree .
$(function(){ $(function(){
$(".one_click_select").click(function(){ $(".one_click_select").live("click", function(){
$(this).select(); $(this).select();
}); });
......
This diff is collapsed.
...@@ -8,7 +8,7 @@ $(document).ready(function(){ ...@@ -8,7 +8,7 @@ $(document).ready(function(){
e.stopPropagation(); e.stopPropagation();
$(this).find("td.tree-item-file-name a").click(); $(this).find("td.tree-item-file-name a").click();
return false; return false;
} }
}); });
$("#projects-list .project").live('click', function(e){ $("#projects-list .project").live('click', function(e){
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
* This is a manifest file that'll automatically include all the stylesheets available in this directory * This is a manifest file that'll automatically include all the stylesheets available in this directory
* and any sub-directories. You're free to add application-wide styles to this file and they'll appear at * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
* the top of the compiled file, but it's generally better to create a new file per style scope. * the top of the compiled file, but it's generally better to create a new file per style scope.
*= require jquery-ui/jquery-ui
*= require jquery-ui/jquery.ui.selectmenu
*= require_self *= require_self
*= require_tree . *= require_tree .
*/ */
@mixin round-borders-all($radius) { @mixin round-borders-all($radius) {
border: 1px solid #eaeaea; border: 1px solid #eaeaea;
-moz-border-radius: $radius; -moz-border-radius: $radius;
-webkit-border-radius: $radius; -webkit-border-radius: $radius;
...@@ -28,11 +28,11 @@ td.linenos{ ...@@ -28,11 +28,11 @@ td.linenos{
.highlight pre{ .highlight pre{
} }
.linenodiv pre { .linenodiv pre {
white-space:pre-line; white-space:pre-line;
} }
td.linenos { td.linenos {
background:#ECECEC; background:#ECECEC;
color:#777; color:#777;
padding:10px 0px 0px 10px; padding:10px 0px 0px 10px;
...@@ -42,7 +42,7 @@ td.linenos { ...@@ -42,7 +42,7 @@ td.linenos {
} }
td.code .highlight { td.code .highlight {
overflow: auto; overflow: auto;
} }
table.highlighttable pre{ table.highlighttable pre{
...@@ -53,9 +53,8 @@ table.highlighttable pre{ ...@@ -53,9 +53,8 @@ table.highlighttable pre{
text-align:left; text-align:left;
} }
.git-empty .highlight { .git-empty .highlight {
@include round-borders-all(4px); @include round-borders-all(4px);
background:#eee; background:#eee;
padding:5px; padding:5px;
//overflow-x:scroll; //overflow-x:scroll;
...@@ -71,10 +70,9 @@ table.highlighttable pre{ ...@@ -71,10 +70,9 @@ table.highlighttable pre{
.shadow{ .shadow{
-webkit-box-shadow:0 5px 15px #000; -webkit-box-shadow:0 5px 15px #000;
-moz-box-shadow:0 5px 15px #000; -moz-box-shadow:0 5px 15px #000;
box-shadow:0 5px 15px #000; box-shadow:0 5px 15px #000;
} }
.hll { background-color: #ffffff } .hll { background-color: #ffffff }
.c { color: #888888; font-style: italic } /* Comment */ .c { color: #888888; font-style: italic } /* Comment */
.err { color: #a61717; background-color: #e3d2d2 } /* Error */ .err { color: #a61717; background-color: #e3d2d2 } /* Error */
...@@ -105,7 +103,7 @@ table.highlighttable pre{ ...@@ -105,7 +103,7 @@ table.highlighttable pre{
.highlight .nb{color:#0086B3;} /* Name.Builtin */ .highlight .nb{color:#0086B3;} /* Name.Builtin */
.highlight .nc{color:#458;font-weight:bold;} /* Name.Class */ .highlight .nc{color:#458;font-weight:bold;} /* Name.Class */
.highlight .no{color:#008080;} /* Name.Constant */ .highlight .no{color:#008080;} /* Name.Constant */
.highlight .ni{color:#800080;} .highlight .ni{color:#800080;}
.highlight .ne{color:#900;font-weight:bold;} /* Name.Exception */ .highlight .ne{color:#900;font-weight:bold;} /* Name.Exception */
.highlight .nf{color:#900;font-weight:bold;} /* Name.Function */ .highlight .nf{color:#900;font-weight:bold;} /* Name.Function */
.highlight .nn{color:#005;font-weight:bold;} /* Name.Namespace */ .highlight .nn{color:#005;font-weight:bold;} /* Name.Namespace */
......
This diff is collapsed.
...@@ -20,7 +20,7 @@ class Admin::MailerController < ApplicationController ...@@ -20,7 +20,7 @@ class Admin::MailerController < ApplicationController
else else
render :file => 'notify/note_wall_email.html.haml', :layout => 'notify' render :file => 'notify/note_wall_email.html.haml', :layout => 'notify'
end end
rescue rescue
render :text => "Preview not avaialble" render :text => "Preview not avaialble"
end end
...@@ -29,7 +29,7 @@ class Admin::MailerController < ApplicationController ...@@ -29,7 +29,7 @@ class Admin::MailerController < ApplicationController
@password = "DHasJKDHAS!" @password = "DHasJKDHAS!"
render :file => 'notify/new_user_email.html.haml', :layout => 'notify' render :file => 'notify/new_user_email.html.haml', :layout => 'notify'
rescue rescue
render :text => "Preview not avaialble" render :text => "Preview not avaialble"
end end
...@@ -38,7 +38,7 @@ class Admin::MailerController < ApplicationController ...@@ -38,7 +38,7 @@ class Admin::MailerController < ApplicationController
@user = @issue.assignee @user = @issue.assignee
@project = @issue.project @project = @issue.project
render :file => 'notify/new_issue_email.html.haml', :layout => 'notify' render :file => 'notify/new_issue_email.html.haml', :layout => 'notify'
rescue rescue
render :text => "Preview not avaialble" render :text => "Preview not avaialble"
end end
end end
...@@ -21,7 +21,7 @@ class Admin::UsersController < ApplicationController ...@@ -21,7 +21,7 @@ class Admin::UsersController < ApplicationController
def create def create
admin = params[:user].delete("admin") admin = params[:user].delete("admin")
@admin_user = User.new(params[:user]) @admin_user = User.new(params[:user])
@admin_user.admin = (admin && admin.to_i > 0) @admin_user.admin = (admin && admin.to_i > 0)
respond_to do |format| respond_to do |format|
...@@ -39,8 +39,8 @@ class Admin::UsersController < ApplicationController ...@@ -39,8 +39,8 @@ class Admin::UsersController < ApplicationController
def update def update
admin = params[:user].delete("admin") admin = params[:user].delete("admin")
if params[:user][:password].empty? if params[:user][:password].empty?
params[:user].delete(:password) params[:user].delete(:password)
params[:user].delete(:password_confirmation) params[:user].delete(:password_confirmation)
end end
@admin_user = User.find(params[:id]) @admin_user = User.find(params[:id])
......
...@@ -8,7 +8,7 @@ class ApplicationController < ActionController::Base ...@@ -8,7 +8,7 @@ class ApplicationController < ActionController::Base
render :file => File.join(Rails.root, "public", "gitosis_error"), :layout => false render :file => File.join(Rails.root, "public", "gitosis_error"), :layout => false
end end
protected protected
def abilities def abilities
@abilities ||= Six.new @abilities ||= Six.new
...@@ -18,7 +18,7 @@ class ApplicationController < ActionController::Base ...@@ -18,7 +18,7 @@ class ApplicationController < ActionController::Base
abilities.allowed?(object, action, subject) abilities.allowed?(object, action, subject)
end end
def project def project
@project ||= Project.find_by_code(params[:project_id]) @project ||= Project.find_by_code(params[:project_id])
end end
...@@ -55,7 +55,7 @@ class ApplicationController < ActionController::Base ...@@ -55,7 +55,7 @@ class ApplicationController < ActionController::Base
@tag = unless params[:tag].blank? @tag = unless params[:tag].blank?
params[:tag] params[:tag]
else else
nil nil
end end
......
class IssuesController < ApplicationController class IssuesController < ApplicationController
before_filter :authenticate_user! before_filter :authenticate_user!
before_filter :project before_filter :project
before_filter :issue, :only => [:edit, :update, :destroy, :show] before_filter :issue, :only => [:edit, :update, :destroy, :show]
# Authorize # Authorize
before_filter :add_project_abilities before_filter :add_project_abilities
before_filter :authorize_read_issue! before_filter :authorize_read_issue!
before_filter :authorize_write_issue!, :only => [:new, :create, :close, :edit, :update, :sort] before_filter :authorize_write_issue!, :only => [:new, :create, :close, :edit, :update, :sort]
respond_to :js respond_to :js
...@@ -57,14 +57,13 @@ class IssuesController < ApplicationController ...@@ -57,14 +57,13 @@ class IssuesController < ApplicationController
end end
end end
def destroy def destroy
return access_denied! unless can?(current_user, :admin_issue, @issue) return access_denied! unless can?(current_user, :admin_issue, @issue)
@issue.destroy @issue.destroy
respond_to do |format| respond_to do |format|
format.js { render :nothing => true } format.js { render :nothing => true }
end end
end end
...@@ -94,7 +93,7 @@ class IssuesController < ApplicationController ...@@ -94,7 +93,7 @@ class IssuesController < ApplicationController
render :partial => 'issues' render :partial => 'issues'
end end
protected protected
def issue def issue
@issue ||= @project.issues.find(params[:id]) @issue ||= @project.issues.find(params[:id])
......
...@@ -24,7 +24,7 @@ class KeysController < ApplicationController ...@@ -24,7 +24,7 @@ class KeysController < ApplicationController
respond_to do |format| respond_to do |format|
format.html { redirect_to keys_url } format.html { redirect_to keys_url }
format.js { render :nothing => true } format.js { render :nothing => true }
end end
end end
end end
class NotesController < ApplicationController class NotesController < ApplicationController
before_filter :project before_filter :project
# Authorize # Authorize
before_filter :add_project_abilities before_filter :add_project_abilities
before_filter :authorize_write_note!, :only => [:create] before_filter :authorize_write_note!, :only => [:create]
respond_to :js respond_to :js
...@@ -15,10 +15,9 @@ class NotesController < ApplicationController ...@@ -15,10 +15,9 @@ class NotesController < ApplicationController
notify if params[:notify] == '1' notify if params[:notify] == '1'
end end
respond_to do |format| respond_to do |format|
format.html {redirect_to :back} format.html {redirect_to :back}
format.js format.js
end end
end end
...@@ -30,11 +29,11 @@ class NotesController < ApplicationController ...@@ -30,11 +29,11 @@ class NotesController < ApplicationController
@note.destroy @note.destroy
respond_to do |format| respond_to do |format|
format.js { render :nothing => true } format.js { render :nothing => true }
end end
end end
protected protected
def notify def notify
@project.users.reject { |u| u.id == current_user.id } .each do |u| @project.users.reject { |u| u.id == current_user.id } .each do |u|
......
...@@ -14,7 +14,7 @@ class ProfileController < ApplicationController ...@@ -14,7 +14,7 @@ class ProfileController < ApplicationController
end end
def password_update def password_update
params[:user].reject!{ |k, v| k != "password" && k != "password_confirmation"} params[:user].reject!{ |k, v| k != "password" && k != "password_confirmation"}
@user = current_user @user = current_user
if @user.update_attributes(params[:user]) if @user.update_attributes(params[:user])
......
class ProjectsController < ApplicationController class ProjectsController < ApplicationController
before_filter :project, :except => [:index, :new, :create] before_filter :project, :except => [:index, :new, :create]
# Authorize # Authorize
before_filter :add_project_abilities before_filter :add_project_abilities
before_filter :authorize_read_project!, :except => [:index, :new, :create] before_filter :authorize_read_project!, :except => [:index, :new, :create]
before_filter :authorize_admin_project!, :only => [:edit, :update, :destroy] before_filter :authorize_admin_project!, :only => [:edit, :update, :destroy]
before_filter :require_non_empty_project, :only => [:blob, :tree] before_filter :require_non_empty_project, :only => [:blob, :tree]
...@@ -23,7 +23,7 @@ class ProjectsController < ApplicationController ...@@ -23,7 +23,7 @@ class ProjectsController < ApplicationController
@project = Project.new(params[:project]) @project = Project.new(params[:project])
@project.owner = current_user @project.owner = current_user
Project.transaction do Project.transaction do
@project.save! @project.save!
@project.users_projects.create!(:admin => true, :read => true, :write => true, :user => current_user) @project.users_projects.create!(:admin => true, :read => true, :write => true, :user => current_user)
end end
...@@ -31,7 +31,7 @@ class ProjectsController < ApplicationController ...@@ -31,7 +31,7 @@ class ProjectsController < ApplicationController
respond_to do |format| respond_to do |format|
if @project.valid? if @project.valid?
format.html { redirect_to @project, notice: 'Project was successfully created.' } format.html { redirect_to @project, notice: 'Project was successfully created.' }
format.js format.js
else else
format.html { render action: "new" } format.html { render action: "new" }
format.js format.js
...@@ -51,10 +51,10 @@ class ProjectsController < ApplicationController ...@@ -51,10 +51,10 @@ class ProjectsController < ApplicationController
respond_to do |format| respond_to do |format|
if project.update_attributes(params[:project]) if project.update_attributes(params[:project])
format.html { redirect_to project, :notice => 'Project was successfully updated.' } format.html { redirect_to project, :notice => 'Project was successfully updated.' }
format.js format.js
else else
format.html { render action: "edit" } format.html { render action: "edit" }
format.js format.js
end end
end end
end end
...@@ -105,7 +105,7 @@ class ProjectsController < ApplicationController ...@@ -105,7 +105,7 @@ class ProjectsController < ApplicationController
if params[:commit_id] if params[:commit_id]
@commit = @repo.commits(params[:commit_id]).first @commit = @repo.commits(params[:commit_id]).first
else else
@commit = @repo.commits(@ref || "master").first @commit = @repo.commits(@ref || "master").first
end end
...@@ -114,7 +114,7 @@ class ProjectsController < ApplicationController ...@@ -114,7 +114,7 @@ class ProjectsController < ApplicationController
respond_to do |format| respond_to do |format|
format.html # show.html.erb format.html # show.html.erb
format.js do format.js do
# diasbale cache to allow back button works # diasbale cache to allow back button works
response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate" response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
response.headers["Pragma"] = "no-cache" response.headers["Pragma"] = "no-cache"
...@@ -132,7 +132,7 @@ class ProjectsController < ApplicationController ...@@ -132,7 +132,7 @@ class ProjectsController < ApplicationController
if @tree.is_a?(Grit::Blob) if @tree.is_a?(Grit::Blob)
send_data(@tree.data, :type => @tree.mime_type, :disposition => 'inline', :filename => @tree.name) send_data(@tree.data, :type => @tree.mime_type, :disposition => 'inline', :filename => @tree.name)
else else
head(404) head(404)
end end
rescue rescue
...@@ -147,9 +147,9 @@ class ProjectsController < ApplicationController ...@@ -147,9 +147,9 @@ class ProjectsController < ApplicationController
end end
end end
protected protected
def project def project
@project ||= Project.find_by_code(params[:id]) @project ||= Project.find_by_code(params[:id])
end end
end end
class SnippetsController < ApplicationController class SnippetsController < ApplicationController
before_filter :authenticate_user! before_filter :authenticate_user!
before_filter :project before_filter :project
# Authorize # Authorize
before_filter :add_project_abilities before_filter :add_project_abilities
before_filter :authorize_read_snippet! before_filter :authorize_read_snippet!
before_filter :authorize_write_snippet!, :only => [:new, :create, :close, :edit, :update, :sort] before_filter :authorize_write_snippet!, :only => [:new, :create, :close, :edit, :update, :sort]
respond_to :html respond_to :html
...@@ -13,7 +13,7 @@ class SnippetsController < ApplicationController ...@@ -13,7 +13,7 @@ class SnippetsController < ApplicationController
@snippets = @project.snippets @snippets = @project.snippets
end end
def new def new
@snippet = @project.snippets.new @snippet = @project.snippets.new
end end
......
class TeamMembersController < ApplicationController class TeamMembersController < ApplicationController
before_filter :project before_filter :project
# Authorize # Authorize
before_filter :add_project_abilities before_filter :add_project_abilities
before_filter :authorize_read_project! before_filter :authorize_read_project!
before_filter :authorize_admin_project!, :only => [:new, :create, :destroy, :update] before_filter :authorize_admin_project!, :only => [:new, :create, :destroy, :update]
def show def show
@team_member = project.users_projects.find(params[:id]) @team_member = project.users_projects.find(params[:id])
...@@ -26,7 +26,7 @@ class TeamMembersController < ApplicationController ...@@ -26,7 +26,7 @@ class TeamMembersController < ApplicationController
respond_to do |format| respond_to do |format|
format.js format.js
format.html do format.html do
unless @team_member.valid? unless @team_member.valid?
flash[:alert] = "User should have at least one role" flash[:alert] = "User should have at least one role"
end end
...@@ -41,7 +41,7 @@ class TeamMembersController < ApplicationController ...@@ -41,7 +41,7 @@ class TeamMembersController < ApplicationController
respond_to do |format| respond_to do |format|
format.html { redirect_to root_path } format.html { redirect_to root_path }
format.js { render :nothing => true } format.js { render :nothing => true }
end end
end end
end end
...@@ -23,9 +23,9 @@ module ApplicationHelper ...@@ -23,9 +23,9 @@ module ApplicationHelper
end end
def last_commit(project) def last_commit(project)
if project.repo_exists? if project.repo_exists?
time_ago_in_words(project.commit.committed_date) + " ago" time_ago_in_words(project.commit.committed_date) + " ago"
else else
"Never" "Never"
end end
end end
...@@ -33,8 +33,8 @@ module ApplicationHelper ...@@ -33,8 +33,8 @@ module ApplicationHelper
def search_autocomplete_source def search_autocomplete_source
projects = current_user.projects.map{ |p| { :label => p.name, :url => project_path(p) } } projects = current_user.projects.map{ |p| { :label => p.name, :url => project_path(p) } }
default_nav = [ default_nav = [
{ :label => "Keys", :url => keys_path }, { :label => "Keys", :url => keys_path },
{ :label => "Projects", :url => projects_path }, { :label => "Projects", :url => projects_path },
{ :label => "Admin", :url => admin_root_path } { :label => "Admin", :url => admin_root_path }
] ]
...@@ -42,10 +42,10 @@ module ApplicationHelper ...@@ -42,10 +42,10 @@ module ApplicationHelper
if @project && !@project.new_record? if @project && !@project.new_record?
project_nav = [ project_nav = [
{ :label => "#{@project.code} / Issues", :url => project_issues_path(@project) }, { :label => "#{@project.code} / Issues", :url => project_issues_path(@project) },
{ :label => "#{@project.code} / Wall", :url => wall_project_path(@project) }, { :label => "#{@project.code} / Wall", :url => wall_project_path(@project) },
{ :label => "#{@project.code} / Tree", :url => tree_project_path(@project) }, { :label => "#{@project.code} / Tree", :url => tree_project_path(@project) },
{ :label => "#{@project.code} / Commits", :url => project_commits_path(@project) }, { :label => "#{@project.code} / Commits", :url => project_commits_path(@project) },
{ :label => "#{@project.code} / Team", :url => team_project_path(@project) } { :label => "#{@project.code} / Team", :url => team_project_path(@project) }
] ]
end end
......
module CommitsHelper module CommitsHelper
def diff_line(line, line_new = 0, line_old = 0) def diff_line(line, line_new = 0, line_old = 0)
full_line = html_escape(line.gsub(/\n/, '')) full_line = html_escape(line.gsub(/\n/, ''))
color = if line[0] == "+" color = if line[0] == "+"
full_line = "<span class=\"old_line\">&nbsp;</span><span class=\"new_line\">#{line_new}</span> " + full_line full_line = "<span class=\"old_line\">&nbsp;</span><span class=\"new_line\">#{line_new}</span> " + full_line
"#DFD" "#DFD"
elsif line[0] == "-" elsif line[0] == "-"
full_line = "<span class=\"old_line\">#{line_old}</span><span class=\"new_line\">&nbsp;</span> " + full_line full_line = "<span class=\"old_line\">#{line_old}</span><span class=\"new_line\">&nbsp;</span> " + full_line
"#FDD" "#FDD"
else else
full_line = "<span class=\"old_line\">#{line_old}</span><span class=\"new_line\">#{line_new}</span> " + full_line full_line = "<span class=\"old_line\">#{line_old}</span><span class=\"new_line\">#{line_new}</span> " + full_line
"none" "none"
end end
......
...@@ -12,7 +12,7 @@ module ProjectsHelper ...@@ -12,7 +12,7 @@ module ProjectsHelper
else else
true true
end end
rescue rescue
nil nil
end end
end end
...@@ -17,14 +17,14 @@ class Ability ...@@ -17,14 +17,14 @@ class Ability
:read_issue, :read_issue,
:read_snippet, :read_snippet,
:read_team_member, :read_team_member,
:read_note :read_note
] if project.readers.include?(user) ] if project.readers.include?(user)
rules << [ rules << [
:write_project, :write_project,
:write_issue, :write_issue,
:write_snippet, :write_snippet,
:write_note :write_note
] if project.writers.include?(user) ] if project.writers.include?(user)
rules << [ rules << [
...@@ -32,13 +32,13 @@ class Ability ...@@ -32,13 +32,13 @@ class Ability
:admin_issue, :admin_issue,
:admin_snippet, :admin_snippet,
:admin_team_member, :admin_team_member,
:admin_note :admin_note
] if project.admins.include?(user) ] if project.admins.include?(user)
rules.flatten rules.flatten
end end
class << self class << self
[:issue, :note, :snippet].each do |name| [:issue, :note, :snippet].each do |name|
define_method "#{name}_abilities" do |user, subject| define_method "#{name}_abilities" do |user, subject|
if subject.author == user if subject.author == user
...@@ -48,7 +48,7 @@ class Ability ...@@ -48,7 +48,7 @@ class Ability
:"admin_#{name}" :"admin_#{name}"
] ]
else else
subject.respond_to?(:project) ? subject.respond_to?(:project) ?
project_abilities(user, subject.project) : [] project_abilities(user, subject.project) : []
end end
end end
......
...@@ -13,7 +13,7 @@ class Issue < ActiveRecord::Base ...@@ -13,7 +13,7 @@ class Issue < ActiveRecord::Base
validates :title, validates :title,
:presence => true, :presence => true,
:length => { :within => 0..255 } :length => { :within => 0..255 }
validates :content, validates :content,
:presence => true, :presence => true,
:length => { :within => 0..2000 } :length => { :within => 0..2000 }
...@@ -30,7 +30,7 @@ class Issue < ActiveRecord::Base ...@@ -30,7 +30,7 @@ class Issue < ActiveRecord::Base
def today? def today?
Date.today == created_at.to_date Date.today == created_at.to_date
end end
def new? def new?
today? && created_at == updated_at today? && created_at == updated_at
end end
......
...@@ -17,11 +17,11 @@ class Key < ActiveRecord::Base ...@@ -17,11 +17,11 @@ class Key < ActiveRecord::Base
def set_identifier def set_identifier
self.identifier = "#{user.identifier}_#{Time.now.to_i}" self.identifier = "#{user.identifier}_#{Time.now.to_i}"
end end
def update_gitosis def update_gitosis
Gitosis.new.configure do |c| Gitosis.new.configure do |c|
c.update_keys(identifier, key) c.update_keys(identifier, key)
projects.each do |project| projects.each do |project|
c.update_project(project.path, project.gitosis_writers) c.update_project(project.path, project.gitosis_writers)
end end
......
...@@ -7,7 +7,7 @@ class Note < ActiveRecord::Base ...@@ -7,7 +7,7 @@ class Note < ActiveRecord::Base
belongs_to :author, belongs_to :author,
:class_name => "User" :class_name => "User"
attr_protected :author, :author_id attr_protected :author, :author_id
validates_presence_of :project validates_presence_of :project
...@@ -15,10 +15,10 @@ class Note < ActiveRecord::Base ...@@ -15,10 +15,10 @@ class Note < ActiveRecord::Base
:presence => true, :presence => true,
:length => { :within => 0..255 } :length => { :within => 0..255 }
validates :attachment, validates :attachment,
:file_size => { :file_size => {
:maximum => 10.megabytes.to_i :maximum => 10.megabytes.to_i
} }
scope :common, where(:noteable_id => nil) scope :common, where(:noteable_id => nil)
......
...@@ -20,7 +20,7 @@ class Project < ActiveRecord::Base ...@@ -20,7 +20,7 @@ class Project < ActiveRecord::Base
:format => { :with => /^[a-zA-Z0-9_\-]*$/, :format => { :with => /^[a-zA-Z0-9_\-]*$/,
:message => "only letters, digits & '_' '-' allowed" }, :message => "only letters, digits & '_' '-' allowed" },
:length => { :within => 0..255 } :length => { :within => 0..255 }
validates :description, validates :description,
:length => { :within => 0..2000 } :length => { :within => 0..2000 }
...@@ -57,13 +57,13 @@ class Project < ActiveRecord::Base ...@@ -57,13 +57,13 @@ class Project < ActiveRecord::Base
c.update_project(path, gitosis_writers) c.update_project(path, gitosis_writers)
end end
end end
def destroy_gitosis_project def destroy_gitosis_project
Gitosis.new.configure do |c| Gitosis.new.configure do |c|
c.destroy_project(self) c.destroy_project(self)
end end
end end
def add_access(user, *access) def add_access(user, *access)
opts = { :user => user } opts = { :user => user }
access.each { |name| opts.merge!(name => true) } access.each { |name| opts.merge!(name => true) }
...@@ -102,12 +102,12 @@ class Project < ActiveRecord::Base ...@@ -102,12 +102,12 @@ class Project < ActiveRecord::Base
def url_to_repo def url_to_repo
"#{GITOSIS["git_user"]}@#{GITOSIS["host"]}:#{path}.git" "#{GITOSIS["git_user"]}@#{GITOSIS["host"]}:#{path}.git"
end end
def path_to_repo def path_to_repo
GITOSIS["base_path"] + path + ".git" GITOSIS["base_path"] + path + ".git"
end end
def repo def repo
@repo ||= Grit::Repo.new(path_to_repo) @repo ||= Grit::Repo.new(path_to_repo)
end end
...@@ -122,17 +122,17 @@ class Project < ActiveRecord::Base ...@@ -122,17 +122,17 @@ class Project < ActiveRecord::Base
def commit(commit_id = nil) def commit(commit_id = nil)
if commit_id if commit_id
repo.commits(commit_id).first repo.commits(commit_id).first
else else
repo.commits.first repo.commits.first
end end
end end
def heads def heads
@heads ||= repo.heads @heads ||= repo.heads
end end
def fresh_commits def fresh_commits
commits = heads.map do |h| commits = heads.map do |h|
repo.commits(h.name, 10) repo.commits(h.name, 10)
end.flatten.uniq { |c| c.id } end.flatten.uniq { |c| c.id }
...@@ -144,7 +144,7 @@ class Project < ActiveRecord::Base ...@@ -144,7 +144,7 @@ class Project < ActiveRecord::Base
end end
def commits_since(date) def commits_since(date)
commits = heads.map do |h| commits = heads.map do |h|
repo.log(h.name, nil, :since => date) repo.log(h.name, nil, :since => date)
end.flatten.uniq { |c| c.id } end.flatten.uniq { |c| c.id }
...@@ -165,7 +165,7 @@ class Project < ActiveRecord::Base ...@@ -165,7 +165,7 @@ class Project < ActiveRecord::Base
unless owner.can_create_project? unless owner.can_create_project?
errors[:base] << ("Your own projects limit is #{owner.projects_limit}! Please contact administrator to increase it") errors[:base] << ("Your own projects limit is #{owner.projects_limit}! Please contact administrator to increase it")
end end
rescue rescue
errors[:base] << ("Cant check your ability to create project") errors[:base] << ("Cant check your ability to create project")
end end
......
...@@ -13,7 +13,7 @@ class Snippet < ActiveRecord::Base ...@@ -13,7 +13,7 @@ class Snippet < ActiveRecord::Base
validates :title, validates :title,
:presence => true, :presence => true,
:length => { :within => 0..255 } :length => { :within => 0..255 }
validates :file_name, validates :file_name,
:presence => true, :presence => true,
:length => { :within => 0..255 } :length => { :within => 0..255 }
...@@ -22,9 +22,8 @@ class Snippet < ActiveRecord::Base ...@@ -22,9 +22,8 @@ class Snippet < ActiveRecord::Base
:presence => true, :presence => true,
:length => { :within => 0..10000 } :length => { :within => 0..10000 }
def self.content_types def self.content_types
[ [
".rb", ".py", ".pl", ".scala", ".c", ".cpp", ".java", ".rb", ".py", ".pl", ".scala", ".c", ".cpp", ".java",
".haml", ".html", ".sass", ".scss", ".xml", ".php", ".erb", ".haml", ".html", ".sass", ".scss", ".xml", ".php", ".erb",
".js", ".sh", ".coffee", ".yml", ".md" ".js", ".sh", ".coffee", ".yml", ".md"
......
...@@ -5,7 +5,7 @@ class User < ActiveRecord::Base ...@@ -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, attr_accessible :email, :password, :password_confirmation, :remember_me,
:name, :projects_limit, :skype, :linkedin, :twitter :name, :projects_limit, :skype, :linkedin, :twitter
has_many :users_projects, :dependent => :destroy has_many :users_projects, :dependent => :destroy
......
%p This is page with preview for all system emails that are sent to user %p This is page with preview for all system emails that are sent to user
%p Email previews built based on existing Project/Commit/Issue base - so some preview maybe unavailable unless object appear in system %p Email previews built based on existing Project/Commit/Issue base - so some preview maybe unavailable unless object appear in system
#accordion #accordion
%h3 %h3
%a New user %a New user
%div %div
%iframe{ :src=> admin_mailer_preview_user_new_path, :width=>"100%", :height=>"350"} %iframe{ :src=> admin_mailer_preview_user_new_path, :width=>"100%", :height=>"350"}
%h3 %h3
%a New issue %a New issue
%div %div
%iframe{ :src=> admin_mailer_preview_issue_new_path, :width=>"100%", :height=>"350"} %iframe{ :src=> admin_mailer_preview_issue_new_path, :width=>"100%", :height=>"350"}
%h3 %h3
%a Commit note %a Commit note
%div %div
%iframe{ :src=> admin_mailer_preview_note_path(:type => "Commit"), :width=>"100%", :height=>"350"} %iframe{ :src=> admin_mailer_preview_note_path(:type => "Commit"), :width=>"100%", :height=>"350"}
%h3 %h3
%a Issue note %a Issue note
%div %div
%iframe{ :src=> admin_mailer_preview_note_path(:type => "Issue"), :width=>"100%", :height=>"350"} %iframe{ :src=> admin_mailer_preview_note_path(:type => "Issue"), :width=>"100%", :height=>"350"}
%h3 %h3
%a Wall note %a Wall note
%div %div
%iframe{ :src=> admin_mailer_preview_note_path(:type => "Wall"), :width=>"100%", :height=>"350"} %iframe{ :src=> admin_mailer_preview_note_path(:type => "Wall"), :width=>"100%", :height=>"350"}
:javascript
:javascript
$(function() { $(function() {
$( "#accordion" ).accordion(); }); $( "#accordion" ).accordion(); });
%p#notice= notice %p#notice= notice
.span-8.colborder .span-8.colborder
%h2= @admin_project.name %h2= @admin_project.name
%p %p
%b Name: %b Name:
...@@ -22,16 +22,16 @@ ...@@ -22,16 +22,16 @@
.span-14 .span-14
%h2 Team %h2 Team
%table.round-borders %table.round-borders
%tr %tr
%th Name %th Name
%th Added %th Added
%th Web %th Web
%th Git %th Git
%th Admin %th Admin
%th %th
- @admin_project.users_projects.each do |tm| - @admin_project.users_projects.each do |tm|
%tr %tr
......
...@@ -7,8 +7,8 @@ ...@@ -7,8 +7,8 @@
%th Read %th Read
%th Git %th Git
%th Manage %th Manage
%th Added %th Added
%th %th
%th %th
%th %th
- members.each do |tm| - members.each do |tm|
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
%b Since: %b Since:
= @admin_team_member.updated_at = @admin_team_member.updated_at
.span-10 .span-10
.span-6 .span-6
%b Access: %b Access:
......
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
.field .field
= f.label :twitter = f.label :twitter
%br %br
= f.text_field :twitter = f.text_field :twitter
.clear .clear
%br %br
.actions .actions
......
...@@ -2,5 +2,4 @@ ...@@ -2,5 +2,4 @@
= render 'form' = render 'form'
= link_to 'Back', admin_users_path, :class => "right lbutton" = link_to 'Back', admin_users_path, :class => "right lbutton"
...@@ -19,28 +19,27 @@ ...@@ -19,28 +19,27 @@
= @admin_user.skype = @admin_user.skype
%p %p
%b LinkedIn: %b LinkedIn:
= @admin_user.linkedin = @admin_user.linkedin
%p %p
%b Twitter: %b Twitter:
= @admin_user.twitter = @admin_user.twitter
.clear .clear
= link_to 'Edit', edit_admin_user_path(@admin_user) = link_to 'Edit', edit_admin_user_path(@admin_user)
\| \|
= link_to 'Back', admin_users_path = link_to 'Back', admin_users_path
.span-14 .span-14
%h2 Projects %h2 Projects
%table.round-borders %table.round-borders
%tr %tr
%th Name %th Name
%th Added %th Added
%th Web %th Web
%th Git %th Git
%th Admin %th Admin
%th %th
- @admin_user.users_projects.each do |tm| - @admin_user.users_projects.each do |tm|
- project = tm.project - project = tm.project
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
.diff_file_header .diff_file_header
- if diff.deleted_file - if diff.deleted_file
%strong{:id => "#{diff.b_path}"}= diff.a_path %strong{:id => "#{diff.b_path}"}= diff.a_path
- else - else
= link_to tree_file_project_path(@project, @commit.id, diff.b_path) do = link_to tree_file_project_path(@project, @commit.id, diff.b_path) do
%strong{:id => "#{diff.b_path}"}= diff.b_path %strong{:id => "#{diff.b_path}"}= diff.b_path
%br/ %br/
...@@ -19,5 +19,5 @@ ...@@ -19,5 +19,5 @@
.diff_file_content_image .diff_file_content_image
%img{:src => "data:#{file.mime_type};base64,#{Base64.encode64(file.data)}"} %img{:src => "data:#{file.mime_type};base64,#{Base64.encode64(file.data)}"}
- else - else
%p %p
%center No preview for this file type %center No preview for this file type
...@@ -6,4 +6,4 @@ ...@@ -6,4 +6,4 @@
%h1 Listing commits %h1 Listing commits
%div{:id => dom_id(@project)} %div{:id => dom_id(@project)}
= render "commits" = render "commits"
%br/ %br/
\ No newline at end of file
...@@ -12,10 +12,10 @@ ...@@ -12,10 +12,10 @@
= diff_line(line, line_new, line_old) = diff_line(line, line_new, line_old)
- if line[0] == "+" - if line[0] == "+"
- line_new += 1 - line_new += 1
- elsif - elsif
- line[0] == "-" - line[0] == "-"
- line_old += 1 - line_old += 1
- else - else
- line_new += 1 - line_new += 1
- line_old += 1 - line_old += 1
...@@ -4,5 +4,5 @@ ...@@ -4,5 +4,5 @@
side.html("#{escape_javascript(render "commits/show")}"); side.html("#{escape_javascript(render "commits/show")}");
$("##{dom_id(@project)}").parent().append(side); $("##{dom_id(@project)}").parent().append(side);
$("##{dom_id(@project)}").addClass("span-14"); $("##{dom_id(@project)}").addClass("span-14");
:plain :plain
$("#notes-list").html("#{escape_javascript(render(:partial => 'notes/notes_list'))}"); $("#notes-list").html("#{escape_javascript(render(:partial => 'notes/notes_list'))}");
...@@ -9,4 +9,4 @@ ...@@ -9,4 +9,4 @@
<div><%= f.submit "Resend confirmation instructions" %></div> <div><%= f.submit "Resend confirmation instructions" %></div>
<% end %> <% end %>
<%= render :partial => "devise/shared/links" %> <%= render :partial => "devise/shared/links" %>
\ No newline at end of file
...@@ -13,4 +13,4 @@ ...@@ -13,4 +13,4 @@
<div><%= f.submit "Change my password" %></div> <div><%= f.submit "Change my password" %></div>
<% end %> <% end %>
<%= render :partial => "devise/shared/links" %> <%= render :partial => "devise/shared/links" %>
\ No newline at end of file
...@@ -22,4 +22,4 @@ ...@@ -22,4 +22,4 @@
<%- resource_class.omniauth_providers.each do |provider| %> <%- resource_class.omniauth_providers.each do |provider| %>
<%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider) %><br /> <%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider) %><br />
<% end -%> <% end -%>
<% end -%> <% end -%>
\ No newline at end of file
...@@ -9,4 +9,4 @@ ...@@ -9,4 +9,4 @@
<div><%= f.submit "Resend unlock instructions" %></div> <div><%= f.submit "Resend unlock instructions" %></div>
<% end %> <% end %>
<%= render :partial => "devise/shared/links" %> <%= render :partial => "devise/shared/links" %>
\ No newline at end of file
%table.round-borders#issues-table %table.round-borders#issues-table
%tr %tr
- if can?(current_user, :admin_issue, @project) && !params[:f] || params[:f] == "0" - if can?(current_user, :admin_issue, @project) && !params[:f] || params[:f] == "0"
%th %th
%th Assignee %th Assignee
%th ID %th ID
%th Title %th Title
......
...@@ -21,10 +21,10 @@ ...@@ -21,10 +21,10 @@
-#notes -#notes
%td %td
- if can? current_user, :write_issue, @project - if can? current_user, :write_issue, @project
= form_for([@project, issue], :remote => true) do |f| = form_for([@project, issue], :remote => true) do |f|
= f.check_box :closed, :onclick => "$(this).parent().submit();" = f.check_box :closed, :onclick => "$(this).parent().submit();"
= hidden_field_tag :status_only, true = hidden_field_tag :status_only, true
- else - else
= check_box_tag "closed", 1, issue.closed, :disabled => true = check_box_tag "closed", 1, issue.closed, :disabled => true
%td %td
- if can?(current_user, :admin_issue, @project) || issue.author == current_user - if can?(current_user, :admin_issue, @project) || issue.author == current_user
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
= form_tag search_project_issues_path(@project), :method => :get, :remote => true, :class => :left, :id => "issue_search_form" do = form_tag search_project_issues_path(@project), :method => :get, :remote => true, :class => :left, :id => "issue_search_form" do
= hidden_field_tag :project_id, @project.id, { :id => 'project_id' } = hidden_field_tag :project_id, @project.id, { :id => 'project_id' }
= search_field_tag :issue_search, nil, { :placeholder => 'Search', :class => 'issue_search' } = search_field_tag :issue_search, nil, { :placeholder => 'Search', :class => 'issue_search' }
.right .right
= form_tag project_issues_path(@project), :method => :get do = form_tag project_issues_path(@project), :method => :get do
.span-2 .span-2
...@@ -44,9 +44,9 @@ ...@@ -44,9 +44,9 @@
} }
}); });
$('.delete-issue').live('ajax:success', function() { $('.delete-issue').live('ajax:success', function() {
$(this).closest('tr').fadeOut(); }); $(this).closest('tr').fadeOut(); });
function setSortable(){ function setSortable(){
$('#issues-table>tbody').sortable({ $('#issues-table>tbody').sortable({
axis: 'y', axis: 'y',
......
...@@ -8,24 +8,24 @@ ...@@ -8,24 +8,24 @@
.span-8 .span-8
- if @issue.closed - if @issue.closed
%center.success Closed %center.success Closed
- else - else
%center.error Open %center.error Open
%table.round-borders %table.round-borders
%tr %tr
%td Title: %td Title:
%td %td
= truncate html_escape(@issue.title) = truncate html_escape(@issue.title)
%tr %tr
%td Project %td Project
%td %td
%strong= @issue.project.name %strong= @issue.project.name
%tr %tr
%td Author: %td Author:
%td %td
= image_tag gravatar_icon(@issue.author.email), :class => "left", :width => 40, :style => "padding:0 5px;" = image_tag gravatar_icon(@issue.author.email), :class => "left", :width => 40, :style => "padding:0 5px;"
= @issue.author.name = @issue.author.name
%tr %tr
%td Assignee: %td Assignee:
%td %td
= image_tag gravatar_icon(@issue.assignee.email), :class => "left", :width => 40, :style => "padding:0 5px;" = image_tag gravatar_icon(@issue.assignee.email), :class => "left", :width => 40, :style => "padding:0 5px;"
= @issue.assignee.name = @issue.assignee.name
...@@ -33,12 +33,11 @@ ...@@ -33,12 +33,11 @@
%td Closed? %td Closed?
%td %td
- if can? current_user, :write_issue, @project - if can? current_user, :write_issue, @project
= form_for([@project, @issue]) do |f| = form_for([@project, @issue]) do |f|
= f.check_box :closed, :onclick => "$(this).parent().submit();" = f.check_box :closed, :onclick => "$(this).parent().submit();"
= hidden_field_tag :status_only, true = hidden_field_tag :status_only, true
- else - else
= check_box_tag "closed", 1, @issue.closed, :disabled => true = check_box_tag "closed", 1, @issue.closed, :disabled => true
.clear .clear
:plain :plain
$("#notes-list").html("#{escape_javascript(render(:partial => 'notes/notes_list'))}"); $("#notes-list").html("#{escape_javascript(render(:partial => 'notes/notes_list'))}");
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
- if @issue.valid? - if @issue.valid?
:plain :plain
$("##{dom_id(@issue)}").fadeOut(); $("##{dom_id(@issue)}").fadeOut();
- else - else
- if @issue.valid? - if @issue.valid?
:plain :plain
$("#edit_issue_dialog").dialog("close"); $("#edit_issue_dialog").dialog("close");
......
...@@ -10,6 +10,6 @@ ...@@ -10,6 +10,6 @@
= render(:partial => 'show', :locals => {:key => key}) = render(:partial => 'show', :locals => {:key => key})
:javascript :javascript
$('.delete-key').live('ajax:success', function() { $('.delete-key').live('ajax:success', function() {
$(this).closest('tr').fadeOut(); }); $(this).closest('tr').fadeOut(); });
...@@ -6,9 +6,9 @@ ...@@ -6,9 +6,9 @@
%h4= text %h4= text
:javascript :javascript
$(function(){ $(function(){
$("#flash_container").slideDown("slow"); $("#flash_container").slideDown("slow");
$("#flash_container").click(function(){ $("#flash_container").click(function(){
$(this).slideUp("slow"); $(this).slideUp("slow");
}); });
setTimeout("hideFlash()",2000); setTimeout("hideFlash()",2000);
}); });
......
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
</div> </div>
</div> </div>
<% if current_user %> <% if current_user %>
<%= javascript_tag do %> <%= javascript_tag do %>
$(function() { $(function() {
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
= stylesheet_link_tag 'blueprint/print', :media => "print" = stylesheet_link_tag 'blueprint/print', :media => "print"
= stylesheet_link_tag 'blueprint/plugins/buttons/screen', :media => "screen, projection" = stylesheet_link_tag 'blueprint/plugins/buttons/screen', :media => "screen, projection"
= stylesheet_link_tag 'blueprint/plugins/link-icons/screen', :media => "screen, projection" = stylesheet_link_tag 'blueprint/plugins/link-icons/screen', :media => "screen, projection"
= stylesheet_link_tag 'jquery_ui/jquery-ui-1.8.16.custom', :media => "screen, projection"
= stylesheet_link_tag "application" = stylesheet_link_tag "application"
= javascript_include_tag "application" = javascript_include_tag "application"
= csrf_meta_tags = csrf_meta_tags
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
= check_box_tag :notify, 1, true = check_box_tag :notify, 1, true
= label_tag :notify, "Notify project team about your note" = label_tag :notify, "Notify project team about your note"
.clear .clear
%br %br
= f.submit 'Add note', :class => "lbutton vm", :id => "submit_note" = f.submit 'Add note', :class => "lbutton vm", :id => "submit_note"
- if controller.action_name == "wall" - if controller.action_name == "wall"
%ul#notes-list= render "notes/notes_list" %ul#notes-list= render "notes/notes_list"
- else - else
%ul#notes-list= render "notes/notes_list" %ul#notes-list= render "notes/notes_list"
%br %br
%br %br
...@@ -9,17 +9,16 @@ ...@@ -9,17 +9,16 @@
= render "notes/form" = render "notes/form"
:javascript :javascript
$('.delete-note').live('ajax:success', function() { $('.delete-note').live('ajax:success', function() {
$(this).closest('li').fadeOut(); }); $(this).closest('li').fadeOut(); });
$("#new_note").live("ajax:before", function(){ $("#new_note").live("ajax:before", function(){
$("#submit_note").attr("disabled", "disabled"); $("#submit_note").attr("disabled", "disabled");
}) })
$("#new_note").live("ajax:complete", function(){ $("#new_note").live("ajax:complete", function(){
$("#submit_note").removeAttr("disabled"); $("#submit_note").removeAttr("disabled");
}) })
- if ["issues", "projects"].include?(controller.controller_name) - if ["issues", "projects"].include?(controller.controller_name)
:javascript :javascript
......
...@@ -7,5 +7,5 @@ ...@@ -7,5 +7,5 @@
:plain :plain
$("#new_note").replaceWith("#{escape_javascript(render('form'))}"); $("#new_note").replaceWith("#{escape_javascript(render('form'))}");
:plain :plain
$("#submit_note").removeAttr("disabled"); $("#submit_note").removeAttr("disabled");
...@@ -10,9 +10,9 @@ ...@@ -10,9 +10,9 @@
%td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"}
%td{:align => "left", :style => "padding: 20px 0 0;"} %td{:align => "left", :style => "padding: 20px 0 0;"}
%h2{:style => "color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} %h2{:style => "color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "}
= link_to project_issue_url(@project, @issue) do = link_to project_issue_url(@project, @issue) do
= "Issue ##{@issue.id.to_s}" = "Issue ##{@issue.id.to_s}"
= truncate(@issue.title, :length => 45) = truncate(@issue.title, :length => 45)
%br %br
%cite{:style => "color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif; "} %cite{:style => "color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif; "}
= @issue.content = @issue.content
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
%td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"}
%td{:align => "left", :style => "padding: 20px 0 0;"} %td{:align => "left", :style => "padding: 20px 0 0;"}
%h2{:style => "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} %h2{:style => "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "}
Hi #{@user.name}! Hi #{@user.name}!
%p{:style => "color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif; "} %p{:style => "color:#767676; font-weight: normal; margin: 0; padding: 0; line-height: 20px; font-size: 12px;font-family: Helvetica, Arial, sans-serif; "}
Administrator created account for you. Now you are a member of company gitlab application. Administrator created account for you. Now you are a member of company gitlab application.
%td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"}
......
...@@ -4,10 +4,10 @@ ...@@ -4,10 +4,10 @@
%td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"}
%td{:align => "left", :style => "padding: 20px 0 0;"} %td{:align => "left", :style => "padding: 20px 0 0;"}
%h2{:style => "color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} %h2{:style => "color:#646464 !important; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "}
New comment - New comment -
= link_to project_issue_url(@project, @issue, :anchor => "note_#{@note.id}") do = link_to project_issue_url(@project, @issue, :anchor => "note_#{@note.id}") do
= "Issue ##{@issue.id.to_s}" = "Issue ##{@issue.id.to_s}"
= truncate(@issue.title, :length => 35) = truncate(@issue.title, :length => 35)
%td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"}
%tr %tr
%td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"}
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
%td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"}
%td{:align => "left", :style => "padding: 20px 0 0;"} %td{:align => "left", :style => "padding: 20px 0 0;"}
%h2{:style => "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "} %h2{:style => "color:#646464; font-weight: bold; margin: 0; padding: 0; line-height: 26px; font-size: 18px; font-family: Helvetica, Arial, sans-serif; "}
New message on New message on
= link_to "Project Wall", wall_project_url(@project, :anchor => "note_#{@note.id}") = link_to "Project Wall", wall_project_url(@project, :anchor => "note_#{@note.id}")
%td{:style => "font-size: 1px; line-height: 1px;", :width => "21"} %td{:style => "font-size: 1px; line-height: 1px;", :width => "21"}
%tr %tr
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
%td %td
= f.text_field :path, :placeholder => "example_project", :disabled => !@project.new_record? = f.text_field :path, :placeholder => "example_project", :disabled => !@project.new_record?
%tr %tr
%td %td
.left= f.label :code .left= f.label :code
%cite.right http://yourserver/ %cite.right http://yourserver/
%td= f.text_field :code, :placeholder => "example" %td= f.text_field :code, :placeholder => "example"
...@@ -39,10 +39,10 @@ ...@@ -39,10 +39,10 @@
= image_tag "ajax-loader.gif", :class => "append-bottom" = image_tag "ajax-loader.gif", :class => "append-bottom"
- if @project.new_record? - if @project.new_record?
%h3.prepend-top Creating project &amp; repository. Please wait for few minutes %h3.prepend-top Creating project &amp; repository. Please wait for few minutes
- else - else
%h3.prepend-top Updating project &amp; repository. Please wait for few minutes %h3.prepend-top Updating project &amp; repository. Please wait for few minutes
:javascript :javascript
$('.new_project, .edit_project').bind('ajax:before', function() { $('.new_project, .edit_project').bind('ajax:before', function() {
$(this).find(".form_content").hide(); $(this).find(".form_content").hide();
$('.ajax_loader').show(); $('.ajax_loader').show();
}); });
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
%td= check_box_tag "read", 1, project.readers.include?(current_user), :disabled => :disabled %td= check_box_tag "read", 1, project.readers.include?(current_user), :disabled => :disabled
%td= check_box_tag "commit", 1, project.writers.include?(current_user), :disabled => :disabled %td= check_box_tag "commit", 1, project.writers.include?(current_user), :disabled => :disabled
%td= check_box_tag "admin", 1, project.admins.include?(current_user), :disabled => :disabled %td= check_box_tag "admin", 1, project.admins.include?(current_user), :disabled => :disabled
%td %td
-if can? current_user, :admin_project, project -if can? current_user, :admin_project, project
= link_to 'Edit', edit_project_path(project), :class => "lbutton positive" = link_to 'Edit', edit_project_path(project), :class => "lbutton positive"
%br %br
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
$(".list").toggle(); $(".list").toggle();
if($(".tile").is(":visible")){ if($(".tile").is(":visible")){
$.cookie('project_view', 'tile', { expires: 14 }); $.cookie('project_view', 'tile', { expires: 14 });
} else { } else {
$.cookie('project_view', 'list', { expires: 14 }); $.cookie('project_view', 'list', { expires: 14 });
} }
} }
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
= image_tag "no_avatar.png", :class => "left", :width => 40, :style => "padding-right:5px;" = image_tag "no_avatar.png", :class => "left", :width => 40, :style => "padding-right:5px;"
%p{:style => "margin-bottom: 3px;"} %p{:style => "margin-bottom: 3px;"}
%strong %strong
= link_to truncate(commit.safe_message, :length => 60), project_commit_path(@project, :id => commit.id) = link_to truncate(commit.safe_message, :length => 60), project_commit_path(@project, :id => commit.id)
%span %span
%span.author %span.author
= commit.author.name.force_encoding("UTF-8") = commit.author.name.force_encoding("UTF-8")
......
...@@ -14,5 +14,5 @@ ...@@ -14,5 +14,5 @@
= render(:partial => 'team_members/show', :locals => {:member => up}) = render(:partial => 'team_members/show', :locals => {:member => up})
:javascript :javascript
$('.delete-team-member').live('ajax:success', function() { $('.delete-team-member').live('ajax:success', function() {
$(this).closest('tr').fadeOut(); }); $(this).closest('tr').fadeOut(); });
...@@ -40,7 +40,7 @@ eos ...@@ -40,7 +40,7 @@ eos
<p> <p>
Be careful! <br/> Be careful! <br/>
Project cant be recovered after destroy.</p> Project cant be recovered after destroy.</p>
<%= link_to 'Destroy', @project, <%= link_to 'Destroy', @project,
:confirm => 'Are you sure?', :method => :delete, :confirm => 'Are you sure?', :method => :delete,
:class => "left button negative span-6", :style => "text-align:center" %> :class => "left button negative span-6", :style => "text-align:center" %>
<div class="clear"></div> <div class="clear"></div>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
= render "tile" = render "tile"
%div{:class => "list", :style => view_mode_style("list")} %div{:class => "list", :style => view_mode_style("list")}
= render "list" = render "list"
- else - else
%center.prepend-top %center.prepend-top
%h2 %h2
%cite Nothing here %cite Nothing here
...@@ -21,3 +21,8 @@ ...@@ -21,3 +21,8 @@
%h3 Talk %h3 Talk
=render "projects/recent_messages" =render "projects/recent_messages"
:javascript
function updateDashboard(){
$('#content-container').load("#{escape_javascript(project_path(@project))} #content-container>*");
}
setInterval("updateDashboard()", 300000);
:plain :plain
$("#tree-holder table").hide("slide", { direction: "left" }, 150, function(){ $("#tree-holder table").hide("slide", { direction: "left" }, 150, function(){
$("#tree-holder").html("#{escape_javascript(render(:partial => "tree", :locals => {:repo => @repo, :commit => @commit, :tree => @tree}))}"); $("#tree-holder").html("#{escape_javascript(render(:partial => "tree", :locals => {:repo => @repo, :commit => @commit, :tree => @tree}))}");
$("#tree-holder table").show("slide", { direction: "right" }, 150); $("#tree-holder table").show("slide", { direction: "right" }, 150);
}); });
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
%hr %hr
= render "notes/notes" = render "notes/notes"
:javascript :javascript
$(function(){ $(function(){
$("#note_note").live("click", function(){ $("#note_note").live("click", function(){
$(this).css("height", "100px"); $(this).css("height", "100px");
......
:plain :plain
$("#notes-list").html("#{escape_javascript(render(:partial => 'notes/notes_list'))}"); $("#notes-list").html("#{escape_javascript(render(:partial => 'notes/notes_list'))}");
...@@ -17,6 +17,6 @@ ...@@ -17,6 +17,6 @@
= f.label :content, "Code" = f.label :content, "Code"
%br %br
= f.text_area :content, :style => "height:240px;width:932px;" = f.text_area :content, :style => "height:240px;width:932px;"
.actions.prepend-top .actions.prepend-top
= f.submit 'Save', :class => "lbutton vm" = f.submit 'Save', :class => "lbutton vm"
...@@ -10,5 +10,5 @@ ...@@ -10,5 +10,5 @@
%th %th
= render @snippets = render @snippets
:javascript :javascript
$('.delete-snippet').live('ajax:success', function() { $('.delete-snippet').live('ajax:success', function() {
$(this).closest('tr').fadeOut(); }); $(this).closest('tr').fadeOut(); });
...@@ -7,11 +7,11 @@ ...@@ -7,11 +7,11 @@
%td= truncate user.email, :lenght => 16 %td= truncate user.email, :lenght => 16
- if can? current_user, :admin_project, @project - if can? current_user, :admin_project, @project
= form_for(member, :as => :team_member, :url => project_team_member_path(@project, member)) do |f| = form_for(member, :as => :team_member, :url => project_team_member_path(@project, member)) do |f|
%td= f.check_box :read, :onclick => "$(this.form).submit();" %td= f.check_box :read, :onclick => "$(this.form).submit();"
%td= f.check_box :write, :onclick => "$(this.form).submit();" %td= f.check_box :write, :onclick => "$(this.form).submit();"
%td= f.check_box :admin, :onclick => "$(this.form).submit();" %td= f.check_box :admin, :onclick => "$(this.form).submit();"
- else - else
%td= check_box_tag "read", 1, member.read, :disabled => :disabled %td= check_box_tag "read", 1, member.read, :disabled => :disabled
%td= check_box_tag "commit", 1, member.write, :disabled => :disabled %td= check_box_tag "commit", 1, member.write, :disabled => :disabled
%td= check_box_tag "admin", 1, member.admin, :disabled => :disabled %td= check_box_tag "admin", 1, member.admin, :disabled => :disabled
......
...@@ -25,4 +25,3 @@ ...@@ -25,4 +25,3 @@
%b Twitter: %b Twitter:
= user.twitter = user.twitter
...@@ -44,5 +44,8 @@ module Gitlab ...@@ -44,5 +44,8 @@ module Gitlab
# Version of your assets, change this if you want to expire all your assets # Version of your assets, change this if you want to expire all your assets
config.assets.version = '1.0' config.assets.version = '1.0'
# Extend assets path
config.assets.paths << Rails.root.join('vendor', 'assets', 'images', 'jquery-ui')
end end
end end
...@@ -58,7 +58,6 @@ Gitlab::Application.configure do ...@@ -58,7 +58,6 @@ Gitlab::Application.configure do
# Send deprecation notices to registered listeners # Send deprecation notices to registered listeners
config.active_support.deprecation = :notify config.active_support.deprecation = :notify
config.action_mailer.delivery_method = :sendmail config.action_mailer.delivery_method = :sendmail
# Defaults to: # Defaults to:
# # config.action_mailer.sendmail_settings = { # # config.action_mailer.sendmail_settings = {
......
...@@ -7,6 +7,6 @@ Grit::Blob.class_eval do ...@@ -7,6 +7,6 @@ Grit::Blob.class_eval do
include Utils::Colorize include Utils::Colorize
end end
Grit::Commit.class_eval do Grit::Commit.class_eval do
include CommitExt include CommitExt
end end
Gitlab::Application.routes.draw do Gitlab::Application.routes.draw do
namespace :admin do namespace :admin do
resources :users resources :users
resources :projects resources :projects
resources :team_members resources :team_members
...@@ -10,7 +10,7 @@ Gitlab::Application.routes.draw do ...@@ -10,7 +10,7 @@ Gitlab::Application.routes.draw do
root :to => "users#index" root :to => "users#index"
end end
get "errors/gitosis" get "errors/gitosis"
get "profile/password", :to => "profile#password" get "profile/password", :to => "profile#password"
put "profile/password", :to => "profile#password_update" put "profile/password", :to => "profile#password_update"
put "profile/edit", :to => "profile#social_update" put "profile/edit", :to => "profile#social_update"
...@@ -21,8 +21,8 @@ Gitlab::Application.routes.draw do ...@@ -21,8 +21,8 @@ Gitlab::Application.routes.draw do
resources :keys resources :keys
devise_for :users devise_for :users
resources :projects, :except => [:new, :create, :index], :path => "/" do resources :projects, :except => [:new, :create, :index], :path => "/" do
member do member do
get "tree" get "tree"
get "blob" get "blob"
get "team" get "team"
...@@ -32,7 +32,7 @@ Gitlab::Application.routes.draw do ...@@ -32,7 +32,7 @@ Gitlab::Application.routes.draw do
get "tree/:commit_id" => "projects#tree" get "tree/:commit_id" => "projects#tree"
get "tree/:commit_id/:path" => "projects#tree", get "tree/:commit_id/:path" => "projects#tree",
:as => :tree_file, :as => :tree_file,
:constraints => { :constraints => {
:id => /[a-zA-Z0-9_\-]+/, :id => /[a-zA-Z0-9_\-]+/,
:commit_id => /[a-zA-Z0-9]+/, :commit_id => /[a-zA-Z0-9]+/,
:path => /.*/ :path => /.*/
......
...@@ -11,7 +11,6 @@ class DeviseCreateUsers < ActiveRecord::Migration ...@@ -11,7 +11,6 @@ class DeviseCreateUsers < ActiveRecord::Migration
# t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
# t.token_authenticatable # t.token_authenticatable
t.timestamps t.timestamps
end end
......
...@@ -17,7 +17,7 @@ module Color ...@@ -17,7 +17,7 @@ module Color
def command(string) def command(string)
`#{string}` `#{string}`
if $?.to_i > 0 if $?.to_i > 0
puts red " == #{string} - FAIL" puts red " == #{string} - FAIL"
puts red " == Error during configure" puts red " == Error during configure"
exit exit
......
module CommitExt module CommitExt
def safe_message def safe_message
message.encode("UTF-8", message.encode("UTF-8",
:invalid => :replace, :invalid => :replace,
:undef => :replace, :undef => :replace,
:universal_newline => true, :universal_newline => true,
:replace => "") :replace => "")
rescue rescue
"-- invalid encoding for commit message" "-- invalid encoding for commit message"
end end
end end
...@@ -33,7 +33,7 @@ class FileSizeValidator < ActiveModel::EachValidator ...@@ -33,7 +33,7 @@ class FileSizeValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value) def validate_each(record, attribute, value)
raise(ArgumentError, "A CarrierWave::Uploader::Base object was expected") unless value.kind_of? CarrierWave::Uploader::Base raise(ArgumentError, "A CarrierWave::Uploader::Base object was expected") unless value.kind_of? CarrierWave::Uploader::Base
value = (options[:tokenizer] || DEFAULT_TOKENIZER).call(value) if value.kind_of?(String) value = (options[:tokenizer] || DEFAULT_TOKENIZER).call(value) if value.kind_of?(String)
CHECKS.each do |key, validity_check| CHECKS.each do |key, validity_check|
...@@ -53,7 +53,7 @@ class FileSizeValidator < ActiveModel::EachValidator ...@@ -53,7 +53,7 @@ class FileSizeValidator < ActiveModel::EachValidator
record.errors.add(attribute, MESSAGES[key], errors_options) record.errors.add(attribute, MESSAGES[key], errors_options)
end end
end end
def help def help
Helper.instance Helper.instance
end end
......
module Utils module Utils
module FileHelper module FileHelper
def binary?(string) def binary?(string)
string.each_byte do |x| string.each_byte do |x|
x.nonzero? or return true x.nonzero? or return true
end end
false false
end end
......
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
text-decoration: none; text-decoration: none;
} }
#page { #page {
background-color: #f0f0f0; background-color: #f0f0f0;
width: 750px; width: 750px;
...@@ -57,7 +56,6 @@ ...@@ -57,7 +56,6 @@
padding-right: 30px; padding-right: 30px;
} }
#header { #header {
background-image: url("/assets/rails.png"); background-image: url("/assets/rails.png");
background-repeat: no-repeat; background-repeat: no-repeat;
...@@ -71,7 +69,6 @@ ...@@ -71,7 +69,6 @@
font-size: 16px; font-size: 16px;
} }
#about h3 { #about h3 {
margin: 0; margin: 0;
margin-bottom: 10px; margin-bottom: 10px;
...@@ -112,7 +109,6 @@ ...@@ -112,7 +109,6 @@
padding: 10px; padding: 10px;
} }
#getting-started { #getting-started {
border-top: 1px solid #ccc; border-top: 1px solid #ccc;
margin-top: 25px; margin-top: 25px;
...@@ -149,7 +145,6 @@ ...@@ -149,7 +145,6 @@
font-size: 13px; font-size: 13px;
} }
#sidebar ul { #sidebar ul {
margin-left: 0; margin-left: 0;
padding-left: 0; padding-left: 0;
......
class Factory class Factory
@factories = {} @factories = {}
class << self class << self
def add(name, klass, &block) def add(name, klass, &block)
@factories[name] = [klass, block] @factories[name] = [klass, block]
end end
...@@ -13,10 +13,10 @@ class Factory ...@@ -13,10 +13,10 @@ class Factory
def new(name, opts) def new(name, opts)
factory = @factories[name] factory = @factories[name]
factory[0].new.tap do |obj| factory[0].new.tap do |obj|
factory[1].call(obj) factory[1].call(obj)
end.tap do |obj| end.tap do |obj|
opts.each do |k, opt| opts.each do |k, opt|
obj.send("#{k}=", opt) obj.send("#{k}=", opt)
end end
end end
end end
......
...@@ -14,7 +14,7 @@ describe Issue do ...@@ -14,7 +14,7 @@ describe Issue do
it { should validate_presence_of(:assignee_id) } it { should validate_presence_of(:assignee_id) }
end end
describe "Scope" do describe "Scope" do
it { Issue.should respond_to :closed } it { Issue.should respond_to :closed }
it { Issue.should respond_to :opened } it { Issue.should respond_to :opened }
end end
......
...@@ -10,7 +10,7 @@ describe Key do ...@@ -10,7 +10,7 @@ describe Key do
it { should validate_presence_of(:key) } it { should validate_presence_of(:key) }
end end
describe "Methods" do describe "Methods" do
it { should respond_to :projects } it { should respond_to :projects }
end end
......
...@@ -13,8 +13,8 @@ describe Note do ...@@ -13,8 +13,8 @@ describe Note do
it { Factory.create(:note, it { Factory.create(:note,
:project => Factory.create(:project)).should be_valid } :project => Factory.create(:project)).should be_valid }
describe :authorization do describe :authorization do
before do before do
@p1 = Factory :project @p1 = Factory :project
@p2 = Factory :project, :code => "alien", :path => "legit_1" @p2 = Factory :project, :code => "alien", :path => "legit_1"
@u1 = Factory :user @u1 = Factory :user
...@@ -24,10 +24,10 @@ describe Note do ...@@ -24,10 +24,10 @@ describe Note do
@abilities << Ability @abilities << Ability
end end
describe :read do describe :read do
before do before do
@p1.users_projects.create(:user => @u1, :read => false) @p1.users_projects.create(:user => @u1, :read => false)
@p1.users_projects.create(:user => @u2, :read => true) @p1.users_projects.create(:user => @u2, :read => true)
@p2.users_projects.create(:user => @u3, :read => true) @p2.users_projects.create(:user => @u3, :read => true)
end end
...@@ -36,11 +36,11 @@ describe Note do ...@@ -36,11 +36,11 @@ describe Note do
it { @abilities.allowed?(@u3, :read_note, @p1).should be_false } it { @abilities.allowed?(@u3, :read_note, @p1).should be_false }
end end
describe :write do describe :write do
before do before do
@p1.users_projects.create(:user => @u1, :write => false) @p1.users_projects.create(:user => @u1, :write => false)
@p1.users_projects.create(:user => @u2, :write => true) @p1.users_projects.create(:user => @u2, :write => true)
@p2.users_projects.create(:user => @u3, :write => true) @p2.users_projects.create(:user => @u3, :write => true)
end end
it { @abilities.allowed?(@u1, :write_note, @p1).should be_false } it { @abilities.allowed?(@u1, :write_note, @p1).should be_false }
...@@ -48,11 +48,11 @@ describe Note do ...@@ -48,11 +48,11 @@ describe Note do
it { @abilities.allowed?(@u3, :write_note, @p1).should be_false } it { @abilities.allowed?(@u3, :write_note, @p1).should be_false }
end end
describe :admin do describe :admin do
before do before do
@p1.users_projects.create(:user => @u1, :admin => false) @p1.users_projects.create(:user => @u1, :admin => false)
@p1.users_projects.create(:user => @u2, :admin => true) @p1.users_projects.create(:user => @u2, :admin => true)
@p2.users_projects.create(:user => @u3, :admin => true) @p2.users_projects.create(:user => @u3, :admin => true)
end end
it { @abilities.allowed?(@u1, :admin_note, @p1).should be_false } it { @abilities.allowed?(@u1, :admin_note, @p1).should be_false }
......
require 'spec_helper' require 'spec_helper'
describe Project do describe Project do
describe :authorization do describe :authorization do
before do before do
@p1 = Factory :project @p1 = Factory :project
@u1 = Factory :user @u1 = Factory :user
@u2 = Factory :user @u2 = Factory :user
...@@ -10,30 +10,30 @@ describe Project do ...@@ -10,30 +10,30 @@ describe Project do
@abilities << Ability @abilities << Ability
end end
describe :read do describe :read do
before do before do
@p1.users_projects.create(:project => @p1, :user => @u1, :read => false) @p1.users_projects.create(:project => @p1, :user => @u1, :read => false)
@p1.users_projects.create(:project => @p1, :user => @u2, :read => true) @p1.users_projects.create(:project => @p1, :user => @u2, :read => true)
end end
it { @abilities.allowed?(@u1, :read_project, @p1).should be_false } it { @abilities.allowed?(@u1, :read_project, @p1).should be_false }
it { @abilities.allowed?(@u2, :read_project, @p1).should be_true } it { @abilities.allowed?(@u2, :read_project, @p1).should be_true }
end end
describe :write do describe :write do
before do before do
@p1.users_projects.create(:project => @p1, :user => @u1, :write => false) @p1.users_projects.create(:project => @p1, :user => @u1, :write => false)
@p1.users_projects.create(:project => @p1, :user => @u2, :write => true) @p1.users_projects.create(:project => @p1, :user => @u2, :write => true)
end end
it { @abilities.allowed?(@u1, :write_project, @p1).should be_false } it { @abilities.allowed?(@u1, :write_project, @p1).should be_false }
it { @abilities.allowed?(@u2, :write_project, @p1).should be_true } it { @abilities.allowed?(@u2, :write_project, @p1).should be_true }
end end
describe :admin do describe :admin do
before do before do
@p1.users_projects.create(:project => @p1, :user => @u1, :admin => false) @p1.users_projects.create(:project => @p1, :user => @u1, :admin => false)
@p1.users_projects.create(:project => @p1, :user => @u2, :admin => true) @p1.users_projects.create(:project => @p1, :user => @u2, :admin => true)
end end
it { @abilities.allowed?(@u1, :admin_project, @p1).should be_false } it { @abilities.allowed?(@u1, :admin_project, @p1).should be_false }
......
...@@ -40,20 +40,20 @@ describe Project do ...@@ -40,20 +40,20 @@ describe Project do
should_not allow_value("gitosis-admin").for(:path) should_not allow_value("gitosis-admin").for(:path)
end end
it "should return valid url to repo" do it "should return valid url to repo" do
project = Project.new(:path => "somewhere") project = Project.new(:path => "somewhere")
project.url_to_repo.should == "git@localhost:somewhere.git" project.url_to_repo.should == "git@localhost:somewhere.git"
end end
it "should return path to repo" do it "should return path to repo" do
project = Project.new(:path => "somewhere") project = Project.new(:path => "somewhere")
project.path_to_repo.should == File.join(Rails.root, "tmp", "tests", "somewhere") project.path_to_repo.should == File.join(Rails.root, "tmp", "tests", "somewhere")
end end
describe :valid_repo? do describe :valid_repo? do
it "should be valid repo" do it "should be valid repo" do
project = Factory :project project = Factory :project
project.valid_repo?.should be_true project.valid_repo?.should be_true
end end
it "should be invalid repo" do it "should be invalid repo" do
...@@ -62,43 +62,43 @@ describe Project do ...@@ -62,43 +62,43 @@ describe Project do
end end
end end
describe "Git methods" do describe "Git methods" do
let(:project) { Factory :project } let(:project) { Factory :project }
describe :repo do describe :repo do
it "should return valid repo" do it "should return valid repo" do
project.repo.should be_kind_of(Grit::Repo) project.repo.should be_kind_of(Grit::Repo)
end end
it "should return nil" do it "should return nil" do
lambda { Project.new(:path => "invalid").repo }.should raise_error(Grit::NoSuchPathError) lambda { Project.new(:path => "invalid").repo }.should raise_error(Grit::NoSuchPathError)
end end
it "should return nil" do it "should return nil" do
lambda { Project.new.repo }.should raise_error(TypeError) lambda { Project.new.repo }.should raise_error(TypeError)
end end
end end
describe :commit do describe :commit do
it "should return first head commit if without params" do it "should return first head commit if without params" do
project.commit.id.should == project.repo.commits.first.id project.commit.id.should == project.repo.commits.first.id
end end
it "should return valid commit" do it "should return valid commit" do
project.commit(ValidCommit::ID).should be_valid_commit project.commit(ValidCommit::ID).should be_valid_commit
end end
it "should return nil" do it "should return nil" do
project.commit("+123_4532530XYZ").should be_nil project.commit("+123_4532530XYZ").should be_nil
end end
end end
describe :tree do describe :tree do
before do before do
@commit = project.commit(ValidCommit::ID) @commit = project.commit(ValidCommit::ID)
end end
it "should raise error w/o arguments" do it "should raise error w/o arguments" do
lambda { project.tree }.should raise_error lambda { project.tree }.should raise_error
end end
......
...@@ -14,7 +14,7 @@ describe User do ...@@ -14,7 +14,7 @@ describe User do
it { should respond_to(:name) } it { should respond_to(:name) }
end end
it "should return valid identifier" do it "should return valid identifier" do
user = User.new(:email => "test@mail.com") user = User.new(:email => "test@mail.com")
user.identifier.should == "test_mail.com" user.identifier.should == "test_mail.com"
end end
......
...@@ -11,7 +11,7 @@ describe UsersProject do ...@@ -11,7 +11,7 @@ describe UsersProject do
it { should validate_presence_of(:project_id) } it { should validate_presence_of(:project_id) }
end end
describe "Delegate methods" do describe "Delegate methods" do
it { should respond_to(:user_name) } it { should respond_to(:user_name) }
it { should respond_to(:user_email) } it { should respond_to(:user_email) }
end end
......
# Stubbing Project <-> gitosis path # Stubbing Project <-> gitosis path
# create project using Factory only # create project using Factory only
class Project class Project
def update_gitosis_project def update_gitosis_project
true true
end end
...@@ -9,12 +9,12 @@ class Project ...@@ -9,12 +9,12 @@ class Project
true true
end end
def path_to_repo def path_to_repo
File.join(Rails.root, "tmp", "tests", path) File.join(Rails.root, "tmp", "tests", path)
end end
end end
class Key class Key
def update_gitosis def update_gitosis
true true
end end
......
require 'spec_helper' require 'spec_helper'
describe "Admin::Projects" do describe "Admin::Projects" do
before do before do
@project = Factory :project, @project = Factory :project,
:name => "LeGiT", :name => "LeGiT",
:code => "LGT" :code => "LGT"
...@@ -9,7 +9,7 @@ describe "Admin::Projects" do ...@@ -9,7 +9,7 @@ describe "Admin::Projects" do
end end
describe "GET /admin/projects" do describe "GET /admin/projects" do
before do before do
visit admin_projects_path visit admin_projects_path
end end
...@@ -17,49 +17,49 @@ describe "Admin::Projects" do ...@@ -17,49 +17,49 @@ describe "Admin::Projects" do
current_path.should == admin_projects_path current_path.should == admin_projects_path
end end
it "should have projects list" do it "should have projects list" do
page.should have_content(@project.code) page.should have_content(@project.code)
page.should have_content(@project.name) page.should have_content(@project.name)
end end
end end
describe "GET /admin/projects/:id" do describe "GET /admin/projects/:id" do
before do before do
visit admin_projects_path visit admin_projects_path
click_link "Show" click_link "Show"
end end
it "should have project info" do it "should have project info" do
page.should have_content(@project.code) page.should have_content(@project.code)
page.should have_content(@project.name) page.should have_content(@project.name)
end end
end end
describe "GET /admin/projects/:id/edit" do describe "GET /admin/projects/:id/edit" do
before do before do
visit admin_projects_path visit admin_projects_path
click_link "edit_project_#{@project.id}" click_link "edit_project_#{@project.id}"
end end
it "should have project edit page" do it "should have project edit page" do
page.should have_content("Name") page.should have_content("Name")
page.should have_content("Code") page.should have_content("Code")
end end
describe "Update project" do describe "Update project" do
before do before do
fill_in "project_name", :with => "Big Bang" fill_in "project_name", :with => "Big Bang"
fill_in "project_code", :with => "BB1" fill_in "project_code", :with => "BB1"
click_button "Save" click_button "Save"
@project.reload @project.reload
end end
it "should show page with new data" do it "should show page with new data" do
page.should have_content("BB1") page.should have_content("BB1")
page.should have_content("Big Bang") page.should have_content("Big Bang")
end end
it "should change project entry" do it "should change project entry" do
@project.name.should == "Big Bang" @project.name.should == "Big Bang"
@project.code.should == "BB1" @project.code.should == "BB1"
end end
...@@ -67,24 +67,24 @@ describe "Admin::Projects" do ...@@ -67,24 +67,24 @@ describe "Admin::Projects" do
end end
describe "GET /admin/projects/new" do describe "GET /admin/projects/new" do
before do before do
visit admin_projects_path visit admin_projects_path
click_link "New Project" click_link "New Project"
end end
it "should be correct path" do it "should be correct path" do
current_path.should == new_admin_project_path current_path.should == new_admin_project_path
end end
it "should have labels for new project" do it "should have labels for new project" do
page.should have_content("Name") page.should have_content("Name")
page.should have_content("Path") page.should have_content("Path")
page.should have_content("Description") page.should have_content("Description")
end end
end end
describe "POST /admin/projects" do describe "POST /admin/projects" do
before do before do
visit new_admin_project_path visit new_admin_project_path
fill_in 'Name', :with => 'NewProject' fill_in 'Name', :with => 'NewProject'
fill_in 'Code', :with => 'NPR' fill_in 'Code', :with => 'NPR'
......
...@@ -4,7 +4,7 @@ describe "Admin::Users" do ...@@ -4,7 +4,7 @@ describe "Admin::Users" do
before { login_as :admin } before { login_as :admin }
describe "GET /admin/users" do describe "GET /admin/users" do
before do before do
visit admin_users_path visit admin_users_path
end end
...@@ -12,14 +12,14 @@ describe "Admin::Users" do ...@@ -12,14 +12,14 @@ describe "Admin::Users" do
current_path.should == admin_users_path current_path.should == admin_users_path
end end
it "should have users list" do it "should have users list" do
page.should have_content(@user.email) page.should have_content(@user.email)
page.should have_content(@user.name) page.should have_content(@user.name)
end end
end end
describe "GET /admin/users/new" do describe "GET /admin/users/new" do
before do before do
@password = "123ABC" @password = "123ABC"
visit new_admin_user_path visit new_admin_user_path
fill_in "user_name", :with => "Big Bang" fill_in "user_name", :with => "Big Bang"
...@@ -28,23 +28,23 @@ describe "Admin::Users" do ...@@ -28,23 +28,23 @@ describe "Admin::Users" do
fill_in "user_password_confirmation", :with => @password fill_in "user_password_confirmation", :with => @password
end end
it "should create new user" do it "should create new user" do
expect { click_button "Save" }.to change {User.count}.by(1) expect { click_button "Save" }.to change {User.count}.by(1)
end end
it "should create user with valid data" do it "should create user with valid data" do
click_button "Save" click_button "Save"
user = User.last user = User.last
user.name.should == "Big Bang" user.name.should == "Big Bang"
user.email.should == "bigbang@mail.com" user.email.should == "bigbang@mail.com"
end end
it "should call send mail" do it "should call send mail" do
Notify.should_receive(:new_user_email).and_return(stub(:deliver => true)) Notify.should_receive(:new_user_email).and_return(stub(:deliver => true))
click_button "Save" click_button "Save"
end end
it "should send valid email to user with email & password" do it "should send valid email to user with email & password" do
click_button "Save" click_button "Save"
user = User.last user = User.last
email = ActionMailer::Base.deliveries.last email = ActionMailer::Base.deliveries.last
...@@ -54,45 +54,45 @@ describe "Admin::Users" do ...@@ -54,45 +54,45 @@ describe "Admin::Users" do
end end
end end
describe "GET /admin/users/:id" do describe "GET /admin/users/:id" do
before do before do
visit admin_users_path visit admin_users_path
click_link "Show" click_link "Show"
end end
it "should have user info" do it "should have user info" do
page.should have_content(@user.email) page.should have_content(@user.email)
page.should have_content(@user.name) page.should have_content(@user.name)
page.should have_content(@user.is_admin?) page.should have_content(@user.is_admin?)
end end
end end
describe "GET /admin/users/:id/edit" do describe "GET /admin/users/:id/edit" do
before do before do
@simple_user = Factory :user @simple_user = Factory :user
visit admin_users_path visit admin_users_path
click_link "edit_user_#{@simple_user.id}" click_link "edit_user_#{@simple_user.id}"
end end
it "should have user edit page" do it "should have user edit page" do
page.should have_content("Name") page.should have_content("Name")
page.should have_content("Password") page.should have_content("Password")
end end
describe "Update user" do describe "Update user" do
before do before do
fill_in "user_name", :with => "Big Bang" fill_in "user_name", :with => "Big Bang"
fill_in "user_email", :with => "bigbang@mail.com" fill_in "user_email", :with => "bigbang@mail.com"
check "user_admin" check "user_admin"
click_button "Save" click_button "Save"
end end
it "should show page with new data" do it "should show page with new data" do
page.should have_content("bigbang@mail.com") page.should have_content("bigbang@mail.com")
page.should have_content("Big Bang") page.should have_content("Big Bang")
end end
it "should change user entry" do it "should change user entry" do
@simple_user.reload @simple_user.reload
@simple_user.name.should == "Big Bang" @simple_user.name.should == "Big Bang"
@simple_user.is_admin?.should be_true @simple_user.is_admin?.should be_true
......
require 'spec_helper' require 'spec_helper'
describe "Admin::Projects" do describe "Admin::Projects" do
describe "GET /admin/projects" do describe "GET /admin/projects" do
it { admin_projects_path.should be_allowed_for :admin } it { admin_projects_path.should be_allowed_for :admin }
it { admin_projects_path.should be_denied_for :user } it { admin_projects_path.should be_denied_for :user }
it { admin_projects_path.should be_denied_for :visitor } it { admin_projects_path.should be_denied_for :visitor }
end end
describe "GET /admin/users" do describe "GET /admin/users" do
it { admin_users_path.should be_allowed_for :admin } it { admin_users_path.should be_allowed_for :admin }
it { admin_users_path.should be_denied_for :user } it { admin_users_path.should be_denied_for :user }
it { admin_users_path.should be_denied_for :visitor } it { admin_users_path.should be_denied_for :visitor }
end end
describe "GET /admin/team_members" do describe "GET /admin/team_members" do
it { admin_team_members_path.should be_allowed_for :admin } it { admin_team_members_path.should be_allowed_for :admin }
it { admin_team_members_path.should be_denied_for :user } it { admin_team_members_path.should be_denied_for :user }
it { admin_team_members_path.should be_denied_for :visitor } it { admin_team_members_path.should be_denied_for :visitor }
end end
describe "GET /admin/emails" do describe "GET /admin/emails" do
it { admin_emails_path.should be_allowed_for :admin } it { admin_emails_path.should be_allowed_for :admin }
it { admin_emails_path.should be_denied_for :user } it { admin_emails_path.should be_denied_for :user }
it { admin_emails_path.should be_denied_for :visitor } it { admin_emails_path.should be_denied_for :visitor }
......
...@@ -4,13 +4,13 @@ describe "Issues" do ...@@ -4,13 +4,13 @@ describe "Issues" do
let(:project) { Factory :project } let(:project) { Factory :project }
let!(:commit) { project.repo.commits.first } let!(:commit) { project.repo.commits.first }
before do before do
login_as :user login_as :user
project.add_access(@user, :read, :write) project.add_access(@user, :read, :write)
end end
describe "add new note", :js => true do describe "add new note", :js => true do
before do before do
visit project_commit_path(project, commit) visit project_commit_path(project, commit)
click_link "Comments" # notes tab click_link "Comments" # notes tab
fill_in "note_note", :with => "I commented this commit" fill_in "note_note", :with => "I commented this commit"
......
...@@ -3,13 +3,13 @@ require 'spec_helper' ...@@ -3,13 +3,13 @@ require 'spec_helper'
describe "Commits" do describe "Commits" do
let(:project) { Factory :project } let(:project) { Factory :project }
let!(:commit) { project.repo.commits.first } let!(:commit) { project.repo.commits.first }
before do before do
login_as :user login_as :user
project.add_access(@user, :read) project.add_access(@user, :read)
end end
describe "GET /commits" do describe "GET /commits" do
before do before do
visit project_commits_path(project) visit project_commits_path(project)
end end
...@@ -17,22 +17,22 @@ describe "Commits" do ...@@ -17,22 +17,22 @@ describe "Commits" do
current_path.should == project_commits_path(project) current_path.should == project_commits_path(project)
end end
it "should have project name" do it "should have project name" do
page.should have_content(project.name) page.should have_content(project.name)
end end
it "should list commits" do it "should list commits" do
page.should have_content(commit.author) page.should have_content(commit.author)
page.should have_content(commit.message) page.should have_content(commit.message)
end end
end end
describe "GET /commits/:id" do describe "GET /commits/:id" do
before do before do
visit project_commit_path(project, commit) visit project_commit_path(project, commit)
end end
it "should have valid path" do it "should have valid path" do
current_path.should == project_commit_path(project, commit) current_path.should == project_commit_path(project, commit)
end end
end end
......
...@@ -3,7 +3,7 @@ require 'spec_helper' ...@@ -3,7 +3,7 @@ require 'spec_helper'
describe "Issues" do describe "Issues" do
let(:project) { Factory :project } let(:project) { Factory :project }
before do before do
login_as :user login_as :user
project.add_access(@user, :read, :write) project.add_access(@user, :read, :write)
...@@ -13,8 +13,8 @@ describe "Issues" do ...@@ -13,8 +13,8 @@ describe "Issues" do
:project => project :project => project
end end
describe "add new note", :js => true do describe "add new note", :js => true do
before do before do
visit project_issue_path(project, @issue) visit project_issue_path(project, @issue)
fill_in "note_note", :with => "I commented this issue" fill_in "note_note", :with => "I commented this issue"
click_button "Add note" click_button "Add note"
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment