Commit a767a86c authored by gitlabhq's avatar gitlabhq

Merge branch 'dev'

parents ae47d692 5c9cb850
...@@ -19,6 +19,7 @@ gem "pygments.rb", "0.2.3" ...@@ -19,6 +19,7 @@ gem "pygments.rb", "0.2.3"
gem "thin" gem "thin"
gem "git" gem "git"
gem "acts_as_list" gem "acts_as_list"
gem 'rdiscount'
group :assets do group :assets do
gem 'sass-rails', " ~> 3.1.0" gem 'sass-rails', " ~> 3.1.0"
...@@ -26,7 +27,8 @@ group :assets do ...@@ -26,7 +27,8 @@ group :assets do
gem 'uglifier' gem 'uglifier'
end end
group :development do group :development do
gem 'letter_opener'
gem 'rails-footnotes', '>= 3.7.5.rc4' gem 'rails-footnotes', '>= 3.7.5.rc4'
gem 'annotate', :git => 'git://github.com/ctran/annotate_models.git' gem 'annotate', :git => 'git://github.com/ctran/annotate_models.git'
end end
......
...@@ -119,6 +119,8 @@ GEM ...@@ -119,6 +119,8 @@ GEM
rails (>= 3.0.0) rails (>= 3.0.0)
launchy (2.0.5) launchy (2.0.5)
addressable (~> 2.2.6) addressable (~> 2.2.6)
letter_opener (0.0.2)
launchy
libv8 (3.3.10.2) libv8 (3.3.10.2)
linecache19 (0.5.12) linecache19 (0.5.12)
ruby_core_source (>= 0.1.4) ruby_core_source (>= 0.1.4)
...@@ -161,6 +163,7 @@ GEM ...@@ -161,6 +163,7 @@ GEM
rdoc (~> 3.4) rdoc (~> 3.4)
thor (~> 0.14.6) thor (~> 0.14.6)
rake (0.9.2) rake (0.9.2)
rdiscount (1.6.8)
rdoc (3.9.4) rdoc (3.9.4)
rspec (2.6.0) rspec (2.6.0)
rspec-core (~> 2.6.0) rspec-core (~> 2.6.0)
...@@ -261,9 +264,11 @@ DEPENDENCIES ...@@ -261,9 +264,11 @@ DEPENDENCIES
jquery-rails jquery-rails
kaminari kaminari
launchy launchy
letter_opener
pygments.rb (= 0.2.3) pygments.rb (= 0.2.3)
rails (= 3.1.0) rails (= 3.1.0)
rails-footnotes (>= 3.7.5.rc4) rails-footnotes (>= 3.7.5.rc4)
rdiscount
rspec-rails rspec-rails
ruby-debug19 ruby-debug19
sass-rails (~> 3.1.0) sass-rails (~> 3.1.0)
......
[Dolphin] [Dolphin]
ShowPreview=true ShowPreview=true
Timestamp=2011,9,14,20,34,18 Timestamp=2011,10,28,13,16,25
Version=2 Version=2
This diff is collapsed.
...@@ -102,54 +102,6 @@ table.round-borders { ...@@ -102,54 +102,6 @@ table.round-borders {
float:left; float:left;
} }
.day-commits-table {
@include round-borders-all(4px);
padding: 4px 0px;
margin-bottom:10px;
display:block;
width:100%;
background: #E6F1F6;
.day-header {
padding:10px;
h3 {
margin:0px;
}
}
ul {
display:block;
list-style:none;
margin:0px;
padding:0px;
li.commit {
display:list-item;
padding:8px;
margin:0px;
background: #F7FBFC;
border-top: 1px solid #E2EAEE;
&:first-child {
border-top: 1px solid #E2EAEE;
}
&:nth-child(2n+1) {
background: white;
}
a.button {
width:85px;
padding:10px;
margin:0px;
float:right;
}
p {
margin-bottom: 3px;
font-size: 13px;
}
}
}
}
@mixin panel-color { @mixin panel-color {
background: #111 !important; background: #111 !important;
background: -webkit-gradient(linear,left top,left bottom,from(#333),to(#111)) !important; background: -webkit-gradient(linear,left top,left bottom,from(#333),to(#111)) !important;
...@@ -210,9 +162,9 @@ table.round-borders { ...@@ -210,9 +162,9 @@ table.round-borders {
padding:20px; padding:20px;
} }
body { //body {
background: #eaeaea; //background: #eaeaea;
} //}
a { a {
color: #111; color: #111;
...@@ -383,23 +335,19 @@ input.ssh_project_url { ...@@ -383,23 +335,19 @@ input.ssh_project_url {
border-width: 1px; border-width: 1px;
} }
tbody tr:nth-child(2n) td, tbody tr.even td {
background: none repeat scroll 0 0 #F7FBFC;
border-top: 1px solid #E2EAEE;
border-bottom: 1px solid #E2EAEE;
}
.top_menu_count { .top_menu_count {
background: none repeat scroll 0 0 #FFF6BF; background: none repeat scroll 0 0 white;
border-color: #FFD324; color: #333;
color: #514721; border-color: #4BB8D2;
border: 1px solid #DDDDDD;
padding: 2px; padding: 2px;
font-size:12px; font-size:10px;
position:relative;
top:-14px;
left:10px;
border-top:none; border-top:none;
text-align:center;
float:right;
width:25px;
} }
#logo { #logo {
...@@ -411,7 +359,7 @@ tbody tr:nth-child(2n) td, tbody tr.even td { ...@@ -411,7 +359,7 @@ tbody tr:nth-child(2n) td, tbody tr.even td {
text-shadow: #555 1px 1px; text-shadow: #555 1px 1px;
} }
/** FALSH **/ /** FLASH **/
#flash_container { #flash_container {
height:40px; height:40px;
...@@ -429,6 +377,7 @@ tbody tr:nth-child(2n) td, tbody tr.even td { ...@@ -429,6 +377,7 @@ tbody tr:nth-child(2n) td, tbody tr.even td {
color:#444; color:#444;
font-size:22px; font-size:22px;
padding-top:5px; padding-top:5px;
margin:2px;
} }
} }
...@@ -682,9 +631,9 @@ tbody tr:nth-child(2n) td, tbody tr.even td { ...@@ -682,9 +631,9 @@ tbody tr:nth-child(2n) td, tbody tr.even td {
} }
.top_panel_issues{ .top_panel_issues{
#issue_search_form { #issue_search_form {
margin:5px 0; margin:5px 0;
input { input {
border:1px solid #D3D3D3; border:1px solid #D3D3D3;
padding: 3px; padding: 3px;
height: 28px; height: 28px;
...@@ -693,10 +642,67 @@ tbody tr:nth-child(2n) td, tbody tr.even td { ...@@ -693,10 +642,67 @@ tbody tr:nth-child(2n) td, tbody tr.even td {
box-sizing: border-box; box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
&:focus { &:focus {
border-color:#c2e1ef; border-color:#c2e1ef;
} }
} }
} }
} }
.left {
float:left;
}
.right {
float:right;
}
.width-50p{
width:50%;
}
.width-49p{
width:49%;
}
.width-30p{
width:30%;
}
.width-65p{
width:65%;
}
pre.commit_message {
white-space: pre-wrap;
}
#container {
min-height:100%;
}
.ui-selectmenu{
@include round-borders-all(4px);
margin-right:10px;
font-size:1.5em;
height:auto;
font-weight:bold;
.ui-selectmenu-status {
padding:3px 10px;
}
}
td.code {
width: 100%;
.highlight {
margin-left: 55px;
overflow:auto;
overflow-y:hidden;
}
}
.highlight pre {
white-space: pre;
word-wrap:normal;
}
.highlighttable tr:hover {
background:white;
}
table.highlighttable pre{
line-height:16px !important;
font-size:12px !important;
}
This diff is collapsed.
class Admin::MailerController < ApplicationController class Admin::MailerController < ApplicationController
layout "admin"
before_filter :authenticate_user! before_filter :authenticate_user!
before_filter :authenticate_admin! before_filter :authenticate_admin!
......
class Admin::ProjectsController < ApplicationController class Admin::ProjectsController < ApplicationController
layout "admin"
before_filter :authenticate_user! before_filter :authenticate_user!
before_filter :authenticate_admin! before_filter :authenticate_admin!
......
class Admin::TeamMembersController < ApplicationController class Admin::TeamMembersController < ApplicationController
layout "admin"
before_filter :authenticate_user! before_filter :authenticate_user!
before_filter :authenticate_admin! before_filter :authenticate_admin!
......
class Admin::UsersController < ApplicationController class Admin::UsersController < ApplicationController
layout "admin"
before_filter :authenticate_user! before_filter :authenticate_user!
before_filter :authenticate_admin! before_filter :authenticate_admin!
......
...@@ -8,8 +8,18 @@ class ApplicationController < ActionController::Base ...@@ -8,8 +8,18 @@ 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
layout :layout_by_resource
protected protected
def layout_by_resource
if devise_controller?
"devise"
else
"application"
end
end
def abilities def abilities
@abilities ||= Six.new @abilities ||= Six.new
end end
......
...@@ -2,6 +2,7 @@ require "base64" ...@@ -2,6 +2,7 @@ require "base64"
class CommitsController < ApplicationController class CommitsController < ApplicationController
before_filter :project before_filter :project
layout "project"
# Authorize # Authorize
before_filter :add_project_abilities before_filter :add_project_abilities
......
class DashboardController < ApplicationController class DashboardController < ApplicationController
def index def index
@projects = current_user.projects.all @projects = current_user.projects.all
@active_projects = @projects.select(&:last_activity_date).sort_by(&:last_activity_date).reverse
end end
end end
...@@ -2,6 +2,7 @@ class IssuesController < ApplicationController ...@@ -2,6 +2,7 @@ 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]
layout "project"
# Authorize # Authorize
before_filter :add_project_abilities before_filter :add_project_abilities
...@@ -41,7 +42,7 @@ class IssuesController < ApplicationController ...@@ -41,7 +42,7 @@ class IssuesController < ApplicationController
def create def create
@issue = @project.issues.new(params[:issue]) @issue = @project.issues.new(params[:issue])
@issue.author = current_user @issue.author = current_user
if @issue.save if @issue.save && @issue.assignee != current_user
Notify.new_issue_email(@issue).deliver Notify.new_issue_email(@issue).deliver
end end
......
class KeysController < ApplicationController class KeysController < ApplicationController
layout "profile"
respond_to :js respond_to :js
def index def index
......
class ProfileController < ApplicationController class ProfileController < ApplicationController
layout "profile"
def show def show
@user = current_user @user = current_user
end end
......
class ProjectsController < ApplicationController class ProjectsController < ApplicationController
before_filter :project, :except => [:index, :new, :create] before_filter :project, :except => [:index, :new, :create]
layout :determine_layout
# Authorize # Authorize
before_filter :add_project_abilities before_filter :add_project_abilities
...@@ -152,4 +153,12 @@ class ProjectsController < ApplicationController ...@@ -152,4 +153,12 @@ class ProjectsController < ApplicationController
def project def project
@project ||= Project.find_by_code(params[:id]) @project ||= Project.find_by_code(params[:id])
end end
def determine_layout
if @project && !@project.new_record?
"project"
else
"application"
end
end
end end
class SnippetsController < ApplicationController class SnippetsController < ApplicationController
before_filter :authenticate_user! before_filter :authenticate_user!
before_filter :project before_filter :project
layout "project"
# Authorize # Authorize
before_filter :add_project_abilities before_filter :add_project_abilities
......
class TeamMembersController < ApplicationController class TeamMembersController < ApplicationController
before_filter :project before_filter :project
layout "project"
# Authorize # Authorize
before_filter :add_project_abilities before_filter :add_project_abilities
......
...@@ -28,6 +28,12 @@ module ApplicationHelper ...@@ -28,6 +28,12 @@ module ApplicationHelper
else else
"Never" "Never"
end end
rescue
"Never"
end
def markdown(text)
RDiscount.new(text, :autolink, :no_pseudo_protocols, :safelink, :smart, :filter_html).to_html.html_safe
end end
def search_autocomplete_source def search_autocomplete_source
......
module DashboardHelper module DashboardHelper
def dashboard_feed_path(project, object)
case object.class.name.to_s
when "Issue" then project_issues_path(project, project.issues.find(object.id))
when "Grit::Commit" then project_commit_path(project, project.repo.commits(object.id).first)
when "Note"
then
note = object
case note.noteable_type
when "Issue" then project_issue_path(project, note.noteable_id)
when "Snippet" then project_snippet_path(project, note.noteable_id)
when "Commit" then project_commit_path(project, :id => note.noteable_id)
else wall_project_path(project)
end
else "#"
end
rescue
"#"
end
def dashboard_feed_title(object)
title = case object.class.name.to_s
when "Note" then markdown(object.note)
when "Issue" then object.title
when "Grit::Commit" then object.safe_message
else ""
end
"[#{object.class.name}] #{truncate(sanitize(title, :tags => []), :length => 60)} "
end
end end
...@@ -10,6 +10,11 @@ class Issue < ActiveRecord::Base ...@@ -10,6 +10,11 @@ class Issue < ActiveRecord::Base
validates_presence_of :assignee_id validates_presence_of :assignee_id
validates_presence_of :author_id validates_presence_of :author_id
delegate :name,
:email,
:to => :author,
:prefix => true
validates :title, validates :title,
:presence => true, :presence => true,
:length => { :within => 0..255 } :length => { :within => 0..255 }
......
...@@ -7,6 +7,11 @@ class Note < ActiveRecord::Base ...@@ -7,6 +7,11 @@ class Note < ActiveRecord::Base
belongs_to :author, belongs_to :author,
:class_name => "User" :class_name => "User"
delegate :name,
:email,
:to => :author,
:prefix => true
attr_protected :author, :author_id attr_protected :author, :author_id
validates_presence_of :project validates_presence_of :project
......
...@@ -119,6 +119,26 @@ class Project < ActiveRecord::Base ...@@ -119,6 +119,26 @@ class Project < ActiveRecord::Base
repo rescue false repo rescue false
end end
def last_activity
updates(1).first
rescue
nil
end
def last_activity_date
last_activity.try(:created_at)
end
def updates(n = 3)
[
fresh_commits(n),
issues.last(n),
notes.fresh.limit(n)
].compact.flatten.sort do |x, y|
y.created_at <=> x.created_at
end[0...n]
end
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
...@@ -131,16 +151,16 @@ class Project < ActiveRecord::Base ...@@ -131,16 +151,16 @@ class Project < ActiveRecord::Base
@heads ||= repo.heads @heads ||= repo.heads
end end
def fresh_commits def fresh_commits(n = 10)
commits = heads.map do |h| commits = heads.map do |h|
repo.commits(h.name, 10) repo.commits(h.name, n)
end.flatten.uniq { |c| c.id } end.flatten.uniq { |c| c.id }
commits.sort! do |x, y| commits.sort! do |x, y|
y.committed_date <=> x.committed_date y.committed_date <=> x.committed_date
end end
commits[0..10] commits[0...n]
end end
def commits_since(date) def commits_since(date)
......
%div.top_project_menu
%span= link_to "Users", admin_users_path, :style => "width:50px;", :class => controller.controller_name == "users" ? "current" : nil
%span= link_to "Projects", admin_projects_path, :style => "width:50px;", :class => controller.controller_name == "projects" ? "current" : nil
%span= link_to "Teams", admin_team_members_path, :style => "width:50px;", :class => controller.controller_name == "team_members" ? "current" : nil
%span= link_to "Emails", admin_emails_path, :style => "width:50px;", :class => controller.controller_name == "mailer" ? "current" : nil
%table %table
%tr %thead
%th Name %th Name
%th Code %th Code
%th Path %th Path
......
- @admin_team_members.group_by(&:project).sort.each do |project, members| - @admin_team_members.group_by(&:project).sort.each do |project, members|
%h3= link_to project.name, [:admin, project] %h3= link_to project.name, [:admin, project]
%table %table
%tr %thead
%th Name %th Name
%th Email %th Email
%th Read %th Read
......
%table %table
%tr %thead
%th Admin %th Admin
%th Name %th Name
%th Email %th Email
......
- @commits.group_by { |c| c.committed_date.to_date }.each do |day, commits| - @commits.group_by { |c| c.committed_date.to_date }.each do |day, commits|
.day-commits-table %div{ :class => "commits-date ui-box ui-box-small ui-box-big" }
.day-header .day-commits-table
%h3= day.stamp("28 Aug, 2010") %h3= day.stamp("28 Aug, 2010")
%ul .data
- commits.each do |commit| - commits.each do |commit|
%li{ :class => "commit", :url => project_commit_path(@project, :id => commit.id) } %a{ :class => "commit", :href => project_commit_path(@project, :id => commit.id) }
- if commit.author.email %span.commit-info
= image_tag gravatar_icon(commit.author.email), :class => "left", :width => 40, :style => "padding-right:5px;" %data.commit-button
- else = truncate(commit.id.to_s, :length => 16)
= image_tag "no_avatar.png", :class => "left", :width => 40, :style => "padding-right:5px;" %i
%p %data.commit-browse{ :onclick => "location.href='#{tree_project_path(@project, :commit_id => commit.id)}';return false;"}
%strong Browse Code
= truncate(commit.safe_message, :length => 60) - if commit.author_email
= link_to "Browse Code", tree_project_path(@project, :commit_id => commit.id), :class => "lite_button", :style => "float:right" = image_tag gravatar_icon(commit.author_email), :class => "left", :width => 40, :style => "padding-right:5px;"
= link_to truncate(commit.id.to_s, :length => 16), project_commit_path(@project, :id => commit.id), :class => "lite_button", :style => "width:120px;float:right" - else
%span = image_tag "no_avatar.png", :class => "left", :width => 40, :style => "padding-right:5px;"
%span.author %span.commit-title
= commit.author %strong
= time_ago_in_words(commit.committed_date) = truncate(commit.safe_message, :length => 60)
ago %span.commit-author
%strong= commit.author_name
= time_ago_in_words(commit.committed_date)
ago
= more_commits_link if @commits.size > 99 = more_commits_link if @commits.size > 99
%div - content_for(:body_class, "project-page commits-page")
%h3
.left .left
= form_tag project_commits_path(@project), :method => :get do = form_tag project_commits_path(@project), :method => :get do
= select_tag "branch", options_for_select(@repo.heads.map(&:name), @branch), :onchange => "this.form.submit();", :class => "", :prompt => "Branches" = select_tag "branch", options_for_select(@repo.heads.map(&:name), @branch), :onchange => "this.form.submit();", :class => "", :prompt => "Branches"
&nbsp; .left
.left.prepend-1 = form_tag project_commits_path(@project), :method => :get do
= form_tag project_commits_path(@project), :method => :get do = select_tag "tag", options_for_select(@project.tags, @tag), :onchange => "this.form.submit();", :class => "", :prompt => "Tags"
= select_tag "tag", options_for_select(@project.tags, @tag), :onchange => "this.form.submit();", :class => "", :prompt => "Tags" .clear
= text_field_tag "ssh", @project.url_to_repo, :class => ["ssh_project_url", "one_click_select"]
.clear %br
-#%a.right.button{:href => "#"} Download
-#-if can? current_user, :admin_project, @project
%a.right.button.blue{:href => "#"} EDIT
%h2.icon
%span
%a.project-name{:href => "#"}
%i.arrow>
Project
&nbsp;
%d
%a{:href => "#"}
= @ref
- if params[:path] - if params[:path]
%h3{:style => "color:#555"} /#{params[:path]} &nbsp;
%div{:id => dom_id(@project)} %d
= render "commits" %a{:href => "#"}= params[:path].split("/").join(" / ")
%div{:id => dom_id(@project)}
= render "commits"
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
%td= @commit.id %td= @commit.id
%tr %tr
%td Author %td Author
%td= @commit.author %td= @commit.author_name
%tr %tr
%td Commiter %td Commiter
%td= @commit.committer %td= @commit.committer
...@@ -16,7 +16,9 @@ ...@@ -16,7 +16,9 @@
%td= @commit.committed_date %td= @commit.committed_date
%tr %tr
%td Message %td Message
%td= @commit.safe_message %td
%pre.commit_message
= preserve @commit.safe_message
%tr %tr
%td Tree %td Tree
%td= link_to 'Browse Code', tree_project_path(@project, :commit_id => @commit.id) %td= link_to 'Browse Code', tree_project_path(@project, :commit_id => @commit.id)
......
timeline - content_for(:body_class, "dashboard-page")
#dashboard-content.dashboard-content.content
%aside
%h4
- if current_user.can_create_project?
%a.button-small.button-green{:href => new_project_path} New Repository
Your Repositories
%ol.project-list
- @projects.each do |project|
%li
%a{:href => project_path(project)}
%span.arrow
%span.project-name= project.name
%span.time
%strong Last activity:
= project.last_activity_date ? time_ago_in_words(project.last_activity_date) + " ago" : "Never"
#news-feed.news-feed
%h2.icon
%span>
Dashboard
- @active_projects.first(3).each do |project|
.project-box.project-updates.ui-box.ui-box-small.ui-box-big
%h3= project.name
.data
- project.updates.each do |update|
%a.project-update{:href => dashboard_feed_path(project, update)}
= image_tag gravatar_icon(update.author_email), :class => "left", :width => 40
%span.update-title
= dashboard_feed_title(update)
%span.update-author
%strong= update.author_name
authored
= time_ago_in_words(update.created_at)
ago
%br
/ .project-update
/ .project-updates
/ #news-feed
/ #dashboard-content
<h2>Forgot your password?</h2> <%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :class => "login-box", :method => :post }) do |f| %>
<%= image_tag "login-logo.png", :width => "304", :height => "66", :class => "login-logo", :alt => "Login Logo" %>
<div class="span-12 colborder"> <%= devise_error_messages! %>
<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post }) do |f| %> <%= f.email_field :email, :placeholder => "Email", :class => "text top" %>
<%= devise_error_messages! %> <br/>
<%= f.submit "Reset password", :class => "grey-button" %>
<div><%= f.label :email %><br /> <div class="right"> <%= render :partial => "devise/shared/links" %></div>
<%= f.email_field :email %></div> <% end %>
<div><%= f.submit "Send me reset password instructions", :class => "lbutton vm" %></div>
<% end %>
</div>
<div>
<%= render :partial => "devise/shared/links" %>
</div>
<h2>Sign in</h2> <%= form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :class => "login-box" }) do |f| %>
<%= image_tag "login-logo.png", :width => "304", :height => "66", :class => "login-logo", :alt => "Login Logo" %>
<%= f.text_field :email, :class => "text top", :placeholder => "Email" %>
<%= f.password_field :password, :class => "text bottom", :placeholder => "Password" %>
<div class="span-12 colborder"> <% if devise_mapping.rememberable? -%>
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %> <div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div>
<div><%= f.label :email %><br /> <% end -%>
<%= f.text_field :email %></div> <br/>
<%= f.submit "Sign in", :class => "grey-button" %>
<div><%= f.label :password %><br /> <div class="right"> <%= render :partial => "devise/shared/links" %></div>
<%= f.password_field :password %></div> <% end %>
<% if devise_mapping.rememberable? -%>
<div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div>
<% end -%>
<br/>
<div><%= f.submit "Sign in", :class => "lbutton vm" %></div>
<% end %>
</div>
<div>
<%= render :partial => "devise/shared/links" %>
</div>
%table.round-borders#issues-table %table.round-borders#issues-table
%tr %thead
- 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
......
%h2 %h2
= "Issue ##{@issue.id} - #{html_escape(@issue.title)}" = "Issue ##{@issue.id} - #{html_escape(@issue.title)}"
.span-15 .left.width-65p
-#= simple_format html_escape(@issue.content) -#= simple_format html_escape(@issue.content)
.issue_notes= render "notes/notes" .issue_notes= render "notes/notes"
.span-8.right .right.width-30p
.span-8 .span-8
- if @issue.closed - if @issue.closed
%center.success Closed %center.success Closed
......
<div id="header-panel"> <!-- Page Header -->
<header>
<h1 class="logo">
<a href="/">GITLAB</a></h1>
<div class="login-top">
<%= link_to profile_path, :class => "pic" do %>
<%= image_tag gravatar_icon(current_user.email) %>
<% end %>
<%= link_to profile_path, :class => "username" do %>
<%= current_user.name %>
<% end %>
<%= link_to 'Logout', destroy_user_session_path, :class => "logout", :method => :delete %>
</div>
<div class="search">
<%= text_field_tag "search", nil, :placeholder => "Search", :class => "search-input" %>
</div>
<!-- .login-top -->
<nav>
<%= link_to dashboard_path, :class => current_page?(root_path) ? "current dashboard" : "dashboard" do %>
<span></span>Dashboard
<% end %>
<%= link_to projects_path, :class => current_page?(projects_path) ? "current project" : "project" do %>
<span></span>Projects
<% end %>
<%= link_to((current_user.is_admin? ? admin_root_path : "#"), :class => (admin_namespace? ? "current admin" : "admin")) do %>
<span></span>Admin
<% end %>
</nav>
</header>
<!-- eo Page Header -->
<div id="header-panel" style="display:none">
<div class="container"> <div class="container">
<div class="span-24"> <div class="span-24">
<div class="span-10"> <div class="span-10">
<%#= image_tag "git.png", :height => 40, :class => "left" %>
<%#= link_to "gitlab", root_path, :id => "logo" %>
<span class="search-holder"> <span class="search-holder">
<%= text_field_tag "search", nil, :placeholder => "Search" %>
</span> </span>
</div> </div>
<div class="right"> <div class="right">
<%= link_to truncate(@project.name, :length => 20), project_path(@project), :class => "current button" if @project && !@project.new_record? %> <%= link_to truncate(@project.name, :length => 20), project_path(@project), :class => "current button" if @project && !@project.new_record? %>
<%= link_to 'Projects', projects_path, :class => current_page?(projects_path) ? "current button" : "button" %>
<%= link_to('Admin', admin_root_path, :class => admin_namespace? ? "current button" : "button" ) if current_user.is_admin? %>
<%= link_to profile_path, :class => ((controller.controller_name == "keys" || controller.controller_name == "profile") ? "current button" : "button") do %>
<%= image_tag gravatar_icon(current_user.email) %>
<%= current_user.name.split(" ").first %>
<% end %>
<%= link_to 'Logout', destroy_user_session_path, :style => "border-left: 1px solid #666;", :class => "button", :method => :delete %>
</div> </div>
</div> </div>
</div> </div>
......
- if content_for?(:page_title)
= yield :page_title
!!!
%html
%head
%title
GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
= stylesheet_link_tag "application"
= javascript_include_tag "application"
= csrf_meta_tags
%link{:href => "/assets/favicon.png", :rel => "icon", :type => "image/png"}/
= javascript_tag do
REQ_URI = "#{request.env["REQUEST_URI"]}";
REQ_REFFER = "#{request.env["HTTP_REFERER"]}";
%body{ :class => content_for?(:body_class) ? yield(:body_class) : 'project-page', :id => yield(:boyd_id)}
#container
= render :partial => "layouts/flash"
= render :partial => "layouts/head_panel"
.project-container
.project-sidebar
.fixed
%aside
= link_to "Users", admin_users_path, :class => controller.controller_name == "users" ? "current" : nil
= link_to "Projects", admin_projects_path, :class => controller.controller_name == "projects" ? "current" : nil
= link_to "Teams", admin_team_members_path, :class => controller.controller_name == "team_members" ? "current" : nil
= link_to "Emails", admin_emails_path, :class => controller.controller_name == "mailer" ? "current" : nil
.project-content
= yield
...@@ -3,10 +3,10 @@ ...@@ -3,10 +3,10 @@
%head %head
%title %title
GitLab #{" - #{@project.name}" if @project && !@project.new_record?} GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
= stylesheet_link_tag 'blueprint/screen', :media => "screen, projection" -#= stylesheet_link_tag 'blueprint/screen', :media => "screen, projection"
= 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 "application" = stylesheet_link_tag "application"
= javascript_include_tag "application" = javascript_include_tag "application"
= csrf_meta_tags = csrf_meta_tags
...@@ -14,15 +14,10 @@ ...@@ -14,15 +14,10 @@
= javascript_tag do = javascript_tag do
REQ_URI = "#{request.env["REQUEST_URI"]}"; REQ_URI = "#{request.env["REQUEST_URI"]}";
REQ_REFFER = "#{request.env["HTTP_REFERER"]}"; REQ_REFFER = "#{request.env["HTTP_REFERER"]}";
%body#thebody %body{ :class => yield(:body_class), :id => yield(:boyd_id)}
= render :partial => "layouts/flash" #container
- if user_signed_in? = render :partial => "layouts/flash"
= render :partial => "layouts/head_panel" = render :partial => "layouts/head_panel"
.top_bar.container %div{ :id => "main", :role => "main", :class => "container_4" }
= render :partial => "projects/top_menu" if @project && !@project.new_record? = render :partial => "layouts/page_title"
= render :partial => "projects/projects_top_menu" if (controller.controller_name == "projects" && ["index", "new", "create"].include?(controller.action_name)) && !admin_namespace?
= render :partial => "profile/top_menu" if ["keys", "profile"].include?(controller.controller_name)
= render :partial => "admin/top_menu" if admin_namespace?
#content-container.container
.span-24
= yield = yield
!!!
%html
%head
%title
GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
= stylesheet_link_tag "application"
= javascript_include_tag "application"
= csrf_meta_tags
%link{:href => "/assets/favicon.png", :rel => "icon", :type => "image/png"}/
= javascript_tag do
REQ_URI = "#{request.env["REQUEST_URI"]}";
REQ_REFFER = "#{request.env["HTTP_REFERER"]}";
%body.login-page
= render :partial => "layouts/flash"
= yield
!!!
%html
%head
%title
GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
= stylesheet_link_tag "application"
= javascript_include_tag "application"
= csrf_meta_tags
%link{:href => "/assets/favicon.png", :rel => "icon", :type => "image/png"}/
= javascript_tag do
REQ_URI = "#{request.env["REQUEST_URI"]}";
REQ_REFFER = "#{request.env["HTTP_REFERER"]}";
%body{ :class => content_for?(:body_class) ? yield(:body_class) : 'project-page', :id => yield(:boyd_id)}
#container
= render :partial => "layouts/flash"
= render :partial => "layouts/head_panel"
.project-container
.project-sidebar
.fixed
%aside
= link_to "Profile", profile_path, :class => current_page?(:controller => "profile", :action => :show) ? "current" : nil
= link_to "Password", profile_password_path, :class => current_page?(:controller => "profile", :action => :password) ? "current" : nil
= link_to keys_path, :class => controller.controller_name == "keys" ? "current" : nil do
Keys
- unless current_user.keys.empty?
%span{ :class => "number" }= current_user.keys.count
.project-content
= yield
!!!
%html
%head
%title
GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
= stylesheet_link_tag "application"
= javascript_include_tag "application"
= csrf_meta_tags
%link{:href => "/assets/favicon.png", :rel => "icon", :type => "image/png"}/
= javascript_tag do
REQ_URI = "#{request.env["REQUEST_URI"]}";
REQ_REFFER = "#{request.env["HTTP_REFERER"]}";
%body{ :class => content_for?(:body_class) ? yield(:body_class) : 'project-page', :id => yield(:boyd_id)}
#container
= render :partial => "layouts/flash"
= render :partial => "layouts/head_panel"
.project-container
.project-sidebar
.fixed
%input.git-url.text{:id => "", :name => "", :readonly => "", :type => "text", :value => @project.url_to_repo}
%aside
= link_to "History", project_path(@project), :class => current_page?(:controller => "projects", :action => "show", :id => @project) ? "current" : nil
= link_to "Tree", tree_project_path(@project), :class => current_page?(:controller => "projects", :action => "tree", :id => @project) ? "current" : nil
= link_to "Commits", project_commits_path(@project), :class => current_page?(:controller => "commits", :action => "index", :project_id => @project) ? "current" : nil
= link_to team_project_path(@project), :class => (current_page?(:controller => "projects", :action => "team", :id => @project) || controller.controller_name == "team_members") ? "current" : nil do
Team
- if @project.users_projects.count > 0
%span{ :class => "number" }= @project.users_projects.count
= link_to project_issues_path(@project), :class => (controller.controller_name == "issues") ? "current" : nil do
Issues
- if @project.issues.opened.count > 0
%span{ :class => "number" }= @project.issues.opened.count
= link_to wall_project_path(@project), :class => current_page?(:controller => "projects", :action => "wall", :id => @project) ? "current" : nil do
Wall
- if @project.common_notes.count > 0
%span{ :class => "number" }= @project.common_notes.count
= link_to project_snippets_path(@project), :class => (controller.controller_name == "snippets") ? "current" : nil do
Snippets
- if @project.snippets.count > 0
%span{ :class => "number" }= @project.snippets.non_expired.count
- if @commit
= link_to truncate(commit_name(@project,@commit), :length => 15), project_commit_path(@project, :id => @commit.id), :class => current_page?(:controller => "commits", :action => "show", :project_id => @project, :id => @commit.id) ? "current" : nil
.project-content
= yield
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
%div.note_author %div.note_author
= image_tag gravatar_icon(note.author.email), :class => "left", :width => 40, :style => "padding-right:5px;" = image_tag gravatar_icon(note.author.email), :class => "left", :width => 40, :style => "padding-right:5px;"
%div.note_content.left %div.note_content.left
= simple_format(html_escape(note.note)) = markdown(note.note)
- if note.attachment.url - if note.attachment.url
Attachment: Attachment:
= link_to note.attachment_identifier, note.attachment.url, :target => "_blank" = link_to note.attachment_identifier, note.attachment.url, :target => "_blank"
......
%div.top_project_menu
%span= link_to "Profile", profile_path, :class => current_page?(:controller => "profile", :action => :show) ? "current" : nil
%span= link_to "Password", profile_password_path, :style => "width:70px;", :class => current_page?(:controller => "profile", :action => :password) ? "current" : nil
%span= link_to "Keys", keys_path, :class => controller.controller_name == "keys" ? "current" : nil
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
%p{:style => "margin-bottom: 3px;"} %p{:style => "margin-bottom: 3px;"}
%span.author %span.author
= note.author.name = note.author.name
= link_to truncate(note.note, :length => 200), link_to_item + "#note_#{note.id}" = link_to markdown(truncate(note.note, :length => 200)), link_to_item + "#note_#{note.id}"
- if note.attachment.url - if note.attachment.url
%br %br
Attachment: Attachment:
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
%div#new-member-holder %div#new-member-holder
= link_to "Add new", new_project_team_member_path(@project), :remote => true, :class => "lbutton vm" = link_to "Add new", new_project_team_member_path(@project), :remote => true, :class => "lbutton vm"
%table.round-borders#team-table %table.round-borders#team-table
%tr %thead
%th Name %th Name
%th Email %th Email
%th Web %th Web
......
- @projects.in_groups_of(3, false) do |projects| - @projects.in_groups_of(3, false) do |projects|
- projects.each_with_index do |project, i| - projects.each_with_index do |project, i|
%div{ :class => "project_thumb round-borders", :style => i == 2 ? "" : "margin-right:30px;" } %div.grid_1
%div{ :class => "project", :url => project_path(project) } %div{ :class => "project-box ui-box ui-box-big" }
%h2 = link_to project_path(project) do
= image_tag gravatar_icon(project.name), :class => "left", :width => 40, :style => "padding-right:5px;" %h3= project.name
= link_to ("/" + project.code), project_path(project), :style => "text-decoration:none" .data
%p= project.name %p.title.repository
%p= project.url_to_repo %span Repository:
-#%p = project.url_to_repo
Commit &ndash; %p.title.activity
= last_commit(project) %span Last Activity:
%hr - last_note = project.notes.last
= link_to "Browse Code", tree_project_path(project), :class => "lbutton" = last_note ? last_note.created_at.stamp("24 Aug, 2011") : "Never"
= link_to "Commits", project_commits_path(project), :class => "lbutton", :style => "float:right;width:80px;" .buttons
.clear %a.browse-code.button.yellow{:href => tree_project_path(project)} Browse code
%a.commits.button.green{:href => project_commits_path(project)} Commits
%div.top_project_menu %div.top_project_menu
-#%span= link_to @project.code.capitalize, @project, :class => current_page?(:controller => "projects", :action => "show", :id => @project) ? "current" : nil
- if @project.repo_exists? - if @project.repo_exists?
%span= link_to image_tag("home.png", :width => 20), project_path(@project), :class => current_page?(:controller => "projects", :action => "show", :id => @project) ? "current" : nil %span= link_to image_tag("home.png", :width => 20), project_path(@project), :class => current_page?(:controller => "projects", :action => "show", :id => @project) ? "current" : nil
%span= link_to "Tree", tree_project_path(@project), :class => current_page?(:controller => "projects", :action => "tree", :id => @project) ? "current" : nil %span= link_to "Tree", tree_project_path(@project), :class => current_page?(:controller => "projects", :action => "tree", :id => @project) ? "current" : nil
......
%h3 .left
.left = form_tag tree_project_path(@project), :method => :get do
= form_tag tree_project_path(@project), :method => :get do = select_tag "branch", options_for_select(@repo.heads.map(&:name), @branch), :onchange => "this.form.submit();", :class => "", :prompt => "Branches"
= select_tag "branch", options_for_select(@repo.heads.map(&:name), @branch), :onchange => "this.form.submit();", :class => "", :prompt => "Branches" .left
&nbsp; = form_tag tree_project_path(@project), :method => :get do
.left.prepend-1 = select_tag "tag", options_for_select(@project.tags, @tag), :onchange => "this.form.submit();", :class => "", :prompt => "Tags"
= form_tag tree_project_path(@project), :method => :get do .clear
= select_tag "tag", options_for_select(@project.tags, @tag), :onchange => "this.form.submit();", :class => "", :prompt => "Tags"
= text_field_tag "ssh", @project.url_to_repo, :class => ["ssh_project_url","one_click_select"] %br
.clear
-#%a.right.button{:href => "#"} Download
%h3#tree-breadcrumbs -#-if can? current_user, :admin_project, @project
= link_to @project.name, tree_project_path(@project, :path => nil, :commit_id => @commit.try(:id)), :remote => true %a.right.button.blue{:href => "#"} EDIT
- if params[:path] #tree-breadcrumbs
- part_path = "" %h2.icon
- params[:path].split("\/").each do |part| %span
- part_path = File.join(part_path, part) unless part_path.empty? = link_to tree_project_path(@project, :path => nil, :commit_id => @commit.try(:id)), :remote => true, :class => 'project-name' do
- if part_path.empty? %i.arrow>
- part_path = part = @project.name
\/ &nbsp;
= link_to truncate(part, :length => 40), tree_file_project_path(@project, :path => part_path, :commit_id => @commit.try(:id), :branch => @branch, :tag => @tag), :remote => :true %d
%a{:href => "#"}
= @ref
- if params[:path]
- part_path = ""
- params[:path].split("\/").each do |part|
- part_path = File.join(part_path, part) unless part_path.empty?
- if part_path.empty?
- part_path = part
\/
= link_to truncate(part, :length => 40), tree_file_project_path(@project, :path => part_path, :commit_id => @commit.try(:id), :branch => @branch, :tag => @tag), :remote => :true
.clear
#tree-content-holder #tree-content-holder
- if tree.is_a?(Grit::Blob) - if tree.is_a?(Grit::Blob)
= render :partial => "projects/tree_file", :locals => { :name => tree.name, :content => tree.data, :file => tree } = render :partial => "projects/tree_file", :locals => { :name => tree.name, :content => tree.data, :file => tree }
- else - else
- contents = tree.contents - contents = tree.contents
%table#tree-slider.round-borders %table#tree-slider.round-borders
%tr %thead
%th Name %th Name
%th Last Update %th Last Update
%th %th
......
- content_for(:body_class, "projects-page")
- content_for(:page_title) do
.grid_4
- if current_user.can_create_project?
%a.grey-button.right{:href => new_project_path} Create new project
%h2.icon
%span
Projects
- unless @projects.empty? - unless @projects.empty?
%div{:class => "tile", :style => view_mode_style("tile")} %div{:class => "tile", :style => view_mode_style("tile")}
= render "tile" = render "tile"
......
...@@ -13,11 +13,11 @@ ...@@ -13,11 +13,11 @@
= label_tag "week_view","Week" = label_tag "week_view","Week"
.clear .clear
%hr %hr
.span-11 .left.width-49p
%h3 Commits %h3 Commits
=render "projects/recent_commits" =render "projects/recent_commits"
.span-11.right .right.width-49p
%h3 Talk %h3 Talk
=render "projects/recent_messages" =render "projects/recent_messages"
......
...@@ -29,4 +29,5 @@ Gitlab::Application.configure do ...@@ -29,4 +29,5 @@ Gitlab::Application.configure do
config.assets.debug = true config.assets.debug = true
config.action_mailer.default_url_options = { :host => 'localhost:3000' } config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.delivery_method = :letter_opener
end end
...@@ -15,6 +15,7 @@ Gitlab::Application.routes.draw do ...@@ -15,6 +15,7 @@ Gitlab::Application.routes.draw do
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"
get "profile", :to => "profile#show" get "profile", :to => "profile#show"
get "dashboard", :to => "dashboard#index"
#get "profile/:id", :to => "profile#show" #get "profile/:id", :to => "profile#show"
resources :projects, :only => [:new, :create, :index] resources :projects, :only => [:new, :create, :index]
...@@ -53,5 +54,5 @@ Gitlab::Application.routes.draw do ...@@ -53,5 +54,5 @@ Gitlab::Application.routes.draw do
end end
resources :notes, :only => [:create, :destroy] resources :notes, :only => [:create, :destroy]
end end
root :to => "projects#index" root :to => "dashboard#index"
end end
...@@ -8,4 +8,16 @@ module CommitExt ...@@ -8,4 +8,16 @@ module CommitExt
rescue rescue
"-- invalid encoding for commit message" "-- invalid encoding for commit message"
end end
def created_at
committed_date
end
def author_email
author.email.force_encoding(Encoding::UTF_8)
end
def author_name
author.name.force_encoding(Encoding::UTF_8)
end
end end
No preview for this file type
...@@ -62,6 +62,51 @@ describe Project do ...@@ -62,6 +62,51 @@ describe Project do
end end
end end
describe "updates" do
let(:project) { Factory :project }
before do
@issue = Factory :issue,
:project => project,
:author => Factory(:user),
:assignee => Factory(:user)
@note = Factory :note,
:project => project,
:author => Factory(:user)
@commit = project.fresh_commits(1).first
end
describe "return commit, note & issue" do
it { project.updates(3).count.should == 3 }
it { project.updates(3).last.id.should == @commit.id }
it { project.updates(3).include?(@issue).should be_true }
it { project.updates(3).include?(@note).should be_true }
end
end
describe "last_activity" do
let(:project) { Factory :project }
before do
@note = Factory :note,
:project => project,
:author => Factory(:user)
end
it { project.last_activity.should == @note }
it { project.last_activity_date.to_s.should == @note.created_at.to_s }
end
describe "fresh commits" do
let(:project) { Factory :project }
it { project.fresh_commits(3).count.should == 3 }
it { project.fresh_commits.first.id.should == "2fb376f61875b58bceee0492e270e9c805294b1a" }
it { project.fresh_commits.last.id.should == "0dac878dbfe0b9c6104a87d65fe999149a8d862c" }
end
describe "Git methods" do describe "Git methods" do
let(:project) { Factory :project } let(:project) { Factory :project }
......
require 'spec_helper'
describe "Dashboard" do
before { login_as :user }
describe "GET /dashboard" do
before do
@project = Factory :project
@project.add_access(@user, :read, :write)
visit dashboard_path
end
it "should be on dashboard page" do
current_path.should == dashboard_path
end
it "should have projects panel" do
within ".project-list" do
page.should have_content(@project.name)
end
end
it "should have news feed" do
within "#news-feed" do
page.should have_content(@project.commit.author.name)
page.should have_content(@project.commit.safe_message)
end
end
end
end
...@@ -5,7 +5,10 @@ describe "Issues" do ...@@ -5,7 +5,10 @@ describe "Issues" do
before do before do
login_as :user login_as :user
@user2 = Factory :user
project.add_access(@user, :read, :write) project.add_access(@user, :read, :write)
project.add_access(@user2, :read, :write)
end end
describe "GET /issues" do describe "GET /issues" do
...@@ -49,20 +52,20 @@ describe "Issues" do ...@@ -49,20 +52,20 @@ describe "Issues" do
end end
it "should show only open" do it "should show only open" do
should have_content(@issue.title) should have_content(@issue.title[0..25])
should have_no_content(@closed_issue.title) should have_no_content(@closed_issue.title)
end end
it "should show only closed" do it "should show only closed" do
choose "closed_issues" choose "closed_issues"
should have_no_content(@issue.title) should have_no_content(@issue.title)
should have_content(@closed_issue.title) should have_content(@closed_issue.title[0..25])
end end
it "should show all" do it "should show all" do
choose "all_issues" choose "all_issues"
should have_content(@issue.title) should have_content(@issue.title[0..25])
should have_content(@closed_issue.title) should have_content(@closed_issue.title[0..25])
end end
end end
end end
...@@ -78,35 +81,66 @@ describe "Issues" do ...@@ -78,35 +81,66 @@ describe "Issues" do
end end
describe "fill in" do describe "fill in" do
before do describe 'assign to me' do
fill_in "issue_title", :with => "bug 345" before do
click_link "Select user" fill_in "issue_title", :with => "bug 345"
click_link @user.name click_link "Select user"
end within "#issue_assignee_id-menu" do
click_link @user.name
it { expect { click_button "Save" }.to change {Issue.count}.by(1) } end
end
it "should add new issue to table" do
click_button "Save" it { expect { click_button "Save" }.to change {Issue.count}.by(1) }
page.should_not have_content("Add new issue") it "should add new issue to table" do
page.should have_content @user.name click_button "Save"
page.should have_content "bug 345"
page.should have_content project.name page.should_not have_content("Add new issue")
page.should have_content @user.name
page.should have_content "bug 345"
page.should have_content project.name
end
it "should call send mail" do
Notify.should_not_receive(:new_issue_email)
click_button "Save"
end
end end
it "should call send mail" do describe 'assign to other' do
Notify.should_receive(:new_issue_email).and_return(stub(:deliver => true)) before do
click_button "Save" fill_in "issue_title", :with => "bug 345"
end click_link "Select user"
within "#issue_assignee_id-menu" do
click_link @user2.name
end
end
it { expect { click_button "Save" }.to change {Issue.count}.by(1) }
it "should add new issue to table" do
click_button "Save"
page.should_not have_content("Add new issue")
page.should have_content @user2.name
page.should have_content "bug 345"
page.should have_content project.name
end
it "should call send mail" do
Notify.should_receive(:new_issue_email).and_return(stub(:deliver => true))
click_button "Save"
end
it "should send valid email to user with email & password" do
click_button "Save"
issue = Issue.last
email = ActionMailer::Base.deliveries.last
email.subject.should have_content("New Issue was created")
email.body.should have_content(issue.title)
email.body.should have_content(issue.assignee.name)
end
it "should send valid email to user with email & password" do
click_button "Save"
issue = Issue.last
email = ActionMailer::Base.deliveries.last
email.subject.should have_content("New Issue was created")
email.body.should have_content(issue.title)
email.body.should have_content(issue.assignee.name)
end end
end end
end end
......
...@@ -13,14 +13,14 @@ describe "Projects" do ...@@ -13,14 +13,14 @@ describe "Projects" do
end end
it "should have link to new project" do it "should have link to new project" do
page.should have_content("New Project") page.should have_content("Create new project")
end end
end end
describe "GET /projects/new" do describe "GET /projects/new" do
before do before do
visit projects_path visit projects_path
click_link "New Project" click_link "Create new project"
end end
it "should be correct path" do it "should be correct path" do
......
...@@ -12,15 +12,15 @@ module LoginMacros ...@@ -12,15 +12,15 @@ module LoginMacros
end end
visit new_user_session_path visit new_user_session_path
fill_in "Email", :with => @user.email fill_in "user_email", :with => @user.email
fill_in "Password", :with => "123456" fill_in "user_password", :with => "123456"
click_button "Sign in" click_button "Sign in"
end end
def login_with(user) def login_with(user)
visit new_user_session_path visit new_user_session_path
fill_in "Email", :with => user.email fill_in "user_email", :with => user.email
fill_in "Password", :with => "123456" fill_in "user_password", :with => "123456"
click_button "Sign in" click_button "Sign in"
end end
......
...@@ -445,7 +445,7 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad ...@@ -445,7 +445,7 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
* http://docs.jquery.com/UI/Dialog#theming * http://docs.jquery.com/UI/Dialog#theming
*/ */
.ui-dialog { position: absolute; padding: 0; width: 300px; overflow: hidden; } .ui-dialog { position: absolute; padding: 0; width: 300px; overflow: hidden; }
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; background: #333; color:#eaeaea } .ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; background: #F7F7F7; color:#555; }
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0;} .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0;}
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; background:#eaeaea} .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; background:#eaeaea}
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
......
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