Merge pull request #21 from beatriceo/page

Page
This commit is contained in:
Beatrice Olivera 2018-08-30 20:09:19 +01:00 committed by GitHub
commit f911f91da5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 272 additions and 4 deletions

1
.gitignore vendored
View File

@ -13,3 +13,4 @@ node_modules
yarn-error.log yarn-error.log
.byebug_history .byebug_history
.env* .env*
.env*

View File

@ -16,6 +16,8 @@ gem 'sass-rails'
gem 'simple_form' gem 'simple_form'
gem 'uglifier' gem 'uglifier'
gem 'webpacker' gem 'webpacker'
gem 'cloudinary'
gem 'carrierwave', '~> 1.2'
group :development do group :development do
gem 'web-console', '>= 3.3.0' gem 'web-console', '>= 3.3.0'

View File

@ -45,6 +45,7 @@ GEM
arel (9.0.0) arel (9.0.0)
autoprefixer-rails (9.1.3) autoprefixer-rails (9.1.3)
execjs execjs
aws_cf_signer (0.1.3)
bcrypt (3.1.12) bcrypt (3.1.12)
bindex (0.5.0) bindex (0.5.0)
bootsnap (1.3.1) bootsnap (1.3.1)
@ -54,6 +55,13 @@ GEM
sass (>= 3.3.4) sass (>= 3.3.4)
builder (3.2.3) builder (3.2.3)
byebug (10.0.2) byebug (10.0.2)
carrierwave (1.2.3)
activemodel (>= 4.0.0)
activesupport (>= 4.0.0)
mime-types (>= 1.16)
cloudinary (1.9.1)
aws_cf_signer
rest-client
coderay (1.1.2) coderay (1.1.2)
concurrent-ruby (1.0.5) concurrent-ruby (1.0.5)
crass (1.0.4) crass (1.0.4)
@ -63,6 +71,8 @@ GEM
railties (>= 4.1.0, < 6.0) railties (>= 4.1.0, < 6.0)
responders responders
warden (~> 1.2.3) warden (~> 1.2.3)
domain_name (0.5.20180417)
unf (>= 0.0.5, < 1.0.0)
dotenv (2.5.0) dotenv (2.5.0)
dotenv-rails (2.5.0) dotenv-rails (2.5.0)
dotenv (= 2.5.0) dotenv (= 2.5.0)
@ -74,6 +84,8 @@ GEM
sassc (>= 1.11) sassc (>= 1.11)
globalid (0.4.1) globalid (0.4.1)
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
http-cookie (1.0.3)
domain_name (~> 0.5)
i18n (1.1.0) i18n (1.1.0)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
jbuilder (2.7.0) jbuilder (2.7.0)
@ -90,12 +102,16 @@ GEM
marcel (0.3.2) marcel (0.3.2)
mimemagic (~> 0.3.2) mimemagic (~> 0.3.2)
method_source (0.9.0) method_source (0.9.0)
mime-types (3.2.2)
mime-types-data (~> 3.2015)
mime-types-data (3.2018.0812)
mimemagic (0.3.2) mimemagic (0.3.2)
mini_mime (1.0.1) mini_mime (1.0.1)
mini_portile2 (2.3.0) mini_portile2 (2.3.0)
minitest (5.11.3) minitest (5.11.3)
msgpack (1.2.4) msgpack (1.2.4)
multi_json (1.13.1) multi_json (1.13.1)
netrc (0.11.0)
nio4r (2.3.1) nio4r (2.3.1)
nokogiri (1.8.4) nokogiri (1.8.4)
mini_portile2 (~> 2.3.0) mini_portile2 (~> 2.3.0)
@ -147,6 +163,10 @@ GEM
responders (2.4.0) responders (2.4.0)
actionpack (>= 4.2.0, < 5.3) actionpack (>= 4.2.0, < 5.3)
railties (>= 4.2.0, < 5.3) railties (>= 4.2.0, < 5.3)
rest-client (2.0.2)
http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 4.0)
netrc (~> 0.8)
sass (3.5.7) sass (3.5.7)
sass-listen (~> 4.0.0) sass-listen (~> 4.0.0)
sass-listen (4.0.0) sass-listen (4.0.0)
@ -183,6 +203,9 @@ GEM
thread_safe (~> 0.1) thread_safe (~> 0.1)
uglifier (4.1.18) uglifier (4.1.18)
execjs (>= 0.3.0, < 3) execjs (>= 0.3.0, < 3)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.5)
warden (1.2.7) warden (1.2.7)
rack (>= 1.0) rack (>= 1.0)
web-console (3.6.2) web-console (3.6.2)
@ -205,6 +228,8 @@ DEPENDENCIES
autoprefixer-rails autoprefixer-rails
bootsnap bootsnap
bootstrap-sass (~> 3.3) bootstrap-sass (~> 3.3)
carrierwave (~> 1.2)
cloudinary
devise devise
dotenv-rails dotenv-rails
font-awesome-sass (~> 5.0.9) font-awesome-sass (~> 5.0.9)

View File

@ -19,3 +19,4 @@ body {
background-color: $background; background-color: $background;
} }
@import "devise/index"; @import "devise/index";
@import "users/index";

View File

@ -0,0 +1,33 @@
.profile-container {
margin: 0 1in;
display: flex;
justify-content: space-between;
align-items: center;
height: calc(100vh - 4.5em); // 4.5em is height of navbar
form {
flex-grow: 1;
.description {
width: 100%;
height: 5em;
}
}
.profile-pic {
display: flex;
flex-direction: column;
align-items: center;
margin-left: 3em;
img {
max-width: 50vw;
}
}
}
.profile-form {
display: grid;
grid-template-columns: 1fr 1fr;
color: white;
}

View File

@ -0,0 +1,2 @@
@import "show";
@import "edit";

View File

@ -0,0 +1,51 @@
.user-container {
margin: 0 1in;
height: calc(100vh - 4.5em); //4.5em is height of navbar.
display:flex;
flex-direction: column;
justify-content: center;
h2 {
font-size: 1.5em;
}
.profile {
background: #33333D;
display: flex;
.flex-end {
margin-left: auto;
display:flex;
align-items: center;
a:first-child {
margin-right: .5em;
}
}
.profile-pic {
display: flex;
align-items: center;
margin-right: 3em;
img {
width: 10em;
}
}
.profile-text {
display: flex;
flex-direction: column;
justify-content: center;
h1 {
margin: 0 0 .5em 0 ;
}
h2 {
margin: 0;
}
.italics {
font-style: italic;
color: white;
}
}
}
}

View File

@ -0,0 +1,39 @@
class UsersController < ApplicationController
before_action :find_user, only: [:edit, :update, :show, :destroy]
def edit; end
def update
@user.update(user_params)
redirect_to user_edit_path(@user)
end
def create
# Untested Code
user = User.new(user_params)
authorize user # I don't know where to put this TODO: Test this method
if user.save
redirect_to user_path(user)
else
raise
end
end
def show; end
def destroy
@user.destroy
redirect_to root_path
end
private
def find_user
@user = User.find(params[:id])
#authorize @user
end
def user_params
params.require(:user).permit(:email, :first_name, :last_name, :description, :photo)
end
end

View File

@ -1,4 +1,5 @@
class User < ApplicationRecord class User < ApplicationRecord
# Include default devise modules. Others available are: # Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable, devise :database_authenticatable, :registerable,
@ -9,6 +10,8 @@ class User < ApplicationRecord
has_many :chat_rooms, through: :chat_room_participations has_many :chat_rooms, through: :chat_room_participations
has_many :requests has_many :requests
mount_uploader :photo, PhotoUploader
def contacts def contacts
self.connections.map do |connection| self.connections.map do |connection|
connection.contact connection.contact

View File

@ -0,0 +1,3 @@
class PhotoUploader < CarrierWave::Uploader::Base
include Cloudinary::CarrierWave
end

View File

@ -5,11 +5,28 @@
<div class="right-align"> <div class="right-align">
<div class="links"> <div class="links">
<div class="active"><%= link_to "Dashboard", "#" %></div> <div class="active"><%= link_to "Dashboard", contacts_path %></div>
<div><%= link_to "Settings", "#" %></div> <div><%= link_to "Settings", "#" %></div>
</div> </div>
<div class="profile"> <div class="profile">
<%= image_tag "https://avatars2.githubusercontent.com/u/38472180?v=4", class: "img-circle"%> <% if current_user.nil? %>
<%= link_to "Login", new_user_session_path %>
<% else %>
<div class="dropdown">
<div data-toggle="dropdown">
<% if current_user.photo.url.nil? %>
<img src="https://upload.wikimedia.org/wikipedia/commons/8/89/Portrait_Placeholder.png" class="avatar dropdown-toggle img-circle">
<% else %>
<%= cl_image_tag current_user.photo, class: "avatar dropdown-toggle img-circle"%>
<% end %>
</div>
<ul class="dropdown-menu dropdown-menu-right">
<!-- <li><a href="#">Profile</a></li> -->
<li><%= link_to "Profile", user_path(current_user) %></li>
<li><%= link_to "Logout", destroy_user_session_path %></li>
</ul>
</div>
<% end %>
</div> </div>
</div> </div>
</div> </div>

View File

@ -0,0 +1,32 @@
<div class="profile-container">
<%= simple_form_for(@user) do |t| %>
<div class="profile-form">
<div>
<%= t.input :email %>
<%= t.input :first_name %>
<%= t.input :last_name %>
<%= t.input :password %>
<%= t.input :photo %>
<%= t.submit :Save, class: "btn btn-primary save-btn form-control" %>
<p></p>
<%= link_to "View my profile", user_path(@user), class: "btn btn-primary save-btn form-control" %>
</div>
<div class="profile-pic">
<% if @user.photo.url.nil? %>
<%= image_tag "https://upload.wikimedia.org/wikipedia/commons/8/89/Portrait_Placeholder.png"%>
<% else %>
<%= cl_image_tag current_user.photo%>
<% end %>
<%#= t.input_field :photo, onchange: 'this.form.submit();' %>
<%#= t.input_field :photo, as: :hidden %>
</div>
</div>
<% end %>
</div>

View File

@ -0,0 +1,2 @@
<h1>Users#index</h1>
<p>Find me in app/views/users/index.html.erb</p>

View File

@ -0,0 +1,2 @@
<h1>Users#index</h1>
<p>Find me in app/views/users/new.html.erb</p>

View File

@ -0,0 +1,26 @@
<div class="user-container">
<div class="profile">
<div class="profile-pic">
<% if @user.photo.url.nil? %>
<%= image_tag "https://upload.wikimedia.org/wikipedia/commons/8/89/Portrait_Placeholder.png", class: "img-circle"%>
<% else %>
<%= cl_image_tag @user.photo, class: "img-circle"%>
<% end %>
</div>
<div class="profile-text">
<h1><%= @user.first_name %> <%= @user.last_name %></h1>
<h2 class="italics" ><%= @user.email %></h2>
</div>
<div class="flex-end">
<%= link_to "Edit Information", user_edit_path(@user), class: "btn btn-primary" %>
<%= link_to "Delete Account", user_path(@user), class: "btn btn-danger", method: :delete, data: {
confirm: "Are you sure?"
} %>
</div>
</div>

BIN
boris_retreat_2017.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

View File

@ -1 +0,0 @@
c8f4c6e010b5d8a06c5df4d1923a973a

View File

@ -34,4 +34,10 @@ Rails.application.routes.draw do
mount ActionCable.server, at: '/cable' mount ActionCable.server, at: '/cable'
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
get '/home', to: 'pages#home' get '/home', to: 'pages#home'
get '/users/:id', to: 'users#show', as: :user
get '/users/:id/edit', to: 'users#edit', as: :user_edit
patch '/users/:id', to: 'users#update'
delete '/users/:id', to: 'users#destroy'
end end

View File

@ -0,0 +1,7 @@
class AddFirstNameToUsers < ActiveRecord::Migration[5.2]
def change
add_column :users, :first_name, :string
add_column :users, :last_name, :string
add_column :users, :photo, :string
end
end

View File

@ -54,6 +54,9 @@ ActiveRecord::Schema.define(version: 2018_08_29_123204) do
t.datetime "remember_created_at" t.datetime "remember_created_at"
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.string "first_name"
t.string "last_name"
t.string "photo"
t.index ["email"], name: "index_users_on_email", unique: true t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
end end

BIN
san_francisco.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

View File

@ -0,0 +1,7 @@
require 'test_helper'
class UserControllerTest < ActionDispatch::IntegrationTest
# test "the truth" do
# assert true
# end
end

View File

@ -0,0 +1,7 @@
require 'test_helper'
class UsersControllerTest < ActionDispatch::IntegrationTest
# test "the truth" do
# assert true
# end
end