Merge branch 'Undev-team-and-group-descriptions'
This commit is contained in:
commit
1cfc2b6fc7
|
@ -30,6 +30,8 @@
|
|||
border-color: #DDD;
|
||||
}
|
||||
|
||||
.well { padding: 15px; }
|
||||
|
||||
/** HELPERS **/
|
||||
.nothing_here_message {
|
||||
text-align: center;
|
||||
|
|
|
@ -2,13 +2,14 @@
|
|||
#
|
||||
# Table name: namespaces
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# name :string(255) not null
|
||||
# path :string(255) not null
|
||||
# owner_id :integer not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# type :string(255)
|
||||
# id :integer not null, primary key
|
||||
# name :string(255) not null
|
||||
# description :string(255) not null
|
||||
# path :string(255) not null
|
||||
# owner_id :integer not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# type :string(255)
|
||||
#
|
||||
|
||||
class Group < Namespace
|
||||
|
|
|
@ -2,17 +2,18 @@
|
|||
#
|
||||
# Table name: namespaces
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# name :string(255) not null
|
||||
# path :string(255) not null
|
||||
# owner_id :integer not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# type :string(255)
|
||||
# id :integer not null, primary key
|
||||
# name :string(255) not null
|
||||
# description :string(255) not null
|
||||
# path :string(255) not null
|
||||
# owner_id :integer not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# type :string(255)
|
||||
#
|
||||
|
||||
class Namespace < ActiveRecord::Base
|
||||
attr_accessible :name, :path
|
||||
attr_accessible :name, :description, :path
|
||||
|
||||
has_many :projects, dependent: :destroy
|
||||
belongs_to :owner, class_name: "User"
|
||||
|
@ -22,7 +23,7 @@ class Namespace < ActiveRecord::Base
|
|||
length: { within: 0..255 },
|
||||
format: { with: Gitlab::Regex.name_regex,
|
||||
message: "only letters, digits, spaces & '_' '-' '.' allowed." }
|
||||
|
||||
validates :description, length: { within: 0..255 }
|
||||
validates :path, uniqueness: true, presence: true, length: { within: 1..255 },
|
||||
format: { with: Gitlab::Regex.path_regex,
|
||||
message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" }
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
|
||||
class UserTeam < ActiveRecord::Base
|
||||
attr_accessible :name, :owner_id, :path
|
||||
attr_accessible :name, :description, :owner_id, :path
|
||||
|
||||
belongs_to :owner, class_name: User
|
||||
|
||||
|
@ -26,6 +26,7 @@ class UserTeam < ActiveRecord::Base
|
|||
length: { within: 0..255 },
|
||||
format: { with: Gitlab::Regex.name_regex,
|
||||
message: "only letters, digits, spaces & '_' '-' '.' allowed." }
|
||||
validates :description, length: { within: 0..255 }
|
||||
validates :path, uniqueness: true, presence: true, length: { within: 1..255 },
|
||||
format: { with: Gitlab::Regex.path_regex,
|
||||
message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" }
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
%h3.page_title Rename Group
|
||||
%h3.page_title Edit Group
|
||||
%hr
|
||||
= form_for [:admin, @group] do |f|
|
||||
- if @group.errors.any?
|
||||
|
@ -10,7 +10,10 @@
|
|||
.input
|
||||
= f.text_field :name, placeholder: "Example Group", class: "xxlarge"
|
||||
|
||||
|
||||
.clearfix.group-description-holder
|
||||
= f.label :description, "Details"
|
||||
.input
|
||||
= f.text_area :description, maxlength: 250, class: "xxlarge js-gfm-input", rows: 4
|
||||
|
||||
.clearfix.group_name_holder
|
||||
= f.label :path do
|
||||
|
@ -24,5 +27,5 @@
|
|||
%li It will change the git path to repositories under this group.
|
||||
|
||||
.form-actions
|
||||
= f.submit 'Rename group', class: "btn btn-remove"
|
||||
= f.submit 'Edit group', class: "btn btn-remove"
|
||||
= link_to 'Cancel', admin_groups_path, class: "btn btn-cancel"
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
Name
|
||||
%i.icon-sort-down
|
||||
%th Path
|
||||
%th Description
|
||||
%th Projects
|
||||
%th Owner
|
||||
%th.cred Danger Zone!
|
||||
|
@ -25,11 +26,12 @@
|
|||
%tr
|
||||
%td
|
||||
%strong= link_to group.name, [:admin, group]
|
||||
%td= group.description
|
||||
%td= group.path
|
||||
%td= group.projects.count
|
||||
%td
|
||||
= link_to group.owner_name, admin_user_path(group.owner)
|
||||
%td.bgred
|
||||
= link_to 'Rename', edit_admin_group_path(group), id: "edit_#{dom_id(group)}", class: "btn btn-small"
|
||||
= link_to 'Edit', edit_admin_group_path(group), id: "edit_#{dom_id(group)}", class: "btn btn-small"
|
||||
= link_to 'Destroy', [:admin, group], confirm: "REMOVE #{group.name}? Are you sure?", method: :delete, class: "btn btn-small btn-remove"
|
||||
= paginate @groups, theme: "admin"
|
||||
|
|
|
@ -9,8 +9,14 @@
|
|||
Group name is
|
||||
.input
|
||||
= f.text_field :name, placeholder: "Ex. OpenSource", class: "xxlarge left"
|
||||
|
||||
= f.submit 'Create group', class: "btn btn-primary"
|
||||
.clearfix.group-description-holder
|
||||
= f.label :description, "Details"
|
||||
.input
|
||||
= f.text_area :description, maxlength: 250, class: "xxlarge js-gfm-input", rows: 4
|
||||
|
||||
.form-actions
|
||||
= f.submit 'Create group', class: "btn btn-primary"
|
||||
|
||||
%hr
|
||||
.padded
|
||||
%ul
|
||||
|
|
|
@ -16,7 +16,13 @@
|
|||
|
||||
= link_to edit_admin_group_path(@group), class: "btn btn-small pull-right" do
|
||||
%i.icon-edit
|
||||
Rename
|
||||
Edit
|
||||
%tr
|
||||
%td
|
||||
%b
|
||||
Description:
|
||||
%td
|
||||
= @group.description
|
||||
%tr
|
||||
%td
|
||||
%b
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
%h3.page_title Rename Team
|
||||
%h3.page_title Edit Team
|
||||
%hr
|
||||
= form_for @team, url: admin_team_path(@team), method: :put do |f|
|
||||
- if @team.errors.any?
|
||||
|
@ -10,6 +10,11 @@
|
|||
.input
|
||||
= f.text_field :name, placeholder: "Example Team", class: "xxlarge"
|
||||
|
||||
.clearfix.team-description-holder
|
||||
= f.label :description, "Details"
|
||||
.input
|
||||
= f.text_area :description, maxlength: 250, class: "xxlarge js-gfm-input", rows: 4
|
||||
|
||||
.clearfix.team_name_holder
|
||||
= f.label :path do
|
||||
%span.cred Team path is
|
||||
|
@ -19,5 +24,5 @@
|
|||
%li It will change web url for access team and team projects.
|
||||
|
||||
.form-actions
|
||||
= f.submit 'Rename team', class: "btn btn-remove"
|
||||
= f.submit 'Edit team', class: "btn btn-remove"
|
||||
= link_to 'Cancel', admin_teams_path, class: "btn btn-cancel"
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
%th
|
||||
Name
|
||||
%i.icon-sort-down
|
||||
%th Description
|
||||
%th Path
|
||||
%th Projects
|
||||
%th Members
|
||||
|
@ -26,13 +27,14 @@
|
|||
%tr
|
||||
%td
|
||||
%strong= link_to team.name, admin_team_path(team)
|
||||
%td= team.description
|
||||
%td= team.path
|
||||
%td= team.projects.count
|
||||
%td= team.members.count
|
||||
%td
|
||||
= link_to team.owner.name, admin_user_path(team.owner)
|
||||
%td.bgred
|
||||
= link_to 'Rename', edit_admin_team_path(team), id: "edit_#{dom_id(team)}", class: "btn btn-small"
|
||||
= link_to 'Edit', edit_admin_team_path(team), id: "edit_#{dom_id(team)}", class: "btn btn-small"
|
||||
= link_to 'Destroy', admin_team_path(team), confirm: "REMOVE #{team.name}? Are you sure?", method: :delete, class: "btn btn-small btn-remove"
|
||||
|
||||
= paginate @teams, theme: "admin"
|
||||
|
|
|
@ -9,8 +9,15 @@
|
|||
Team name is
|
||||
.input
|
||||
= f.text_field :name, placeholder: "Ex. OpenSource", class: "xxlarge left"
|
||||
|
||||
= f.submit 'Create team', class: "btn btn-primary"
|
||||
|
||||
.clearfix.team-description-holder
|
||||
= f.label :description, "Details"
|
||||
.input
|
||||
= f.text_area :description, maxlength: 250, class: "xxlarge js-gfm-input", rows: 4
|
||||
|
||||
.form-actions
|
||||
= f.submit 'Create team', class: "btn btn-primary"
|
||||
|
||||
%hr
|
||||
.padded
|
||||
%ul
|
||||
|
|
|
@ -16,7 +16,13 @@
|
|||
|
||||
= link_to edit_admin_team_path(@team), class: "btn btn-small pull-right" do
|
||||
%i.icon-edit
|
||||
Rename
|
||||
Edit
|
||||
%tr
|
||||
%td
|
||||
%b
|
||||
Description:
|
||||
%td
|
||||
= @team.description
|
||||
%tr
|
||||
%td
|
||||
%b
|
||||
|
|
|
@ -9,8 +9,15 @@
|
|||
Group name is
|
||||
.input
|
||||
= f.text_field :name, placeholder: "Ex. OpenSource", class: "xxlarge left"
|
||||
|
||||
= f.submit 'Save group', class: "btn btn-save"
|
||||
|
||||
.clearfix.group-description-holder
|
||||
= f.label :description, "Details"
|
||||
.input
|
||||
= f.text_area :description, maxlength: 250, class: "xxlarge js-gfm-input", rows: 4
|
||||
|
||||
.form-actions
|
||||
= f.submit 'Save group', class: "btn btn-save"
|
||||
|
||||
%hr
|
||||
|
||||
|
||||
|
|
|
@ -9,9 +9,16 @@
|
|||
Group name is
|
||||
.input
|
||||
= f.text_field :name, placeholder: "Ex. OpenSource", class: "xxlarge left"
|
||||
|
||||
= f.submit 'Create group', class: "btn btn-create"
|
||||
%hr
|
||||
|
||||
.clearfix.group-description-holder
|
||||
= f.label :description, "Details"
|
||||
.input
|
||||
= f.text_area :description, maxlength: 250, class: "xxlarge js-gfm-input", rows: 4
|
||||
|
||||
.form-actions
|
||||
= f.submit 'Create group', class: "btn btn-create"
|
||||
|
||||
|
||||
.padded
|
||||
%ul
|
||||
%li Group is kind of directory for several projects
|
||||
|
|
|
@ -12,6 +12,9 @@
|
|||
%p.nothing_here_message Project activity will be displayed here
|
||||
.loading.hide
|
||||
.side.span4
|
||||
- if @group.description.present?
|
||||
.description.well.light
|
||||
= @group.description
|
||||
= render "projects", projects: @projects
|
||||
%div
|
||||
%span.rss-icon
|
||||
|
|
|
@ -12,13 +12,20 @@
|
|||
.input
|
||||
= f.text_field :name, placeholder: "Ex. OpenSource", class: "xlarge left"
|
||||
|
||||
.clearfix.team-description-holder
|
||||
= f.label :description, "Details"
|
||||
.input
|
||||
= f.text_area :description, maxlength: 250, class: "xxlarge js-gfm-input", rows: 4
|
||||
|
||||
.clearfix
|
||||
= f.label :path do
|
||||
Team path is
|
||||
.input
|
||||
= f.text_field :path, placeholder: "opensource", class: "xlarge left"
|
||||
|
||||
.form-actions
|
||||
= f.submit 'Save team changes', class: "btn btn-save"
|
||||
= f.submit 'Save team changes', class: "btn btn-primary"
|
||||
= link_to 'Delete team', team_path(@team), method: :delete, confirm: "You are shure?", class: "btn btn-remove pull-right"
|
||||
.span5
|
||||
.ui-box
|
||||
%h5.title Remove team
|
||||
|
@ -26,4 +33,3 @@
|
|||
%p
|
||||
Removed team can not be restored!
|
||||
= link_to 'Remove team', team_path(@team), method: :delete, confirm: "You are sure?", class: "btn btn-remove btn-small"
|
||||
|
||||
|
|
|
@ -9,9 +9,15 @@
|
|||
Team name is
|
||||
.input
|
||||
= f.text_field :name, placeholder: "Ex. Ruby Developers", class: "xxlarge left"
|
||||
|
||||
= f.submit 'Create team', class: "btn btn-create"
|
||||
%hr
|
||||
|
||||
.clearfix.team-description-holder
|
||||
= f.label :description, "Details"
|
||||
.input
|
||||
= f.text_area :description, maxlength: 250, class: "xxlarge js-gfm-input", rows: 4
|
||||
|
||||
.form-actions
|
||||
= f.submit 'Create team', class: "btn btn-create"
|
||||
|
||||
.padded
|
||||
%ul
|
||||
%li All created teams are public (users can view who enter into team and which project are assigned for this team)
|
||||
|
|
|
@ -11,6 +11,9 @@
|
|||
%p.nothing_here_message Projects activity will be displayed here
|
||||
.loading.hide
|
||||
.side.span4
|
||||
- if @team.description.present?
|
||||
.description.well.light
|
||||
= @team.description
|
||||
= render "projects", projects: @projects
|
||||
%div
|
||||
%span.rss-icon
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
class AddDescriptionToNamsespace < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :namespaces, :description, :string, default: '', null: false
|
||||
end
|
||||
end
|
5
db/migrate/20130207104426_add_description_to_teams.rb
Normal file
5
db/migrate/20130207104426_add_description_to_teams.rb
Normal file
|
@ -0,0 +1,5 @@
|
|||
class AddDescriptionToTeams < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :user_teams, :description, :string, default: '', null: false
|
||||
end
|
||||
end
|
16
db/schema.rb
16
db/schema.rb
|
@ -106,12 +106,13 @@ ActiveRecord::Schema.define(:version => 20130220133245) do
|
|||
add_index "milestones", ["project_id"], :name => "index_milestones_on_project_id"
|
||||
|
||||
create_table "namespaces", :force => true do |t|
|
||||
t.string "name", :null => false
|
||||
t.string "path", :null => false
|
||||
t.integer "owner_id", :null => false
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
t.string "name", :null => false
|
||||
t.string "path", :null => false
|
||||
t.integer "owner_id", :null => false
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
t.string "type"
|
||||
t.string "description", :default => "", :null => false
|
||||
end
|
||||
|
||||
add_index "namespaces", ["name"], :name => "index_namespaces_on_name"
|
||||
|
@ -232,8 +233,9 @@ ActiveRecord::Schema.define(:version => 20130220133245) do
|
|||
t.string "name"
|
||||
t.string "path"
|
||||
t.integer "owner_id"
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
t.string "description", :default => "", :null => false
|
||||
end
|
||||
|
||||
create_table "users", :force => true do |t|
|
||||
|
|
|
@ -25,11 +25,13 @@ class AdminGroups < Spinach::FeatureSteps
|
|||
|
||||
And 'submit form with new group info' do
|
||||
fill_in 'group_name', :with => 'gitlab'
|
||||
fill_in 'group_description', :with => 'Group description'
|
||||
click_button "Create group"
|
||||
end
|
||||
|
||||
Then 'I should see newly created group' do
|
||||
page.should have_content "Group: gitlab"
|
||||
page.should have_content "Group description"
|
||||
end
|
||||
|
||||
Then 'I should be redirected to group page' do
|
||||
|
|
|
@ -18,6 +18,7 @@ class AdminTeams < Spinach::FeatureSteps
|
|||
|
||||
And 'submit form with new team info' do
|
||||
fill_in 'user_team_name', with: 'gitlab'
|
||||
fill_in 'user_team_description', with: 'description'
|
||||
click_button 'Create team'
|
||||
end
|
||||
|
||||
|
@ -27,6 +28,7 @@ class AdminTeams < Spinach::FeatureSteps
|
|||
|
||||
And 'I should see newly created team' do
|
||||
page.should have_content "Team: gitlab"
|
||||
page.should have_content "description"
|
||||
end
|
||||
|
||||
When 'I visit admin teams page' do
|
||||
|
|
|
@ -69,12 +69,14 @@ class Groups < Spinach::FeatureSteps
|
|||
end
|
||||
|
||||
And 'submit form with new group info' do
|
||||
fill_in 'group_name', :with => 'Samurai'
|
||||
fill_in 'group_name', with: 'Samurai'
|
||||
fill_in 'group_description', with: 'Tokugawa Shogunate'
|
||||
click_button "Create group"
|
||||
end
|
||||
|
||||
Then 'I should see newly created group' do
|
||||
page.should have_content "Samurai"
|
||||
page.should have_content "Tokugawa Shogunate"
|
||||
page.should have_content "You will only see events from projects in this group"
|
||||
end
|
||||
|
||||
|
|
|
@ -44,9 +44,16 @@ class Userteams < Spinach::FeatureSteps
|
|||
|
||||
And 'I submit form with new team info' do
|
||||
fill_in 'name', with: 'gitlab'
|
||||
|
||||
fill_in 'user_team_description', with: 'team description'
|
||||
click_button 'Create team'
|
||||
end
|
||||
|
||||
And 'I should see newly created team' do
|
||||
page.should have_content "gitlab"
|
||||
page.should have_content "team description"
|
||||
end
|
||||
|
||||
Then 'I should be redirected to new team page' do
|
||||
team = UserTeam.last
|
||||
current_path.should == team_path(team)
|
||||
|
|
|
@ -20,6 +20,7 @@ Feature: UserTeams
|
|||
When I click to "New team" link
|
||||
And I submit form with new team info
|
||||
Then I should be redirected to new team page
|
||||
Then I should see newly created team
|
||||
|
||||
Scenario: I should see team dashboard list
|
||||
When I have teams with projects and members
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
FactoryGirl.define do
|
||||
factory :user_team do
|
||||
sequence(:name) { |n| "team#{n}" }
|
||||
sequence(:description) { |n| "team_description#{n}" }
|
||||
path { name.downcase.gsub(/\s/, '_') }
|
||||
owner
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue