fixing conflicts [#7]

This commit is contained in:
rgarcia
2015-07-18 17:40:38 +02:00
19 changed files with 191 additions and 10 deletions

View File

@@ -1,6 +1,7 @@
class DebatesController < ApplicationController
before_action :set_debate, only: [:show, :edit, :update]
before_action :authenticate_user!, only: [:new, :create]
def index
@debates = Debate.all
end
@@ -16,7 +17,9 @@ class DebatesController < ApplicationController
end
def create
@debate = Debate.create(debate_params)
@debate = Debate.new(debate_params)
@debate.author = current_user
@debate.save
respond_with @debate
end

View File

@@ -0,0 +1,9 @@
class RegistrationsController < Devise::RegistrationsController
private
def sign_up_params
params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation)
end
end

View File

@@ -1,8 +1,11 @@
class Debate < ActiveRecord::Base
acts_as_commentable
belongs_to :author, class_name: 'User', foreign_key: 'author_id'
validates :title, presence: true
validates :description, presence: true
validates :author, presence: true
validates :terms_of_service, acceptance: { allow_nil: false }, on: :create
end
end

View File

@@ -1,6 +1,8 @@
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
def name
"#{first_name} #{last_name}"
end
end

View File

@@ -1,6 +1,9 @@
<div class='debate'>
<p><%= link_to debate.title, debate %></p>
<p><%= debate.description %></p>
<p>Creado el: <%= l debate.created_at.to_date %></p>
<p>
Creado el: <%= l debate.created_at.to_date %>
por: <%= debate.author.name %>
</p>
</div>
<br/><br/>

View File

@@ -20,7 +20,7 @@
<p>Explica con todo el detalle que puedas y de una manera sencilla la idea y que crees que conseguiríamos con ella</p>
<%= f.text_area :description %>
<% if action_name == 'new' %>
<% if @debate.new_record? %>
<%= f.check_box :terms_of_service %>
Acepto la política de privacidad y el aviso legal
<% end %>

View File

@@ -1,7 +1,10 @@
<div id="debate-<%= @debate.id %>">
<p><%= @debate.title %></p>
<p><%= @debate.description %></p>
<p>Creado el: <%= l @debate.created_at.to_date %></p>
<p>
Creado el: <%= l @debate.created_at.to_date %>
por: <%= @debate.author.name %>
</p>
</div>
Deja tu comentario

View File

@@ -0,0 +1,9 @@
<% if user_signed_in? %>
<li>
<%= link_to('Logout', destroy_user_session_path, :method => :delete) %>
</li>
<% else %>
<li>
<%= link_to('Login', new_user_session_path) %>
</li>
<% end %>

View File

@@ -3,9 +3,20 @@
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div class="field">
<%= f.label :first_name %><br />
<%= f.text_field :first_name, autofocus: true %>
</div>
<div class="field">
<%= f.label :last_name %><br />
<%= f.text_field :last_name %>
</div>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true %>
<%= f.email_field :email %>
</div>
<div class="field">

View File

@@ -14,6 +14,9 @@
<body style="margin-left:50px">
<p class="alert"><%= notice %></p>
<p class="alert"><%= alert %></p>
<%= render 'devise/menu/login_items' %>
<%= yield %>
</body>
</html>

View File

@@ -0,0 +1,58 @@
es:
devise:
confirmations:
confirmed: "Tu cuenta ha sido confirmada."
send_instructions: "Recibirás un correo electrónico en unos minutos con instrucciones sobre cómo restablecer tu contraseña."
send_paranoid_instructions: "Si tu correo electrónico existe en nuestra base de datos recibirás un correo electrónico en unos minutos con instrucciones sobre cómo restablecer tu contraseña."
failure:
already_authenticated: "Ya has iniciado sesión."
inactive: "Tu cuenta aún no ha sido activada."
invalid: "%{authentication_keys} o contraseña inválidos."
locked: "Tu cuenta ha sido bloqueada."
last_attempt: "Tienes un último intento antes de que tu cuenta sea bloqueada."
not_found_in_database: "%{authentication_keys} o contraseña inválidos."
timeout: "Tu sesión ha expirado, por favor inicia sesión nuevamente para continuar."
unauthenticated: "Necesitas iniciar sesión o registrarte para continuar."
unconfirmed: "Debes confirmar tu cuenta para continuar."
mailer:
confirmation_instructions:
subject: "Instrucciones de confirmación"
reset_password_instructions:
subject: "Instrucciones para restablecer tu contraseña"
unlock_instructions:
subject: "Instrucciones de desbloqueo"
omniauth_callbacks:
failure: "No se te ha podido autorizar de %{kind} debido a \"%{reason}\"."
success: "Identificado correctamente de %{kind}."
passwords:
no_token: "No puedes acceder a esta página si no es a través de un enlace para restablecer la contraseña. Si has accedido desde el enlace para restablecer la contraseña, asegúrate de que la URL esté completa."
send_instructions: "Recibirás un correo electrónico con instrucciones sobre cómo restablecer tu contraseña en unos minutos."
send_paranoid_instructions: "Si tu correo electrónico existe en nuestra base de datos, recibirás un enlace para restablecer la contraseña en unos minutos."
updated: "Tu contraseña ha cambiado correctamente. Has sido identificado correctamente."
updated_not_active: "Tu contraseña se ha cambiado correctamente."
registrations:
destroyed: "¡Adiós! Tu cuenta ha sido cancelada. Esperamos volver a verte pronto."
signed_up: "¡Bienvenido! Has sido identificado."
signed_up_but_inactive: "Te has registrado correctamente, pero no has podido iniciar sesión porque tu cuenta no ha sido activada."
signed_up_but_locked: "Te has registrado correctamente, pero no has podido iniciar sesión porque tu cuenta está bloqueada."
signed_up_but_unconfirmed: "Se te ha enviado un mensaje con un enlace de confirmación. Por favor visita el enlace para activar tu cuenta."
update_needs_confirmation: "Has actualizado tu cuenta correctamente, sin embargo necesitamos verificar tu nueva cuenta de correo. Por favor revisa tu correo electrónico y visita el enlace para finalizar la confirmación de tu nueva dirección de correo electrónico."
updated: "Has actualizado tu cuenta correctamente."
sessions:
signed_in: "Has iniciado sesión correctamente."
signed_out: "Has cerrado la sesión correctamente."
already_signed_out: "Has cerrado la sesión correctamente."
unlocks:
send_instructions: "Recibirás un correo electrónico en unos minutos con instrucciones sobre cómo desbloquear tu cuenta."
send_paranoid_instructions: "Si tu cuenta existe, recibirás un correo electrónico en unos minutos con instrucciones sobre cómo desbloquear tu cuenta."
unlocked: "Tu cuenta ha sido desbloqueada. Por favor inicia sesión para continuar."
errors:
messages:
already_confirmed: "ya has sido confirmado, por favor intenta iniciar sesión."
confirmation_period_expired: "necesitas ser confirmado en %{period}, por favor vuelve a solicitarla."
expired: "ha expirado, por favor vuelve a solicitarla."
not_found: "no se ha encontrado."
not_locked: "no estaba bloqueado."
not_saved:
one: "1 error impidió que este %{resource} fuera guardado:"
other: "%{count} errores impidieron que este %{resource} fuera guardado:"

View File

@@ -1,5 +1,6 @@
Rails.application.routes.draw do
devise_for :users
devise_for :users, :controllers => { registrations: 'registrations' }
# The priority is based upon order of creation: first created -> highest priority.
# See how all your routes lay out with "rake routes".

View File

@@ -0,0 +1,6 @@
class AddFirstNameAndLastNameToUsers < ActiveRecord::Migration
def change
add_column :users, :first_name, :string
add_column :users, :last_name, :string
end
end

View File

@@ -51,6 +51,8 @@ ActiveRecord::Schema.define(version: 20150718091702) do
t.string "last_sign_in_ip"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "first_name"
t.string "last_name"
end
add_index "users", ["email"], name: "index_users_on_email", unique: true

View File

@@ -1,8 +1,17 @@
FactoryGirl.define do
factory :user do
first_name 'Manuela'
last_name 'Carmena'
sequence(:email) { |n| "manuela#{n}@madrid.es" }
password 'judgmentday'
end
factory :debate do
title 'Debate title'
description 'Debate description'
terms_of_service '1'
association :author, factory: :user
end
factory :comment do

View File

@@ -12,6 +12,7 @@ feature 'Debates' do
expect(page).to have_content "Debate title"
expect(page).to have_content "Debate description"
expect(page).to have_content "Creado el: #{I18n.l Date.today}"
expect(page).to have_content "por: #{Debate.first.author.name}"
end
end
@@ -23,9 +24,13 @@ feature 'Debates' do
expect(page).to have_content "Debate title"
expect(page).to have_content "Debate description"
expect(page).to have_content "Creado el: #{I18n.l Date.today}"
expect(page).to have_content "por: #{debate.author.name}"
end
scenario 'Create' do
author = create(:user)
login_as(author)
visit new_debate_path
fill_in 'debate_title', with: 'Acabar con los desahucios'
fill_in 'debate_description', with: 'Esto es un tema muy importante porque...'
@@ -36,6 +41,8 @@ feature 'Debates' do
expect(page).to have_content 'Debate creado correctamente'
expect(page).to have_content 'Acabar con los desahucios'
expect(page).to have_content 'Esto es un tema muy importante porque...'
expect(page).to have_content "Creado el: #{I18n.l Date.today}"
expect(page).to have_content "por: #{author.name}"
end
scenario 'Update' do

View File

@@ -0,0 +1,43 @@
require 'rails_helper'
feature 'Users' do
scenario 'Sign up' do
visit '/'
click_link 'Login'
click_link 'Sign up'
fill_in 'user_first_name', with: 'Manuela'
fill_in 'user_last_name', with: 'Carmena'
fill_in 'user_email', with: 'manuela@madrid.es'
fill_in 'user_password', with: 'judgementday'
fill_in 'user_password_confirmation', with: 'judgementday'
click_button 'Sign up'
expect(page).to have_content '¡Bienvenido! Has sido identificado.'
end
scenario 'Sign in' do
user = create(:user, email: 'manuela@madrid.es', password: 'judgementday')
visit '/'
click_link 'Login'
fill_in 'user_email', with: 'manuela@madrid.es'
fill_in 'user_password', with: 'judgementday'
click_button 'Log in'
expect(page).to have_content 'Has iniciado sesión correctamente.'
end
scenario 'Sign out' do
user = create(:user)
login_as(user)
visit "/"
click_link 'Logout'
expect(page).to have_content 'Has cerrado la sesión correctamente.'
end
end

View File

@@ -10,6 +10,11 @@ describe Debate do
expect(@debate).to be_valid
end
it "should not be valid without an author" do
@debate.author = nil
expect(@debate).to_not be_valid
end
it "should not be valid without a title" do
@debate.title = nil
expect(@debate).to_not be_valid

View File

@@ -6,6 +6,10 @@ require 'spec_helper'
require 'rspec/rails'
require 'capybara/rails'
require 'capybara/rspec'
include Warden::Test::Helpers
Warden.test_mode!
ActiveRecord::Migration.maintain_test_schema!
RSpec.configure do |config|