From 310ae0e9bbb566cbc4a899b848b86f78d5569eda Mon Sep 17 00:00:00 2001 From: Nate Date: Sat, 13 Feb 2016 12:15:07 -0500 Subject: [PATCH 01/10] update admin user seed and display welcome index if no user --- app/controllers/welcome_controller.rb | 4 ++-- db/seeds.rb | 24 ++++++++++-------------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index bfa9f0f..b503f51 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -1,5 +1,5 @@ -class WelcomeController < AuthenticatedController +class WelcomeController < ApplicationController def index - redirect_to user_path(current_user) + redirect_to user_path(current_user) if current_user end end diff --git a/db/seeds.rb b/db/seeds.rb index 76bd3d5..d41ec9f 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1,13 +1,3 @@ -# This file should contain all the record creation needed to seed the database with its default values. -# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). -# -# Examples: -# -# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) -# Mayor.create(name: 'Emanuel', city: cities.first) - -# Generate users - 10.times do password = Faker::Lorem.characters(10) user = User.create( @@ -18,16 +8,22 @@ email_confirmed: true ) end -users = User.all -admin = User.create( +password = "helloworld" +password_salt = Encryptor.generate_salt + +User.create( name: "Admin", email: "admin@admin.com", - password: "helloworld", - password_confirmation: "helloworld", + password: password, + password_confirmation: password, + password_salt: password_salt, + password_hash: Encryptor.digest_password(password, password_salt), email_confirmed: true ) +users = User.all + 50.times do Todo.create!( description: Faker::Hipster.sentence, From 9bdac8a38fcd33c9c4f802e5027eb42d9b775b5a Mon Sep 17 00:00:00 2001 From: Nate Date: Sat, 13 Feb 2016 14:48:58 -0500 Subject: [PATCH 02/10] remove bootstrap, basic nav bar styling and new images --- Gemfile | 2 +- Gemfile.lock | 9 ++---- app/assets/images/bg.jpg | Bin 0 -> 17813 bytes app/assets/images/blocitoff_logo.png | Bin 0 -> 20241 bytes app/assets/javascripts/application.js | 1 - app/assets/stylesheets/application.scss | 40 ++++++++++++++++++++++-- app/assets/stylesheets/welcome.scss | 20 ------------ app/views/layouts/application.html.erb | 21 ++++++------- app/views/welcome/index.html.erb | 6 ++-- 9 files changed, 55 insertions(+), 44 deletions(-) create mode 100644 app/assets/images/bg.jpg create mode 100644 app/assets/images/blocitoff_logo.png diff --git a/Gemfile b/Gemfile index 6e2e6a0..110978b 100644 --- a/Gemfile +++ b/Gemfile @@ -10,11 +10,11 @@ gem "jbuilder", "~> 2.0" gem "sdoc", "~> 0.4.0", group: :doc gem "figaro", "1.0" gem "puma" -gem "bootstrap-sass" gem "bcrypt" gem "responders", "~>2.0" gem "whenever" gem "interactor" +gem "normalize-rails" group :test do gem "coveralls" diff --git a/Gemfile.lock b/Gemfile.lock index 2be29cf..a7a8c5d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -40,9 +40,6 @@ GEM ast (2.1.0) astrolabe (1.3.1) parser (~> 2.2) - autoprefixer-rails (6.1.0.1) - execjs - json bcrypt (3.1.10) better_errors (2.1.1) coderay (>= 1.0.0) @@ -50,9 +47,6 @@ GEM rack (>= 0.9.0) binding_of_caller (0.7.2) debug_inspector (>= 0.0.1) - bootstrap-sass (3.3.5.1) - autoprefixer-rails (>= 5.0.0.1) - sass (>= 3.3.0) builder (3.2.2) byebug (8.2.0) capybara (2.5.0) @@ -143,6 +137,7 @@ GEM netrc (0.11.0) nokogiri (1.6.6.3) mini_portile (~> 0.6.0) + normalize-rails (3.0.3) notiffany (0.0.8) nenv (~> 0.1) shellany (~> 0.0) @@ -294,7 +289,6 @@ DEPENDENCIES bcrypt better_errors binding_of_caller - bootstrap-sass byebug capybara coffee-rails (~> 4.1.0) @@ -308,6 +302,7 @@ DEPENDENCIES interactor jbuilder (~> 2.0) jquery-rails + normalize-rails pg pry-byebug pry-rails diff --git a/app/assets/images/bg.jpg b/app/assets/images/bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..987b0fb0ed4091516aa06a26433164c72f540929 GIT binary patch literal 17813 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/blocitoff_logo.png b/app/assets/images/blocitoff_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..878b250331e7ebcf4a58d2aefcba63860fb21b16 GIT binary patch literal 20241 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 literal 0 HcmV?d00001 diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 1662961..e07c5a8 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -13,5 +13,4 @@ //= require jquery //= require jquery_ujs //= require turbolinks -//= require bootstrap //= require_tree . diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index bbfb6c0..1870914 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -10,8 +10,44 @@ * defined in the other CSS/SCSS files in this directory. It is generally better to create a new * file per style scope. * + *= require normalize-rails *= require_tree . *= require_self */ - @import "bootstrap-sprockets"; - @import "bootstrap"; + +@media (min-width: 640px) {} +@media (min-width: 1024px) {} + +.navbar { + position: relative; + padding: 0.5rem; +} + +.navbar .logo { + position: relative; + left: 3rem; +} + +.navbar .links-container { + display: table; + position: absolute; + top: 0; + right: 0; + margin: 0; + height: 80px; +} + +.links-container .navbar-link { + display: table-cell; + position: relative; + padding-left: 3rem; + padding-right: 3rem; + height: 100%; + text-transform: lowercase; + vertical-align: middle; +} + +.navbar-link a { + text-decoration: none; + color: #14d8b2; +} diff --git a/app/assets/stylesheets/welcome.scss b/app/assets/stylesheets/welcome.scss index 7d034c3..e69de29 100644 --- a/app/assets/stylesheets/welcome.scss +++ b/app/assets/stylesheets/welcome.scss @@ -1,20 +0,0 @@ -.footer { - position: absolute; - bottom: 0; - width: 100%; - height: 60px; - background-color: rgb(238, 238, 238); -} - -.container .text-muted { - margin: 20px 0; -} - -.text-muted { - color: rgb(240, 240, 240); -} - -body > .container { - padding: 100px; - text-align: center; -} diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 941e793..59ef1af 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -7,17 +7,16 @@ <%= csrf_meta_tags %> - <% if flash[:notice] %> -
+
<%= flash[:notice] %>
<% elsif flash[:error] %> -
+
<%= flash[:error] %>
<% elsif flash[:alert] %> -
+
<%= flash[:alert] %>
diff --git a/app/views/todos/_form.html.erb b/app/views/todos/_form.html.erb index fdcac8e..3023472 100644 --- a/app/views/todos/_form.html.erb +++ b/app/views/todos/_form.html.erb @@ -2,7 +2,11 @@
<%= flash[:error] %>
<% end %> -<%= form_for [user, todo] do |form| %> - <%= form.text_field :description, placeholder: "Description" %> - <%= form.submit "Save" %> -<% end %> +
+ <%= form_for [user, todo], remote: true do |form| %> + <%= form.text_field :description, placeholder: "Create Todo" %> + + <% end %> +
diff --git a/app/views/todos/_todo.html.erb b/app/views/todos/_todo.html.erb index 07fea43..280aaa2 100644 --- a/app/views/todos/_todo.html.erb +++ b/app/views/todos/_todo.html.erb @@ -1,9 +1,9 @@ -<%= content_tag :div, class: "media", id: "todo-#{todo.id}" do %> -
- <%= link_to "", todo, method: :delete, - remote: true, - class: "glyphicon glyphicon-ok" %> +<%= content_tag :div, class: "todo-container clearfix", id: "todo-#{todo.id}" do %> + <%= link_to "", todo, method: :delete, remote: true, class: "todo-checkbox" %> +
<%= todo.description %> +
+
(<%= todo.days_left %> days left)
<% end %> diff --git a/app/views/todos/create.js.erb b/app/views/todos/create.js.erb new file mode 100644 index 0000000..a753d24 --- /dev/null +++ b/app/views/todos/create.js.erb @@ -0,0 +1,6 @@ +<% if @todo.valid? %> + $('.todos-list').prepend("<%= escape_javascript(render(@todo)) %>"); + $('.todo-form').html("<%= escape_javascript(render partial: 'form', locals: { user: @user, todo: @user.todos.new }) %>"); +<% else %> + $('.todo-form').html("<%= escape_javascript(render partial: 'form', locals: { user: @user, todo: @user.todos.new }) %>"); +<% end %> diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index 255f7f9..adf10ae 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -1,7 +1,6 @@ -
-

<%= @user.name %>

-

<%= @user.email %>

-

Test subject since <%= @user.created_at.strftime("%B %d, %Y") %>

- <%= render @user.todos %> +
+
+ <%= render @user.todos %> +
<%= render partial: "todos/form", locals: { user: @user, todo: @user.todos.new } %> -
+ diff --git a/spec/controllers/todos_controller_spec.rb b/spec/controllers/todos_controller_spec.rb index 94d0b58..de85e96 100644 --- a/spec/controllers/todos_controller_spec.rb +++ b/spec/controllers/todos_controller_spec.rb @@ -10,8 +10,12 @@ end describe "POST #create" do - let(:todo) { build(:todo) } - let(:context) { double(:context, success?: true, user: user) } + let(:todo) { create(:todo, user_id: user.id) } + + let(:context) do + double(:context, success?: true, user: user, todo: todo) + end + let(:todo_params) { { description: todo.description } } let(:interactor_input) { { user: current_user, todo_params: todo_params } } let(:params) { { todo: todo_params, user_id: user.id } } diff --git a/spec/features/user_creates_todo_spec.rb b/spec/features/user_creates_todo_spec.rb index 94689f0..fef6274 100644 --- a/spec/features/user_creates_todo_spec.rb +++ b/spec/features/user_creates_todo_spec.rb @@ -14,7 +14,7 @@ within "form" do click_button "Sign In" end - fill_in "Description", with: "Meet up with the team" + fill_in "Create Todo", with: "Meet up with the team" click_button "Save" expect(page).to have_content("Meet up with the team") end diff --git a/spec/features/user_deletes_todo_spec.rb b/spec/features/user_deletes_todo_spec.rb index 71c27f9..bc6161d 100644 --- a/spec/features/user_deletes_todo_spec.rb +++ b/spec/features/user_deletes_todo_spec.rb @@ -14,9 +14,9 @@ within "form" do click_button "Sign In" end - fill_in "Description", with: "Meet up with the team" + fill_in "Create Todo", with: "Meet up with the team" click_button "Save" - click_link "" + page.find(".todo-checkbox").click expect(page).not_to have_content("Meetup with the team") end diff --git a/spec/features/user_visits_profile_spec.rb b/spec/features/user_visits_profile_spec.rb index 46a1364..80fa773 100644 --- a/spec/features/user_visits_profile_spec.rb +++ b/spec/features/user_visits_profile_spec.rb @@ -18,6 +18,6 @@ scenario "Visiting root redirects to profile" do visit root_path - expect(page).to have_content(user.name) + expect(page).to have_css(".todo-form") end end