diff --git a/app/controllers/project_users_controller.rb b/app/controllers/project_users_controller.rb index b929128..0bbcf10 100644 --- a/app/controllers/project_users_controller.rb +++ b/app/controllers/project_users_controller.rb @@ -1,5 +1,20 @@ class ProjectUsersController < ApplicationController + def new + @project = Project.find(params[:project_id]) + @project_user = ProjectUser.new + @project_user.project_id = params[:project_id] + end def create + @project_user = ProjectUser.new + @project_user.project_id = params[:project_id] + user = User.find_by_email(params[:project_user][:email]) + @project_user.user_id = user.id if user + if @project_user.save + redirect_to project_path(params[:project_id]) + else + render :new, flash[:errors] << t('project_users.actions.add_user.failed') + + end end def destroy end diff --git a/app/models/project_user.rb b/app/models/project_user.rb index 7c5b40b..c1dc946 100644 --- a/app/models/project_user.rb +++ b/app/models/project_user.rb @@ -1,4 +1,9 @@ class ProjectUser < ActiveRecord::Base belongs_to :project belongs_to :user + + validates_presence_of :project_id, :user_id + + def email + end end diff --git a/app/views/project_users/new.html.haml b/app/views/project_users/new.html.haml new file mode 100644 index 0000000..7f5971c --- /dev/null +++ b/app/views/project_users/new.html.haml @@ -0,0 +1,7 @@ +%p= @project.name +%p= t('projects.add_user') + += form_for @project_user do |f| + = f.label :email, t('activerecord.attributes.user.email') + = f.text_field :email + = f.submit t('projects.add_user') diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml index a9e9772..44bff42 100644 --- a/app/views/projects/show.html.haml +++ b/app/views/projects/show.html.haml @@ -1,5 +1,10 @@ %h2= "Project #{@project.name}" %p= "Api Token: #{@project.api_token}" +%p= t('projects.watchers') +%ul + - @project.users.each do |watcher| + %li= watcher.email +%p= link_to t('projects.add_user'), new_project_user_path(:project_id => @project.id) %p %b Issues: - @project.issues.each do |issue| diff --git a/config/locales/en.yml b/config/locales/en.yml index 0dcd4d8..ac4d679 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -20,6 +20,7 @@ en: delete: Delete save: Save project add_user: Add user + watchers: Watchers actions: destroy: successful: Project was successfully destroyed @@ -32,6 +33,11 @@ en: new: New user watchers: Watchers + project_users: + actions: + add_user: + successful: User successfully added as a watcher + failed: Cannot add user as a watcher sign_in: Sign in sign_out: Sign out sign_up: Sign up diff --git a/config/routes.rb b/config/routes.rb index c0aca8e..b368682 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -12,7 +12,7 @@ devise_for :users resources :projects do - resources :users, :controller => "project_user" + resources :users, :controller => "project_users" end resources :projects do diff --git a/spec/acceptance/projects_spec.rb b/spec/acceptance/projects_spec.rb index 32be691..9597025 100644 --- a/spec/acceptance/projects_spec.rb +++ b/spec/acceptance/projects_spec.rb @@ -90,18 +90,16 @@ end scenario "owner should be able to add/remove watcher to/from the project" do - pending("will do it in a moment") @bob = @website.has(:user) @user.visit(project_path(@project)) @user.should_see_translated('projects.add_user') @user.click_translated('projects.add_user') @user.should_see(@project.name) - @user.should_see_translated('user.email') - @user.fill_in("user_email", :with => @bob.email) + @user.should_see_translated('activerecord.attributes.user.email') + @user.fill_in("project_user_email", :with => @bob.email) @user.click_translated('projects.add_user') @user.should_see(@project.name, @bob.email) @user.should_see_translated('users.watchers') - @user.click(@bob.email) end end end