From f73cc6986deef4762e8de3ea9c9b5ab8695132ed Mon Sep 17 00:00:00 2001 From: melissajimison Date: Tue, 19 Apr 2016 15:13:53 -0700 Subject: [PATCH 01/32] Finished base line --- tasklistapp/.gitignore | 17 ++ tasklistapp/Gemfile | 47 +++++ tasklistapp/Gemfile.lock | 160 ++++++++++++++++++ tasklistapp/README.rdoc | 28 +++ tasklistapp/Rakefile | 6 + tasklistapp/app/assets/images/.keep | 0 .../app/assets/javascripts/application.js | 16 ++ .../app/assets/javascripts/tasks.coffee | 3 + .../app/assets/stylesheets/application.css | 15 ++ tasklistapp/app/assets/stylesheets/tasks.scss | 3 + .../app/controllers/application_controller.rb | 5 + tasklistapp/app/controllers/concerns/.keep | 0 .../app/controllers/tasks_controller.rb | 13 ++ tasklistapp/app/helpers/application_helper.rb | 2 + tasklistapp/app/helpers/tasks_helper.rb | 2 + tasklistapp/app/mailers/.keep | 0 tasklistapp/app/models/.keep | 0 tasklistapp/app/models/concerns/.keep | 0 tasklistapp/app/models/task.rb | 2 + .../app/views/layouts/application.html.erb | 14 ++ tasklistapp/app/views/tasks/index.html.erb | 6 + tasklistapp/bin/bundle | 3 + tasklistapp/bin/rails | 9 + tasklistapp/bin/rake | 9 + tasklistapp/bin/setup | 29 ++++ tasklistapp/bin/spring | 15 ++ tasklistapp/config.ru | 4 + tasklistapp/config/application.rb | 26 +++ tasklistapp/config/boot.rb | 3 + tasklistapp/config/database.yml | 25 +++ tasklistapp/config/environment.rb | 5 + .../config/environments/development.rb | 41 +++++ tasklistapp/config/environments/production.rb | 79 +++++++++ tasklistapp/config/environments/test.rb | 42 +++++ tasklistapp/config/initializers/assets.rb | 11 ++ .../initializers/backtrace_silencers.rb | 7 + .../config/initializers/cookies_serializer.rb | 3 + .../initializers/filter_parameter_logging.rb | 4 + .../config/initializers/inflections.rb | 16 ++ tasklistapp/config/initializers/mime_types.rb | 4 + .../config/initializers/session_store.rb | 3 + .../config/initializers/wrap_parameters.rb | 14 ++ tasklistapp/config/locales/en.yml | 23 +++ tasklistapp/config/routes.rb | 59 +++++++ tasklistapp/config/secrets.yml | 22 +++ .../db/migrate/20160419204103_create_tasks.rb | 11 ++ tasklistapp/db/schema.rb | 24 +++ tasklistapp/db/seeds.rb | 7 + tasklistapp/lib/assets/.keep | 0 tasklistapp/lib/tasks/.keep | 0 tasklistapp/log/.keep | 0 tasklistapp/public/404.html | 67 ++++++++ tasklistapp/public/422.html | 67 ++++++++ tasklistapp/public/500.html | 66 ++++++++ tasklistapp/public/favicon.ico | 0 tasklistapp/public/robots.txt | 5 + tasklistapp/test/controllers/.keep | 0 .../test/controllers/tasks_controller_test.rb | 7 + tasklistapp/test/fixtures/.keep | 0 tasklistapp/test/fixtures/tasks.yml | 11 ++ tasklistapp/test/helpers/.keep | 0 tasklistapp/test/integration/.keep | 0 tasklistapp/test/mailers/.keep | 0 tasklistapp/test/models/.keep | 0 tasklistapp/test/models/task_test.rb | 7 + tasklistapp/test/test_helper.rb | 10 ++ tasklistapp/vendor/assets/javascripts/.keep | 0 tasklistapp/vendor/assets/stylesheets/.keep | 0 68 files changed, 1077 insertions(+) create mode 100644 tasklistapp/.gitignore create mode 100644 tasklistapp/Gemfile create mode 100644 tasklistapp/Gemfile.lock create mode 100644 tasklistapp/README.rdoc create mode 100644 tasklistapp/Rakefile create mode 100644 tasklistapp/app/assets/images/.keep create mode 100644 tasklistapp/app/assets/javascripts/application.js create mode 100644 tasklistapp/app/assets/javascripts/tasks.coffee create mode 100644 tasklistapp/app/assets/stylesheets/application.css create mode 100644 tasklistapp/app/assets/stylesheets/tasks.scss create mode 100644 tasklistapp/app/controllers/application_controller.rb create mode 100644 tasklistapp/app/controllers/concerns/.keep create mode 100644 tasklistapp/app/controllers/tasks_controller.rb create mode 100644 tasklistapp/app/helpers/application_helper.rb create mode 100644 tasklistapp/app/helpers/tasks_helper.rb create mode 100644 tasklistapp/app/mailers/.keep create mode 100644 tasklistapp/app/models/.keep create mode 100644 tasklistapp/app/models/concerns/.keep create mode 100644 tasklistapp/app/models/task.rb create mode 100644 tasklistapp/app/views/layouts/application.html.erb create mode 100644 tasklistapp/app/views/tasks/index.html.erb create mode 100755 tasklistapp/bin/bundle create mode 100755 tasklistapp/bin/rails create mode 100755 tasklistapp/bin/rake create mode 100755 tasklistapp/bin/setup create mode 100755 tasklistapp/bin/spring create mode 100644 tasklistapp/config.ru create mode 100644 tasklistapp/config/application.rb create mode 100644 tasklistapp/config/boot.rb create mode 100644 tasklistapp/config/database.yml create mode 100644 tasklistapp/config/environment.rb create mode 100644 tasklistapp/config/environments/development.rb create mode 100644 tasklistapp/config/environments/production.rb create mode 100644 tasklistapp/config/environments/test.rb create mode 100644 tasklistapp/config/initializers/assets.rb create mode 100644 tasklistapp/config/initializers/backtrace_silencers.rb create mode 100644 tasklistapp/config/initializers/cookies_serializer.rb create mode 100644 tasklistapp/config/initializers/filter_parameter_logging.rb create mode 100644 tasklistapp/config/initializers/inflections.rb create mode 100644 tasklistapp/config/initializers/mime_types.rb create mode 100644 tasklistapp/config/initializers/session_store.rb create mode 100644 tasklistapp/config/initializers/wrap_parameters.rb create mode 100644 tasklistapp/config/locales/en.yml create mode 100644 tasklistapp/config/routes.rb create mode 100644 tasklistapp/config/secrets.yml create mode 100644 tasklistapp/db/migrate/20160419204103_create_tasks.rb create mode 100644 tasklistapp/db/schema.rb create mode 100644 tasklistapp/db/seeds.rb create mode 100644 tasklistapp/lib/assets/.keep create mode 100644 tasklistapp/lib/tasks/.keep create mode 100644 tasklistapp/log/.keep create mode 100644 tasklistapp/public/404.html create mode 100644 tasklistapp/public/422.html create mode 100644 tasklistapp/public/500.html create mode 100644 tasklistapp/public/favicon.ico create mode 100644 tasklistapp/public/robots.txt create mode 100644 tasklistapp/test/controllers/.keep create mode 100644 tasklistapp/test/controllers/tasks_controller_test.rb create mode 100644 tasklistapp/test/fixtures/.keep create mode 100644 tasklistapp/test/fixtures/tasks.yml create mode 100644 tasklistapp/test/helpers/.keep create mode 100644 tasklistapp/test/integration/.keep create mode 100644 tasklistapp/test/mailers/.keep create mode 100644 tasklistapp/test/models/.keep create mode 100644 tasklistapp/test/models/task_test.rb create mode 100644 tasklistapp/test/test_helper.rb create mode 100644 tasklistapp/vendor/assets/javascripts/.keep create mode 100644 tasklistapp/vendor/assets/stylesheets/.keep diff --git a/tasklistapp/.gitignore b/tasklistapp/.gitignore new file mode 100644 index 000000000..050c9d95c --- /dev/null +++ b/tasklistapp/.gitignore @@ -0,0 +1,17 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/tasklistapp/Gemfile b/tasklistapp/Gemfile new file mode 100644 index 000000000..d0ca1fdd6 --- /dev/null +++ b/tasklistapp/Gemfile @@ -0,0 +1,47 @@ +source 'https://rubygems.org' + + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.6' +# Use sqlite3 as the database for Active Record +gem 'sqlite3' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +# Use ActiveModel has_secure_password +# gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + diff --git a/tasklistapp/Gemfile.lock b/tasklistapp/Gemfile.lock new file mode 100644 index 000000000..c45949a77 --- /dev/null +++ b/tasklistapp/Gemfile.lock @@ -0,0 +1,160 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.6) + actionpack (= 4.2.6) + actionview (= 4.2.6) + activejob (= 4.2.6) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.6) + actionview (= 4.2.6) + activesupport (= 4.2.6) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.6) + activesupport (= 4.2.6) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.6) + activesupport (= 4.2.6) + globalid (>= 0.3.0) + activemodel (4.2.6) + activesupport (= 4.2.6) + builder (~> 3.1) + activerecord (4.2.6) + activemodel (= 4.2.6) + activesupport (= 4.2.6) + arel (~> 6.0) + activesupport (4.2.6) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + arel (6.0.3) + binding_of_caller (0.7.2) + debug_inspector (>= 0.0.1) + builder (3.2.2) + byebug (8.2.4) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.10.0) + concurrent-ruby (1.0.1) + debug_inspector (0.0.2) + erubis (2.7.0) + execjs (2.6.0) + globalid (0.3.6) + activesupport (>= 4.1.0) + i18n (0.7.0) + jbuilder (2.4.1) + activesupport (>= 3.0.0, < 5.1) + multi_json (~> 1.2) + jquery-rails (4.1.1) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.3) + loofah (2.0.3) + nokogiri (>= 1.5.9) + mail (2.6.4) + mime-types (>= 1.16, < 4) + mime-types (3.0) + mime-types-data (~> 3.2015) + mime-types-data (3.2016.0221) + mini_portile2 (2.0.0) + minitest (5.8.4) + multi_json (1.11.2) + nokogiri (1.6.7.2) + mini_portile2 (~> 2.0.0.rc2) + rack (1.6.4) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.6) + actionmailer (= 4.2.6) + actionpack (= 4.2.6) + actionview (= 4.2.6) + activejob (= 4.2.6) + activemodel (= 4.2.6) + activerecord (= 4.2.6) + activesupport (= 4.2.6) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.6) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.7) + activesupport (>= 4.2.0.beta, < 5.0) + nokogiri (~> 1.6.0) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.3) + loofah (~> 2.0) + railties (4.2.6) + actionpack (= 4.2.6) + activesupport (= 4.2.6) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (11.1.2) + rdoc (4.2.2) + json (~> 1.4) + sass (3.4.22) + sass-rails (5.0.4) + railties (>= 4.0.0, < 5.0) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.1) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (1.7.1) + sprockets (3.6.0) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.0.4) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sqlite3 (1.3.11) + thor (0.19.1) + thread_safe (0.3.5) + tilt (2.0.2) + turbolinks (2.5.3) + coffee-rails + tzinfo (1.2.2) + thread_safe (~> 0.1) + uglifier (3.0.0) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + byebug + coffee-rails (~> 4.1.0) + jbuilder (~> 2.0) + jquery-rails + rails (= 4.2.6) + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + sqlite3 + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.11.2 diff --git a/tasklistapp/README.rdoc b/tasklistapp/README.rdoc new file mode 100644 index 000000000..dd4e97e22 --- /dev/null +++ b/tasklistapp/README.rdoc @@ -0,0 +1,28 @@ +== README + +This README would normally document whatever steps are necessary to get the +application up and running. + +Things you may want to cover: + +* Ruby version + +* System dependencies + +* Configuration + +* Database creation + +* Database initialization + +* How to run the test suite + +* Services (job queues, cache servers, search engines, etc.) + +* Deployment instructions + +* ... + + +Please feel free to use a different markup language if you do not plan to run +rake doc:app. diff --git a/tasklistapp/Rakefile b/tasklistapp/Rakefile new file mode 100644 index 000000000..ba6b733dd --- /dev/null +++ b/tasklistapp/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/tasklistapp/app/assets/images/.keep b/tasklistapp/app/assets/images/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/tasklistapp/app/assets/javascripts/application.js b/tasklistapp/app/assets/javascripts/application.js new file mode 100644 index 000000000..e07c5a830 --- /dev/null +++ b/tasklistapp/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks +//= require_tree . diff --git a/tasklistapp/app/assets/javascripts/tasks.coffee b/tasklistapp/app/assets/javascripts/tasks.coffee new file mode 100644 index 000000000..24f83d18b --- /dev/null +++ b/tasklistapp/app/assets/javascripts/tasks.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/tasklistapp/app/assets/stylesheets/application.css b/tasklistapp/app/assets/stylesheets/application.css new file mode 100644 index 000000000..f9cd5b348 --- /dev/null +++ b/tasklistapp/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/tasklistapp/app/assets/stylesheets/tasks.scss b/tasklistapp/app/assets/stylesheets/tasks.scss new file mode 100644 index 000000000..b57862ec7 --- /dev/null +++ b/tasklistapp/app/assets/stylesheets/tasks.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the tasks controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/tasklistapp/app/controllers/application_controller.rb b/tasklistapp/app/controllers/application_controller.rb new file mode 100644 index 000000000..d83690e1b --- /dev/null +++ b/tasklistapp/app/controllers/application_controller.rb @@ -0,0 +1,5 @@ +class ApplicationController < ActionController::Base + # Prevent CSRF attacks by raising an exception. + # For APIs, you may want to use :null_session instead. + protect_from_forgery with: :exception +end diff --git a/tasklistapp/app/controllers/concerns/.keep b/tasklistapp/app/controllers/concerns/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/tasklistapp/app/controllers/tasks_controller.rb b/tasklistapp/app/controllers/tasks_controller.rb new file mode 100644 index 000000000..e8f457b9b --- /dev/null +++ b/tasklistapp/app/controllers/tasks_controller.rb @@ -0,0 +1,13 @@ +class TasksController < ApplicationController + def index + @all_tasks = Task.order(name: :asc) + + end + + def by_task + + @all_tasks = Task.where(name: params[:name]) + + render :index + end +end diff --git a/tasklistapp/app/helpers/application_helper.rb b/tasklistapp/app/helpers/application_helper.rb new file mode 100644 index 000000000..de6be7945 --- /dev/null +++ b/tasklistapp/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/tasklistapp/app/helpers/tasks_helper.rb b/tasklistapp/app/helpers/tasks_helper.rb new file mode 100644 index 000000000..ce894d00c --- /dev/null +++ b/tasklistapp/app/helpers/tasks_helper.rb @@ -0,0 +1,2 @@ +module TasksHelper +end diff --git a/tasklistapp/app/mailers/.keep b/tasklistapp/app/mailers/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/tasklistapp/app/models/.keep b/tasklistapp/app/models/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/tasklistapp/app/models/concerns/.keep b/tasklistapp/app/models/concerns/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/tasklistapp/app/models/task.rb b/tasklistapp/app/models/task.rb new file mode 100644 index 000000000..935f76e12 --- /dev/null +++ b/tasklistapp/app/models/task.rb @@ -0,0 +1,2 @@ +class Task < ActiveRecord::Base +end diff --git a/tasklistapp/app/views/layouts/application.html.erb b/tasklistapp/app/views/layouts/application.html.erb new file mode 100644 index 000000000..650939280 --- /dev/null +++ b/tasklistapp/app/views/layouts/application.html.erb @@ -0,0 +1,14 @@ + + + + Tasklistapp + <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> + <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> + <%= csrf_meta_tags %> + + + +<%= yield %> + + + diff --git a/tasklistapp/app/views/tasks/index.html.erb b/tasklistapp/app/views/tasks/index.html.erb new file mode 100644 index 000000000..d5afdca8a --- /dev/null +++ b/tasklistapp/app/views/tasks/index.html.erb @@ -0,0 +1,6 @@ +

Here is the big list of albums!!!!

+ diff --git a/tasklistapp/bin/bundle b/tasklistapp/bin/bundle new file mode 100755 index 000000000..66e9889e8 --- /dev/null +++ b/tasklistapp/bin/bundle @@ -0,0 +1,3 @@ +#!/usr/bin/env ruby +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +load Gem.bin_path('bundler', 'bundle') diff --git a/tasklistapp/bin/rails b/tasklistapp/bin/rails new file mode 100755 index 000000000..0138d79b7 --- /dev/null +++ b/tasklistapp/bin/rails @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +APP_PATH = File.expand_path('../../config/application', __FILE__) +require_relative '../config/boot' +require 'rails/commands' diff --git a/tasklistapp/bin/rake b/tasklistapp/bin/rake new file mode 100755 index 000000000..d87d5f578 --- /dev/null +++ b/tasklistapp/bin/rake @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby +begin + load File.expand_path('../spring', __FILE__) +rescue LoadError => e + raise unless e.message.include?('spring') +end +require_relative '../config/boot' +require 'rake' +Rake.application.run diff --git a/tasklistapp/bin/setup b/tasklistapp/bin/setup new file mode 100755 index 000000000..acdb2c138 --- /dev/null +++ b/tasklistapp/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/tasklistapp/bin/spring b/tasklistapp/bin/spring new file mode 100755 index 000000000..7fe232c3a --- /dev/null +++ b/tasklistapp/bin/spring @@ -0,0 +1,15 @@ +#!/usr/bin/env ruby + +# This file loads spring without using Bundler, in order to be fast. +# It gets overwritten when you run the `spring binstub` command. + +unless defined?(Spring) + require 'rubygems' + require 'bundler' + + if (match = Bundler.default_lockfile.read.match(/^GEM$.*?^ (?: )*spring \((.*?)\)$.*?^$/m)) + Gem.paths = { 'GEM_PATH' => [Bundler.bundle_path.to_s, *Gem.path].uniq.join(Gem.path_separator) } + gem 'spring', match[1] + require 'spring/binstub' + end +end diff --git a/tasklistapp/config.ru b/tasklistapp/config.ru new file mode 100644 index 000000000..bd83b2541 --- /dev/null +++ b/tasklistapp/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Rails.application diff --git a/tasklistapp/config/application.rb b/tasklistapp/config/application.rb new file mode 100644 index 000000000..8befa2cf2 --- /dev/null +++ b/tasklistapp/config/application.rb @@ -0,0 +1,26 @@ +require File.expand_path('../boot', __FILE__) + +require 'rails/all' + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) + +module Tasklistapp + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true + end +end diff --git a/tasklistapp/config/boot.rb b/tasklistapp/config/boot.rb new file mode 100644 index 000000000..6b750f00b --- /dev/null +++ b/tasklistapp/config/boot.rb @@ -0,0 +1,3 @@ +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/tasklistapp/config/database.yml b/tasklistapp/config/database.yml new file mode 100644 index 000000000..1c1a37ca8 --- /dev/null +++ b/tasklistapp/config/database.yml @@ -0,0 +1,25 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +# +default: &default + adapter: sqlite3 + pool: 5 + timeout: 5000 + +development: + <<: *default + database: db/development.sqlite3 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: db/test.sqlite3 + +production: + <<: *default + database: db/production.sqlite3 diff --git a/tasklistapp/config/environment.rb b/tasklistapp/config/environment.rb new file mode 100644 index 000000000..ee8d90dc6 --- /dev/null +++ b/tasklistapp/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require File.expand_path('../application', __FILE__) + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/tasklistapp/config/environments/development.rb b/tasklistapp/config/environments/development.rb new file mode 100644 index 000000000..b55e2144b --- /dev/null +++ b/tasklistapp/config/environments/development.rb @@ -0,0 +1,41 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Debug mode disables concatenation and preprocessing of assets. + # This option may cause significant delays in view rendering with a large + # number of complex assets. + config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/tasklistapp/config/environments/production.rb b/tasklistapp/config/environments/production.rb new file mode 100644 index 000000000..5c1b32e48 --- /dev/null +++ b/tasklistapp/config/environments/production.rb @@ -0,0 +1,79 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Code is not reloaded between requests. + config.cache_classes = true + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. + # config.action_dispatch.rack_cache = true + + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? + + # Compress JavaScripts and CSS. + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + + # Specifies the header that your server uses for sending files. + # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug + + # Prepend all log lines with the following tags. + # config.log_tags = [ :subdomain, :uuid ] + + # Use a different logger for distributed setups. + # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) + + # Use a different cache store in production. + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.action_controller.asset_host = 'http://assets.example.com' + + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. + # config.action_mailer.raise_delivery_errors = false + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation cannot be found). + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners. + config.active_support.deprecation = :notify + + # Use default logging formatter so that PID and timestamp are not suppressed. + config.log_formatter = ::Logger::Formatter.new + + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false +end diff --git a/tasklistapp/config/environments/test.rb b/tasklistapp/config/environments/test.rb new file mode 100644 index 000000000..1c19f08b2 --- /dev/null +++ b/tasklistapp/config/environments/test.rb @@ -0,0 +1,42 @@ +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Do not eager load code on boot. This avoids loading your whole application + # just for the purpose of running a single test. If you are using a tool that + # preloads Rails for running tests, you may have to set it to true. + config.eager_load = false + + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true + config.static_cache_control = 'public, max-age=3600' + + # Show full error reports and disable caching. + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates. + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Randomize the order test cases are executed. + config.active_support.test_order = :random + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true +end diff --git a/tasklistapp/config/initializers/assets.rb b/tasklistapp/config/initializers/assets.rb new file mode 100644 index 000000000..01ef3e663 --- /dev/null +++ b/tasklistapp/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) diff --git a/tasklistapp/config/initializers/backtrace_silencers.rb b/tasklistapp/config/initializers/backtrace_silencers.rb new file mode 100644 index 000000000..59385cdf3 --- /dev/null +++ b/tasklistapp/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/tasklistapp/config/initializers/cookies_serializer.rb b/tasklistapp/config/initializers/cookies_serializer.rb new file mode 100644 index 000000000..7f70458de --- /dev/null +++ b/tasklistapp/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/tasklistapp/config/initializers/filter_parameter_logging.rb b/tasklistapp/config/initializers/filter_parameter_logging.rb new file mode 100644 index 000000000..4a994e1e7 --- /dev/null +++ b/tasklistapp/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Configure sensitive parameters which will be filtered from the log file. +Rails.application.config.filter_parameters += [:password] diff --git a/tasklistapp/config/initializers/inflections.rb b/tasklistapp/config/initializers/inflections.rb new file mode 100644 index 000000000..ac033bf9d --- /dev/null +++ b/tasklistapp/config/initializers/inflections.rb @@ -0,0 +1,16 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format. Inflections +# are locale specific, and you may define rules for as many different +# locales as you wish. All of these examples are active by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end + +# These inflection rules are supported but not enabled by default: +# ActiveSupport::Inflector.inflections(:en) do |inflect| +# inflect.acronym 'RESTful' +# end diff --git a/tasklistapp/config/initializers/mime_types.rb b/tasklistapp/config/initializers/mime_types.rb new file mode 100644 index 000000000..dc1899682 --- /dev/null +++ b/tasklistapp/config/initializers/mime_types.rb @@ -0,0 +1,4 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf diff --git a/tasklistapp/config/initializers/session_store.rb b/tasklistapp/config/initializers/session_store.rb new file mode 100644 index 000000000..dc6912855 --- /dev/null +++ b/tasklistapp/config/initializers/session_store.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.session_store :cookie_store, key: '_tasklistapp_session' diff --git a/tasklistapp/config/initializers/wrap_parameters.rb b/tasklistapp/config/initializers/wrap_parameters.rb new file mode 100644 index 000000000..33725e95f --- /dev/null +++ b/tasklistapp/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. + +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] if respond_to?(:wrap_parameters) +end + +# To enable root element in JSON for ActiveRecord objects. +# ActiveSupport.on_load(:active_record) do +# self.include_root_in_json = true +# end diff --git a/tasklistapp/config/locales/en.yml b/tasklistapp/config/locales/en.yml new file mode 100644 index 000000000..065395716 --- /dev/null +++ b/tasklistapp/config/locales/en.yml @@ -0,0 +1,23 @@ +# Files in the config/locales directory are used for internationalization +# and are automatically loaded by Rails. If you want to use locales other +# than English, add the necessary files in this directory. +# +# To use the locales, use `I18n.t`: +# +# I18n.t 'hello' +# +# In views, this is aliased to just `t`: +# +# <%= t('hello') %> +# +# To use a different locale, set it with `I18n.locale`: +# +# I18n.locale = :es +# +# This would use the information in config/locales/es.yml. +# +# To learn more, please read the Rails Internationalization guide +# available at http://guides.rubyonrails.org/i18n.html. + +en: + hello: "Hello world" diff --git a/tasklistapp/config/routes.rb b/tasklistapp/config/routes.rb new file mode 100644 index 000000000..0add778d8 --- /dev/null +++ b/tasklistapp/config/routes.rb @@ -0,0 +1,59 @@ +Rails.application.routes.draw do + # The priority is based upon order of creation: first created -> highest priority. + # See how all your routes lay out with "rake routes". + + # You can have the root of your site routed with "root" + root 'tasks#index' + + get '/:name' => 'tasks#by_task' + + + # Example of regular route: + # get 'products/:id' => 'catalog#view' + + # Example of named route that can be invoked with purchase_url(id: product.id) + # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase + + # Example resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Example resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Example resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Example resource route with more complex sub-resources: + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', on: :collection + # end + # end + + # Example resource route with concerns: + # concern :toggleable do + # post 'toggle' + # end + # resources :posts, concerns: :toggleable + # resources :photos, concerns: :toggleable + + # Example resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end +end diff --git a/tasklistapp/config/secrets.yml b/tasklistapp/config/secrets.yml new file mode 100644 index 000000000..480c32547 --- /dev/null +++ b/tasklistapp/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: 787fb6bb77ef159dd5ebb4088134d5015dc0240f479f18825d9ff1890c1484f74f4ecdbb27f2e1e92bbf319637c8af730ccad97c884668c74c5e8c83aceb502e + +test: + secret_key_base: 5d52af6d66f95498d0e1289ad0436d76b84af3c4f7ee84fba41a3b9faadab00a83a843413e2007433857fe071920acf8d2a0fff5a3e2b86c8400fa64bc1e1854 + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/tasklistapp/db/migrate/20160419204103_create_tasks.rb b/tasklistapp/db/migrate/20160419204103_create_tasks.rb new file mode 100644 index 000000000..c7e3a6839 --- /dev/null +++ b/tasklistapp/db/migrate/20160419204103_create_tasks.rb @@ -0,0 +1,11 @@ +class CreateTasks < ActiveRecord::Migration + def change + create_table :tasks do |t| + t.string :name + t.string :description + t.string :completion_indicator + + t.timestamps null: false + end + end +end diff --git a/tasklistapp/db/schema.rb b/tasklistapp/db/schema.rb new file mode 100644 index 000000000..f840e57f1 --- /dev/null +++ b/tasklistapp/db/schema.rb @@ -0,0 +1,24 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 20160419204103) do + + create_table "tasks", force: :cascade do |t| + t.string "name" + t.string "description" + t.string "completion_indicator" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + +end diff --git a/tasklistapp/db/seeds.rb b/tasklistapp/db/seeds.rb new file mode 100644 index 000000000..4edb1e857 --- /dev/null +++ b/tasklistapp/db/seeds.rb @@ -0,0 +1,7 @@ +# 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) diff --git a/tasklistapp/lib/assets/.keep b/tasklistapp/lib/assets/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/tasklistapp/lib/tasks/.keep b/tasklistapp/lib/tasks/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/tasklistapp/log/.keep b/tasklistapp/log/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/tasklistapp/public/404.html b/tasklistapp/public/404.html new file mode 100644 index 000000000..b612547fc --- /dev/null +++ b/tasklistapp/public/404.html @@ -0,0 +1,67 @@ + + + + The page you were looking for doesn't exist (404) + + + + + + +
+
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/tasklistapp/public/422.html b/tasklistapp/public/422.html new file mode 100644 index 000000000..a21f82b3b --- /dev/null +++ b/tasklistapp/public/422.html @@ -0,0 +1,67 @@ + + + + The change you wanted was rejected (422) + + + + + + +
+
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/tasklistapp/public/500.html b/tasklistapp/public/500.html new file mode 100644 index 000000000..061abc587 --- /dev/null +++ b/tasklistapp/public/500.html @@ -0,0 +1,66 @@ + + + + We're sorry, but something went wrong (500) + + + + + + +
+
+

We're sorry, but something went wrong.

+
+

If you are the application owner check the logs for more information.

+
+ + diff --git a/tasklistapp/public/favicon.ico b/tasklistapp/public/favicon.ico new file mode 100644 index 000000000..e69de29bb diff --git a/tasklistapp/public/robots.txt b/tasklistapp/public/robots.txt new file mode 100644 index 000000000..3c9c7c01f --- /dev/null +++ b/tasklistapp/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/tasklistapp/test/controllers/.keep b/tasklistapp/test/controllers/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/tasklistapp/test/controllers/tasks_controller_test.rb b/tasklistapp/test/controllers/tasks_controller_test.rb new file mode 100644 index 000000000..ab48b116d --- /dev/null +++ b/tasklistapp/test/controllers/tasks_controller_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class TasksControllerTest < ActionController::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/tasklistapp/test/fixtures/.keep b/tasklistapp/test/fixtures/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/tasklistapp/test/fixtures/tasks.yml b/tasklistapp/test/fixtures/tasks.yml new file mode 100644 index 000000000..9273032d3 --- /dev/null +++ b/tasklistapp/test/fixtures/tasks.yml @@ -0,0 +1,11 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + name: MyString + description: MyString + completion_indicator: MyString + +two: + name: MyString + description: MyString + completion_indicator: MyString diff --git a/tasklistapp/test/helpers/.keep b/tasklistapp/test/helpers/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/tasklistapp/test/integration/.keep b/tasklistapp/test/integration/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/tasklistapp/test/mailers/.keep b/tasklistapp/test/mailers/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/tasklistapp/test/models/.keep b/tasklistapp/test/models/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/tasklistapp/test/models/task_test.rb b/tasklistapp/test/models/task_test.rb new file mode 100644 index 000000000..3ca215970 --- /dev/null +++ b/tasklistapp/test/models/task_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class TaskTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/tasklistapp/test/test_helper.rb b/tasklistapp/test/test_helper.rb new file mode 100644 index 000000000..92e39b2d7 --- /dev/null +++ b/tasklistapp/test/test_helper.rb @@ -0,0 +1,10 @@ +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../../config/environment', __FILE__) +require 'rails/test_help' + +class ActiveSupport::TestCase + # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. + fixtures :all + + # Add more helper methods to be used by all tests here... +end diff --git a/tasklistapp/vendor/assets/javascripts/.keep b/tasklistapp/vendor/assets/javascripts/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/tasklistapp/vendor/assets/stylesheets/.keep b/tasklistapp/vendor/assets/stylesheets/.keep new file mode 100644 index 000000000..e69de29bb From 2b75e7980db6ffa7f3abdcce839bcaf0c45d32aa Mon Sep 17 00:00:00 2001 From: melissajimison Date: Tue, 19 Apr 2016 15:52:32 -0700 Subject: [PATCH 02/32] used the provided seed File --- .../db/migrate/20160419204103_create_tasks.rb | 4 ++-- tasklistapp/db/schema.rb | 8 ++++---- tasklistapp/db/seeds.rb | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/tasklistapp/db/migrate/20160419204103_create_tasks.rb b/tasklistapp/db/migrate/20160419204103_create_tasks.rb index c7e3a6839..d1d927c86 100644 --- a/tasklistapp/db/migrate/20160419204103_create_tasks.rb +++ b/tasklistapp/db/migrate/20160419204103_create_tasks.rb @@ -1,9 +1,9 @@ class CreateTasks < ActiveRecord::Migration def change create_table :tasks do |t| - t.string :name + t.string :name, null: false t.string :description - t.string :completion_indicator + t.string :completed_at t.timestamps null: false end diff --git a/tasklistapp/db/schema.rb b/tasklistapp/db/schema.rb index f840e57f1..22de19fef 100644 --- a/tasklistapp/db/schema.rb +++ b/tasklistapp/db/schema.rb @@ -14,11 +14,11 @@ ActiveRecord::Schema.define(version: 20160419204103) do create_table "tasks", force: :cascade do |t| - t.string "name" + t.string "name", null: false t.string "description" - t.string "completion_indicator" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.string "completed_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end end diff --git a/tasklistapp/db/seeds.rb b/tasklistapp/db/seeds.rb index 4edb1e857..40b4ef49d 100644 --- a/tasklistapp/db/seeds.rb +++ b/tasklistapp/db/seeds.rb @@ -5,3 +5,21 @@ # # cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) # Mayor.create(name: 'Emanuel', city: cities.first) + +def random_time + Time.at(rand * Time.now.to_i) +end + +tasks = [ + { name: "Go to Brunch", description: "Ask if it is hot, if it is veggetarian, and don't get French Toast" }, + { name: "Go to Lunch", description: "Don't go to the Deli, dont get sandwich", completed_at: random_time }, + { name: "Go to Second Lunch", description: "Colombian Candies" }, + { name: "Play the pending chess games", description: "I would lose if dont play a game for 5 days", completed_at: random_time }, + { name: "Trip to Portland", description: "Get cash, and those fun size personal products" }, + { name: "Water Plants ", description: "Use the sprinkler in the garden house" }, + { name: "Nap.", description: "20 minutes nap after second lunch", completed_at: random_time } +] + +tasks.each do |task| + Task.create task +end From dac93144a85211b7a39fd430007ccc53af7e0c24 Mon Sep 17 00:00:00 2001 From: melissajimison Date: Tue, 19 Apr 2016 16:54:26 -0700 Subject: [PATCH 03/32] Finished wave 1 --- .../app/assets/stylesheets/application.css | 141 ++++++++++++++++++ .../app/controllers/tasks_controller.rb | 3 +- .../app/views/layouts/application.html.erb | 28 +++- tasklistapp/app/views/tasks/by_name.html.erb | 10 ++ tasklistapp/app/views/tasks/index.html.erb | 9 +- tasklistapp/config/routes.rb | 4 +- tasklistapp/db/seeds.rb | 4 +- 7 files changed, 189 insertions(+), 10 deletions(-) create mode 100644 tasklistapp/app/views/tasks/by_name.html.erb diff --git a/tasklistapp/app/assets/stylesheets/application.css b/tasklistapp/app/assets/stylesheets/application.css index f9cd5b348..853c66717 100644 --- a/tasklistapp/app/assets/stylesheets/application.css +++ b/tasklistapp/app/assets/stylesheets/application.css @@ -13,3 +13,144 @@ *= require_tree . *= require_self */ + + html { + background-attachment: fixed; + background-image: url("../images/notebook-background.png"); + background-position: center; + background-repeat: no-repeat; + background-size: cover; + -webkit-background-size: cover; + -moz-background-size: cover; + -o-background-size: cover; + font-family: 'Oswald', sans-serif; + } + + h1 { + font-weight: 400; + text-align: center; + margin-top: 15px; + } + + .main-form label { + margin: 0; + margin-right: 10px; + padding: 0; + } + + .both-forms { + margin: 0; + margin-top: 20px; + overflow: auto; + padding: 0; + margin-bottom: 10px; + } + + .check-form, .check-deleted { + color: #262127; + font-size: 14px; + margin: 0; + padding: 0; + } + + .check-form { + float: left; + } + + .check-deleted { + float: right; + } + + .top-bar { + color:#D76B88; + font-family: 'Oswald', sans-serif; + font-size: 16px; + margin-top: 60px; + margin-bottom: 40px; + text-align: center; + width: 100%; + } + + .top-bar ul { + list-style: none; + } + + .top-bar ul li { + display: inline; + } + + .top-bar a { + color:#D76B88; + font-size: 32px; + padding-top: 10px; + padding-right: 30px; + padding-left: 30px; + padding-bottom: 5px; + text-decoration: none; + } + + .task-container { + background-color: rgba(244,244,244,.7); + border-radius: 15px; + color:#4D434F; + display: -webkit-flex; + display: flex; + flex-wrap: wrap; + margin-top: 1%; + margin-right: 20%; + margin-left: auto; + margin-bottom: 1%; + overflow: auto; + padding: 2%; + width: 758px; + + } + + .task-item { + background-color: rgba(111,174,215,.9); + border-radius: 5px; + box-shadow: 5px 5px 2px #7691A3; + display: inline-block; + font-size: 24px; + font-weight: 300; + margin: .8rem; + padding: .5rem; + text-align: left; + width: 210px; + } + + .task-description { + padding: 1rem; + line-height: 2.2rem; + } + + .submit-button{ + color:white; + margin-top: 5px; + padding: 10px; + } + + input[type=submit] { + background-color: rgb(6,104,165); + border-radius: 5px; + color:white; + cursor:pointer; + display: inline-block; + font-family: 'Oswald', sans-serif; + font-size: 16px; + margin-top: 5px; + margin-left: 10px; + padding:5px 15px 5px 15px; + } + + input[type=text] { + border-radius: 5px; + color:#3F1A08; + cursor:pointer; + display: inline-block; + font-family: 'Oswald', sans-serif; + font-size: 16px; + margin-top: 5px; + margin-left: 10px; + padding:5px 15px; + } diff --git a/tasklistapp/app/controllers/tasks_controller.rb b/tasklistapp/app/controllers/tasks_controller.rb index e8f457b9b..7bf879008 100644 --- a/tasklistapp/app/controllers/tasks_controller.rb +++ b/tasklistapp/app/controllers/tasks_controller.rb @@ -4,10 +4,9 @@ def index end - def by_task + def by_name @all_tasks = Task.where(name: params[:name]) - render :index end end diff --git a/tasklistapp/app/views/layouts/application.html.erb b/tasklistapp/app/views/layouts/application.html.erb index 650939280..542fd8cab 100644 --- a/tasklistapp/app/views/layouts/application.html.erb +++ b/tasklistapp/app/views/layouts/application.html.erb @@ -5,10 +5,36 @@ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> <%= csrf_meta_tags %> + + + + + + + + + + -<%= yield %> + +
+ +
+
+
+ <%= yield %> +
+
+ + diff --git a/tasklistapp/app/views/tasks/by_name.html.erb b/tasklistapp/app/views/tasks/by_name.html.erb new file mode 100644 index 000000000..a6a0536b6 --- /dev/null +++ b/tasklistapp/app/views/tasks/by_name.html.erb @@ -0,0 +1,10 @@ +

All about this task!!!!

+
+ <%@all_tasks.each do |task| %> +
+ <%= link_to task.name, "/#{task.name}"%> +
<%=task.description%> +
Completed?<%=task.completed_at%> +
+ <%end%> +
diff --git a/tasklistapp/app/views/tasks/index.html.erb b/tasklistapp/app/views/tasks/index.html.erb index d5afdca8a..2e00d5d1e 100644 --- a/tasklistapp/app/views/tasks/index.html.erb +++ b/tasklistapp/app/views/tasks/index.html.erb @@ -1,6 +1,7 @@ -

Here is the big list of albums!!!!

-
    +

    Here is the big list of things I have to do!!!!

    +
    <%@all_tasks.each do |task| %> -
  • <%= link_to task.name, "/#{task.name}"%> : <%=task.description%>
  • +
    +<%= link_to task.name, "/#{task.name}"%>
    <%end%> -
+ diff --git a/tasklistapp/config/routes.rb b/tasklistapp/config/routes.rb index 0add778d8..ae9097dde 100644 --- a/tasklistapp/config/routes.rb +++ b/tasklistapp/config/routes.rb @@ -5,8 +5,10 @@ # You can have the root of your site routed with "root" root 'tasks#index' - get '/:name' => 'tasks#by_task' + get '/:name' => 'tasks#by_name' + + # get '/atask' => 'tasks#by_task' # Example of regular route: # get 'products/:id' => 'catalog#view' diff --git a/tasklistapp/db/seeds.rb b/tasklistapp/db/seeds.rb index 40b4ef49d..0aeefaaa8 100644 --- a/tasklistapp/db/seeds.rb +++ b/tasklistapp/db/seeds.rb @@ -16,8 +16,8 @@ def random_time { name: "Go to Second Lunch", description: "Colombian Candies" }, { name: "Play the pending chess games", description: "I would lose if dont play a game for 5 days", completed_at: random_time }, { name: "Trip to Portland", description: "Get cash, and those fun size personal products" }, - { name: "Water Plants ", description: "Use the sprinkler in the garden house" }, - { name: "Nap.", description: "20 minutes nap after second lunch", completed_at: random_time } + { name: "Water Plants", description: "Use the sprinkler in the garden house" }, + { name: "Nap", description: "20 minutes nap after second lunch", completed_at: random_time } ] tasks.each do |task| From a17fa683cecc399621792d01e334e8aca8be9083 Mon Sep 17 00:00:00 2001 From: melissajimison Date: Wed, 20 Apr 2016 21:18:11 -0700 Subject: [PATCH 04/32] Be able to create a new task: --- .../app/controllers/tasks_controller.rb | 23 +++++++++++++++++-- .../app/views/layouts/application.html.erb | 2 +- tasklistapp/app/views/tasks/new.html.erb | 17 ++++++++++++++ tasklistapp/config/routes.rb | 2 ++ 4 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 tasklistapp/app/views/tasks/new.html.erb diff --git a/tasklistapp/app/controllers/tasks_controller.rb b/tasklistapp/app/controllers/tasks_controller.rb index 7bf879008..ea57d1da6 100644 --- a/tasklistapp/app/controllers/tasks_controller.rb +++ b/tasklistapp/app/controllers/tasks_controller.rb @@ -1,12 +1,31 @@ class TasksController < ApplicationController def index @all_tasks = Task.order(name: :asc) - end def by_name - @all_tasks = Task.where(name: params[:name]) + end + + def new + @task = Task.new + end + + def create + @task = Task.new(tasks_create_params[:task]) + if @task.save + redirect_to root_path + else + render :new + end + # @task = Task.new + end + + + private + def tasks_create_params + params.permit(task: [:name, :description]) + # params.permit(album: [:artist, :title]) end end diff --git a/tasklistapp/app/views/layouts/application.html.erb b/tasklistapp/app/views/layouts/application.html.erb index 542fd8cab..6b90d8f79 100644 --- a/tasklistapp/app/views/layouts/application.html.erb +++ b/tasklistapp/app/views/layouts/application.html.erb @@ -23,7 +23,7 @@ diff --git a/tasklistapp/app/views/tasks/new.html.erb b/tasklistapp/app/views/tasks/new.html.erb new file mode 100644 index 000000000..07a38cb2f --- /dev/null +++ b/tasklistapp/app/views/tasks/new.html.erb @@ -0,0 +1,17 @@ +
+ +

HI!! Let's make a new task!

+ +
  <%= params %> 
+<%= form_for @task, class: "main-form" do |f| %> + +<%= f.label :name, value="New Task" %> +<%= f.text_field :name %> +
+<%= f.label :description %> +<%= f.text_field :description %> + +<%= f.submit %> +<% end %> + +
diff --git a/tasklistapp/config/routes.rb b/tasklistapp/config/routes.rb index ae9097dde..f0cd75330 100644 --- a/tasklistapp/config/routes.rb +++ b/tasklistapp/config/routes.rb @@ -5,6 +5,8 @@ # You can have the root of your site routed with "root" root 'tasks#index' + get '/tasks/new' => 'tasks#new' + post '/tasks' => 'tasks#create', as: 'tasks' get '/:name' => 'tasks#by_name' From 638279d2ef259ee06b0ae9d70776c72f4762bbfa Mon Sep 17 00:00:00 2001 From: melissajimison Date: Thu, 21 Apr 2016 13:30:09 -0700 Subject: [PATCH 05/32] weird file --- TaskListRails/.gitignore | 35 +++++++++ TaskListRails/.ruby-gemset | 1 + TaskListRails/.ruby-version | 1 + TaskListRails/README.md | 75 +++++++++++++++++++ TaskListRails/seeds.rb | 20 +++++ tasklistapp/Gemfile | 5 ++ tasklistapp/Gemfile.lock | 7 ++ .../app/controllers/tasks_controller.rb | 7 +- tasklistapp/app/views/tasks/delete.html.erb | 1 + tasklistapp/app/views/tasks/index.html.erb | 6 +- tasklistapp/app/views/tasks/new.html.erb | 6 ++ tasklistapp/config/routes.rb | 3 +- 12 files changed, 164 insertions(+), 3 deletions(-) create mode 100644 TaskListRails/.gitignore create mode 100644 TaskListRails/.ruby-gemset create mode 100644 TaskListRails/.ruby-version create mode 100644 TaskListRails/README.md create mode 100644 TaskListRails/seeds.rb create mode 100644 tasklistapp/app/views/tasks/delete.html.erb diff --git a/TaskListRails/.gitignore b/TaskListRails/.gitignore new file mode 100644 index 000000000..28f484983 --- /dev/null +++ b/TaskListRails/.gitignore @@ -0,0 +1,35 @@ +*.gem +*.rbc +/.config +/coverage/ +/InstalledFiles +/pkg/ +/spec/reports/ +/test/tmp/ +/test/version_tmp/ +/tmp/ + +## Specific to RubyMotion: +.dat* +.repl_history +build/ + +## Documentation cache and generated files: +/.yardoc/ +/_yardoc/ +/doc/ +/rdoc/ + +## Environment normalisation: +/.bundle/ +/vendor/bundle +/lib/bundler/man/ + +# for a library or gem, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# Gemfile.lock +# .ruby-version +# .ruby-gemset + +# unless supporting rvm < 1.11.0 or doing something fancy, ignore this: +.rvmrc diff --git a/TaskListRails/.ruby-gemset b/TaskListRails/.ruby-gemset new file mode 100644 index 000000000..5d2410e51 --- /dev/null +++ b/TaskListRails/.ruby-gemset @@ -0,0 +1 @@ +TaskListRails diff --git a/TaskListRails/.ruby-version b/TaskListRails/.ruby-version new file mode 100644 index 000000000..276cbf9e2 --- /dev/null +++ b/TaskListRails/.ruby-version @@ -0,0 +1 @@ +2.3.0 diff --git a/TaskListRails/README.md b/TaskListRails/README.md new file mode 100644 index 000000000..5d73b6980 --- /dev/null +++ b/TaskListRails/README.md @@ -0,0 +1,75 @@ +# Task List Rails +Let's build our Task List in Rails. Solving the same problem--tracking tasks in a web app--will let us focus on following Rails conventions and learning how data flows through a Rails application. This project will enable us to keep track of and persist, add, edit and remove tasks. + +## Baseline +Once you've achieved this baseline, take a walk around the room and see if you can answer questions or help other folks. + +This project... + +- Will have our standard Github setup (fork this repo and clone to your machine) +- requires you to create a Rails 4.2.6 application + - create a controller for your `Tasks` + - create a `Task` model a migration. + - create the database schema and tables with `rake db:migrate` + - the `Task` model should include _at least_ a name, a description and a completion indicator + - conform to Rails conventions on naming and inflection + +Tinker with your Model in the `rails console` in order to ensure you have created your model and can interact with it as expected. + +## Wave 1 +This wave is where we will introduce the view layer to interact with our application via the browser. + +- Use the provided seed data to pre-populate your database with a given set of tasks. + - Hint: research `rake db:seed` +- Set up necessary controller(s) and route(s) that you will need in order to show a task from the database +- Create a root route for your application that directs users to the list of tasks + - Each task name in the list should link to a `show` action that will render a new view for the user. + - The `show` view should include the complete information about the task: name, description, completion status, and completion date. +- All markup in all views should have semantic relevance. +- Add some basic styles to your task list. + +## Wave 2 +In this wave we will add the first set of user interactivity and persistence. + +- Be able to create a new task: + - The home page should contain a link to Add a new task. This will give the user a form to fill out with the appropriate task fields. + - After the new task is added, the site should take the user back to the home page which displays the full list of tasks. The new task that was just added should be included in the full list of tasks. +- Be able to delete an existing task: + - Add a route and controller action whose responsibility is deleting a task (RESTful routes) + - On the home page, add a button or link for each task that will, once clicked... + 1. Ask the user to confirm that they definitely want to delete the task. + 1. Delete the task from the database and redirect the user back to the list of remaining tasks + +## Wave 3 +In this wave we will extend the interactivity with users, allowing them to edit existing tasks in a couple of different ways. As always, follow _RESTful_ conventions when implementing these features. + +- Add the ability for the user to mark a task complete + - Add a button to the list of tasks on the home page that, when clicked, will mark a task complete. + - Update the database with the task's completed date +- Add the ability for the user to edit a task's details. + - Add an `edit` action that renders a form allowing the user to update all the fields of a task. + - Submitting the form from the `edit` action should _update_ the existing task; not create a new one. + - Research: ActiveRecord's `update` method. + - Link to the `edit` action from the task's `show` page. + - DRY up your code by reusing the view code from the `new` functionality + - Hint: Rendering _partials_ in Rails. + +## Final Wave! +In this wave, we explore creating ActiveRecord associations by creating `belongs_to` and `has_many` relationships. + +- Create a model & migration for a new Person object. + - at a minimum, a Person should have a name +- Create seed data to add at least three Person records to the database. +- Each Task in your database can be assigned to a Person, indicating that Person is responsible for completing the Task. + - Express the relationship between Person and Task using `belongs_to` and `has_many` + - Update your Task `index` and `show` actions to include displaying the Person's name to which the Task belongs. + - Update your Task's `new` and `edit` actions to allow for selecting an _existing_ Person to which the Task should be associated. +- Add a new people (the plural of Person) controller with the following routes and actions + - `index` action: Show a list of all people in the database. + - Link each Person's name to their `show` action. + - The index should include a count of how many _uncompleted_ tasks are assigned to each Person. + - `show` action: show all of the Person's information +- Create a custom route and action for showing a complete list of a Person's tasks, both complete and incomplete. + - The url of this page should look something like `http://localhost:5000/people/1/tasks`. + - Link to this action from a Person's `show` view. +- Deploy your completed app to Heroku. diff --git a/TaskListRails/seeds.rb b/TaskListRails/seeds.rb new file mode 100644 index 000000000..de6ef27a7 --- /dev/null +++ b/TaskListRails/seeds.rb @@ -0,0 +1,20 @@ +def random_time + Time.at(rand * Time.now.to_i) +end + +tasks = [ + { name: "The First Task", description: "", completed_at: random_time }, + { name: "Go to Brunch", description: "" }, + { name: "Go to Lunch", description: "", completed_at: random_time }, + { name: "Go to Second Lunch", description: "" }, + { name: "Play Video Games", description: "", completed_at: random_time }, + { name: "High Five Somebody You Don't Know", description: "", completed_at: random_time }, + { name: "Plant Flowers", description: "", completed_at: random_time }, + { name: "Call Mom", description: "" }, + { name: "She worries, you know.", description: "" }, + { name: "Nap.", description: "", completed_at: random_time } +] + +tasks.each do |task| + Task.create task +end diff --git a/tasklistapp/Gemfile b/tasklistapp/Gemfile index d0ca1fdd6..12fbd125d 100644 --- a/tasklistapp/Gemfile +++ b/tasklistapp/Gemfile @@ -23,6 +23,7 @@ gem 'jbuilder', '~> 2.0' # bundle exec rake doc:rails generates the API under doc/api. gem 'sdoc', '~> 0.4.0', group: :doc + # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7' @@ -45,3 +46,7 @@ group :development do gem 'spring' end +group :development do + gem "better_errors" + gem "binding_of_caller" +end diff --git a/tasklistapp/Gemfile.lock b/tasklistapp/Gemfile.lock index c45949a77..abfecdc5c 100644 --- a/tasklistapp/Gemfile.lock +++ b/tasklistapp/Gemfile.lock @@ -37,10 +37,15 @@ GEM thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) arel (6.0.3) + better_errors (2.1.1) + coderay (>= 1.0.0) + erubis (>= 2.6.6) + rack (>= 0.9.0) binding_of_caller (0.7.2) debug_inspector (>= 0.0.1) builder (3.2.2) byebug (8.2.4) + coderay (1.1.1) coffee-rails (4.1.1) coffee-script (>= 2.2.0) railties (>= 4.0.0, < 5.1.x) @@ -143,6 +148,8 @@ PLATFORMS ruby DEPENDENCIES + better_errors + binding_of_caller byebug coffee-rails (~> 4.1.0) jbuilder (~> 2.0) diff --git a/tasklistapp/app/controllers/tasks_controller.rb b/tasklistapp/app/controllers/tasks_controller.rb index ea57d1da6..1f0514698 100644 --- a/tasklistapp/app/controllers/tasks_controller.rb +++ b/tasklistapp/app/controllers/tasks_controller.rb @@ -18,7 +18,12 @@ def create else render :new end - # @task = Task.new + end + + def delete + @task = Task.find(params[:id]) + @task.destroy + redirect_to root_path end diff --git a/tasklistapp/app/views/tasks/delete.html.erb b/tasklistapp/app/views/tasks/delete.html.erb new file mode 100644 index 000000000..df667b5e2 --- /dev/null +++ b/tasklistapp/app/views/tasks/delete.html.erb @@ -0,0 +1 @@ +

<%= @task.name %> is gone for ever

diff --git a/tasklistapp/app/views/tasks/index.html.erb b/tasklistapp/app/views/tasks/index.html.erb index 2e00d5d1e..fc7d19a93 100644 --- a/tasklistapp/app/views/tasks/index.html.erb +++ b/tasklistapp/app/views/tasks/index.html.erb @@ -2,6 +2,10 @@
<%@all_tasks.each do |task| %>
-<%= link_to task.name, "/#{task.name}"%>
+<%= link_to task.name, "/#{task.name}"%> +<%= button_to "Remove That", "/delete/#{task.id}", method: :delete, data: { confirm: "Are you sure?" } %> +
<%end%> + +
  <%= params %> 
diff --git a/tasklistapp/app/views/tasks/new.html.erb b/tasklistapp/app/views/tasks/new.html.erb index 07a38cb2f..b675b4997 100644 --- a/tasklistapp/app/views/tasks/new.html.erb +++ b/tasklistapp/app/views/tasks/new.html.erb @@ -10,6 +10,12 @@
<%= f.label :description %> <%= f.text_field :description %> +
+ +<%= f.label :completed_at, value="Completed?" %> +<%= f.text_field :completed_at %> + +
<%= f.submit %> <% end %> diff --git a/tasklistapp/config/routes.rb b/tasklistapp/config/routes.rb index f0cd75330..beea33235 100644 --- a/tasklistapp/config/routes.rb +++ b/tasklistapp/config/routes.rb @@ -8,9 +8,10 @@ get '/tasks/new' => 'tasks#new' post '/tasks' => 'tasks#create', as: 'tasks' + delete '/delete/:id' => 'tasks#delete', as: 'delete' + get '/:name' => 'tasks#by_name' - # get '/atask' => 'tasks#by_task' # Example of regular route: # get 'products/:id' => 'catalog#view' From d9c0472d230beb4d70bb247e0c3bc7b54f8ddf46 Mon Sep 17 00:00:00 2001 From: melissajimison Date: Thu, 21 Apr 2016 20:41:00 -0700 Subject: [PATCH 06/32] added the completed task feature --- tasklistapp/Gemfile | 2 +- tasklistapp/Gemfile.lock | 2 ++ tasklistapp/app/assets/images/note.png | Bin 0 -> 110718 bytes .../app/assets/stylesheets/application.css | 30 +++++++++++++----- .../app/controllers/tasks_controller.rb | 11 +++++-- .../app/views/layouts/application.html.erb | 4 +-- tasklistapp/app/views/tasks/by_name.html.erb | 11 +++++-- .../app/views/tasks/completed.html.erb | 18 +++++++++++ tasklistapp/app/views/tasks/index.html.erb | 14 +++++++- tasklistapp/config/routes.rb | 5 +++ 10 files changed, 80 insertions(+), 17 deletions(-) create mode 100644 tasklistapp/app/assets/images/note.png create mode 100644 tasklistapp/app/views/tasks/completed.html.erb diff --git a/tasklistapp/Gemfile b/tasklistapp/Gemfile index 12fbd125d..5d25c7b9a 100644 --- a/tasklistapp/Gemfile +++ b/tasklistapp/Gemfile @@ -23,7 +23,7 @@ gem 'jbuilder', '~> 2.0' # bundle exec rake doc:rails generates the API under doc/api. gem 'sdoc', '~> 0.4.0', group: :doc - +gem 'chronic', '~> 0.10.2' # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7' diff --git a/tasklistapp/Gemfile.lock b/tasklistapp/Gemfile.lock index abfecdc5c..eab5bc8aa 100644 --- a/tasklistapp/Gemfile.lock +++ b/tasklistapp/Gemfile.lock @@ -45,6 +45,7 @@ GEM debug_inspector (>= 0.0.1) builder (3.2.2) byebug (8.2.4) + chronic (0.10.2) coderay (1.1.1) coffee-rails (4.1.1) coffee-script (>= 2.2.0) @@ -151,6 +152,7 @@ DEPENDENCIES better_errors binding_of_caller byebug + chronic (~> 0.10.2) coffee-rails (~> 4.1.0) jbuilder (~> 2.0) jquery-rails diff --git a/tasklistapp/app/assets/images/note.png b/tasklistapp/app/assets/images/note.png new file mode 100644 index 0000000000000000000000000000000000000000..08b1def1cf30cd67fd49fe95325e582ec73229ce GIT binary patch literal 110718 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%0D$1Zny#p0LpV+ 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 diff --git a/tasklistapp/app/views/tasks/by_name.html.erb b/tasklistapp/app/views/tasks/by_name.html.erb index a6a0536b6..26a025f19 100644 --- a/tasklistapp/app/views/tasks/by_name.html.erb +++ b/tasklistapp/app/views/tasks/by_name.html.erb @@ -2,9 +2,14 @@
<%@all_tasks.each do |task| %>
- <%= link_to task.name, "/#{task.name}"%> -
<%=task.description%> -
Completed?<%=task.completed_at%> +

<%= link_to task.name, "/#{task.name}"%> +
+ <%= task.description%> +
+ <%= task.completed_at %> +

<%end%>
+ +<%= params %> diff --git a/tasklistapp/app/views/tasks/completed.html.erb b/tasklistapp/app/views/tasks/completed.html.erb new file mode 100644 index 000000000..18bfe3732 --- /dev/null +++ b/tasklistapp/app/views/tasks/completed.html.erb @@ -0,0 +1,18 @@ + +
+ + <%@all_tasks.each do |task| %> +
+

<%= link_to task.name, "/#{task.name}"%> +
+ <%= task.description%> +
+ <%= task.completed_at%> +

+ <%= button_to "Remove That", "/delete/#{task.id}", method: :delete, data: { confirm: "Are you sure?" } %> +
+ <%end%> + + + +
diff --git a/tasklistapp/app/views/tasks/index.html.erb b/tasklistapp/app/views/tasks/index.html.erb index fc7d19a93..b220440c3 100644 --- a/tasklistapp/app/views/tasks/index.html.erb +++ b/tasklistapp/app/views/tasks/index.html.erb @@ -2,10 +2,22 @@
<%@all_tasks.each do |task| %>
-<%= link_to task.name, "/#{task.name}"%> +

<%= link_to task.name, "/#{task.name}"%>

+<%= button_to "Completed!!", "/completed/#{task.id}", method: :patch %> <%= button_to "Remove That", "/delete/#{task.id}", method: :delete, data: { confirm: "Are you sure?" } %>

<%end%>
  <%= params %> 
+ + + diff --git a/tasklistapp/config/routes.rb b/tasklistapp/config/routes.rb index beea33235..bf5b079a9 100644 --- a/tasklistapp/config/routes.rb +++ b/tasklistapp/config/routes.rb @@ -4,10 +4,15 @@ # You can have the root of your site routed with "root" root 'tasks#index' + # get '/tasks' => 'tasks#index' + get '/tasks/new' => 'tasks#new' post '/tasks' => 'tasks#create', as: 'tasks' + patch '/completed/:id' => 'tasks#completed', as: 'completed' + # get '/completed/:id' => 'tasks#comp' + delete '/delete/:id' => 'tasks#delete', as: 'delete' get '/:name' => 'tasks#by_name' From 07394391025d9cd76a6547637e3df8a72cbacbaa Mon Sep 17 00:00:00 2001 From: melissajimison Date: Fri, 22 Apr 2016 14:00:10 -0700 Subject: [PATCH 07/32] RESTful refactoring --- tasklistapp/Gemfile | 1 + tasklistapp/Gemfile.lock | 3 +++ .../app/assets/stylesheets/application.css | 3 +++ tasklistapp/app/assets/stylesheets/tasks.scss | 3 +++ .../app/controllers/tasks_controller.rb | 17 +++++++++----- .../app/views/layouts/application.html.erb | 3 ++- tasklistapp/app/views/tasks/by_name.html.erb | 15 ------------ .../app/views/tasks/completed.html.erb | 2 +- tasklistapp/app/views/tasks/edit.html.erb | 23 +++++++++++++++++++ tasklistapp/app/views/tasks/index.html.erb | 21 +++++------------ tasklistapp/app/views/tasks/show.html.erb | 14 +++++++++++ tasklistapp/config/routes.rb | 20 +++++++++------- 12 files changed, 79 insertions(+), 46 deletions(-) delete mode 100644 tasklistapp/app/views/tasks/by_name.html.erb create mode 100644 tasklistapp/app/views/tasks/edit.html.erb create mode 100644 tasklistapp/app/views/tasks/show.html.erb diff --git a/tasklistapp/Gemfile b/tasklistapp/Gemfile index 5d25c7b9a..4455f356f 100644 --- a/tasklistapp/Gemfile +++ b/tasklistapp/Gemfile @@ -24,6 +24,7 @@ gem 'jbuilder', '~> 2.0' gem 'sdoc', '~> 0.4.0', group: :doc gem 'chronic', '~> 0.10.2' +gem 'font-awesome-sass', '~> 4.5.0' # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7' diff --git a/tasklistapp/Gemfile.lock b/tasklistapp/Gemfile.lock index eab5bc8aa..cd65278fa 100644 --- a/tasklistapp/Gemfile.lock +++ b/tasklistapp/Gemfile.lock @@ -58,6 +58,8 @@ GEM debug_inspector (0.0.2) erubis (2.7.0) execjs (2.6.0) + font-awesome-sass (4.5.0) + sass (>= 3.2) globalid (0.3.6) activesupport (>= 4.1.0) i18n (0.7.0) @@ -154,6 +156,7 @@ DEPENDENCIES byebug chronic (~> 0.10.2) coffee-rails (~> 4.1.0) + font-awesome-sass (~> 4.5.0) jbuilder (~> 2.0) jquery-rails rails (= 4.2.6) diff --git a/tasklistapp/app/assets/stylesheets/application.css b/tasklistapp/app/assets/stylesheets/application.css index aff6b9e7f..258ecd41d 100644 --- a/tasklistapp/app/assets/stylesheets/application.css +++ b/tasklistapp/app/assets/stylesheets/application.css @@ -14,6 +14,9 @@ *= require_self */ + @import "font-awesome-sprockets"; + @import "font-awesome"; + html { background-attachment: fixed; background-image: url("../images/notebook-background.png"); diff --git a/tasklistapp/app/assets/stylesheets/tasks.scss b/tasklistapp/app/assets/stylesheets/tasks.scss index b57862ec7..334023f05 100644 --- a/tasklistapp/app/assets/stylesheets/tasks.scss +++ b/tasklistapp/app/assets/stylesheets/tasks.scss @@ -1,3 +1,6 @@ // Place all the styles related to the tasks controller here. // They will automatically be included in application.css. // You can use Sass (SCSS) here: http://sass-lang.com/ + +@import "font-awesome-sprockets"; + @import "font-awesome"; diff --git a/tasklistapp/app/controllers/tasks_controller.rb b/tasklistapp/app/controllers/tasks_controller.rb index aa77eed35..cb5105e3c 100644 --- a/tasklistapp/app/controllers/tasks_controller.rb +++ b/tasklistapp/app/controllers/tasks_controller.rb @@ -1,11 +1,10 @@ class TasksController < ApplicationController def index @all_tasks = Task.order(completed_at: :asc).where(completed_at: nil) +end - end - - def by_name - @all_tasks = Task.where(name: params[:name]) + def show + @task = Task.find(params[:id]) end def new @@ -21,13 +20,19 @@ def create end end + # def edit + # @task = Task.find(params[:id]) + # # redirect_to root_path + # + # end + def completed @task = Task.find(params[:id]) @task.update(completed_at: DateTime.now) - @all_tasks = Task.where.not(completed_at: nil) + @all_completed_tasks = Task.where.not(completed_at: nil) end - def delete + def destroy @task = Task.find(params[:id]) @task.destroy redirect_to root_path diff --git a/tasklistapp/app/views/layouts/application.html.erb b/tasklistapp/app/views/layouts/application.html.erb index 266904140..01061beb5 100644 --- a/tasklistapp/app/views/layouts/application.html.erb +++ b/tasklistapp/app/views/layouts/application.html.erb @@ -14,6 +14,7 @@ + @@ -24,7 +25,7 @@ diff --git a/tasklistapp/app/views/tasks/by_name.html.erb b/tasklistapp/app/views/tasks/by_name.html.erb deleted file mode 100644 index 26a025f19..000000000 --- a/tasklistapp/app/views/tasks/by_name.html.erb +++ /dev/null @@ -1,15 +0,0 @@ -

All about this task!!!!

-
- <%@all_tasks.each do |task| %> -
-

<%= link_to task.name, "/#{task.name}"%> -
- <%= task.description%> -
- <%= task.completed_at %> -

-
- <%end%> -
- -<%= params %> diff --git a/tasklistapp/app/views/tasks/completed.html.erb b/tasklistapp/app/views/tasks/completed.html.erb index 18bfe3732..61218470b 100644 --- a/tasklistapp/app/views/tasks/completed.html.erb +++ b/tasklistapp/app/views/tasks/completed.html.erb @@ -1,7 +1,7 @@
- <%@all_tasks.each do |task| %> + <%@all_completed_tasks.each do |task| %>

<%= link_to task.name, "/#{task.name}"%>
diff --git a/tasklistapp/app/views/tasks/edit.html.erb b/tasklistapp/app/views/tasks/edit.html.erb new file mode 100644 index 000000000..bd2a13363 --- /dev/null +++ b/tasklistapp/app/views/tasks/edit.html.erb @@ -0,0 +1,23 @@ +

+ +

HI!! Let's edit this task!

+ +
  <%= params %> 
+<%= form_for @task, class: "main-form" do |f| %> + +<%= f.label :name, value="New Task" %> +<%= f.text_field :name %> +
+<%= f.label :description %> +<%= f.text_field :description %> +
+ +<%= f.label :completed_at, value="Completed?" %> +<%= f.text_field :completed_at %> + +
+ +<%= f.submit %> +<% end %> + +
diff --git a/tasklistapp/app/views/tasks/index.html.erb b/tasklistapp/app/views/tasks/index.html.erb index b220440c3..17553856a 100644 --- a/tasklistapp/app/views/tasks/index.html.erb +++ b/tasklistapp/app/views/tasks/index.html.erb @@ -2,22 +2,13 @@
<%@all_tasks.each do |task| %>
-

<%= link_to task.name, "/#{task.name}"%>

-<%= button_to "Completed!!", "/completed/#{task.id}", method: :patch %> -<%= button_to "Remove That", "/delete/#{task.id}", method: :delete, data: { confirm: "Are you sure?" } %> +

<%= link_to task.name, task_path(task.id)%>

+ + + +

- <%end%> + <%end%>
  <%= params %> 
- - - diff --git a/tasklistapp/app/views/tasks/show.html.erb b/tasklistapp/app/views/tasks/show.html.erb new file mode 100644 index 000000000..2980947af --- /dev/null +++ b/tasklistapp/app/views/tasks/show.html.erb @@ -0,0 +1,14 @@ +

All about this task!!!!

+
+
+

+ <%=@task.name %> +
+ <%= @task.description%> +
+ <%= @task.completed_at %> +

+
+
+ +<%= params %> diff --git a/tasklistapp/config/routes.rb b/tasklistapp/config/routes.rb index bf5b079a9..232af9dc0 100644 --- a/tasklistapp/config/routes.rb +++ b/tasklistapp/config/routes.rb @@ -4,18 +4,22 @@ # You can have the root of your site routed with "root" root 'tasks#index' - # get '/tasks' => 'tasks#index' + get '/tasks' => 'tasks#index' - get '/tasks/new' => 'tasks#new' - post '/tasks' => 'tasks#create', as: 'tasks' + # get '/tasks/new' => 'tasks#new' + # post '/tasks' => 'tasks#create', as: 'tasks' - patch '/completed/:id' => 'tasks#completed', as: 'completed' - # get '/completed/:id' => 'tasks#comp' - - delete '/delete/:id' => 'tasks#delete', as: 'delete' + get '/tasks/:id' => 'tasks#show', as: 'task' + # + # + # get '/task/:id/edit' => 'tasks#edit' + # patch '/tasks/:id/edit' => 'tasks#edit', as: 'edit' + # + # patch '/tasks/:id' => 'tasks#completed', as: 'completed' + # + # delete '/tasks/:id' => 'tasks#destroy' - get '/:name' => 'tasks#by_name' # Example of regular route: From 4fe72926095143497165278dc53f2fde0f281bc6 Mon Sep 17 00:00:00 2001 From: melissajimison Date: Mon, 25 Apr 2016 08:06:50 -0700 Subject: [PATCH 08/32] made the pacht work, without GET? --- tasklistapp/app/assets/images/note2.png | Bin 0 -> 79881 bytes .../app/assets/stylesheets/application.css | 31 +++++++++++++----- tasklistapp/app/assets/stylesheets/tasks.scss | 3 -- .../app/controllers/tasks_controller.rb | 26 ++++++++++++--- .../app/views/layouts/application.html.erb | 4 +-- .../app/views/tasks/completed.html.erb | 30 +++++++++-------- tasklistapp/app/views/tasks/index.html.erb | 24 +++++++++++--- tasklistapp/app/views/tasks/show.html.erb | 14 +++++++- tasklistapp/config/routes.rb | 24 ++++++++------ 9 files changed, 109 insertions(+), 47 deletions(-) create mode 100644 tasklistapp/app/assets/images/note2.png diff --git a/tasklistapp/app/assets/images/note2.png b/tasklistapp/app/assets/images/note2.png new file mode 100644 index 0000000000000000000000000000000000000000..77e187e8d8d9dd846990295caaec7cfc31988a16 GIT binary patch literal 79881 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≶A$4gWgk_iY1#WlbO7oIX`jx$5p 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 X%EEwY*z1{J00000NkvXXu0mjfcn)P( literal 0 HcmV?d00001 diff --git a/tasklistapp/app/assets/stylesheets/application.css b/tasklistapp/app/assets/stylesheets/application.css index 258ecd41d..29807d091 100644 --- a/tasklistapp/app/assets/stylesheets/application.css +++ b/tasklistapp/app/assets/stylesheets/application.css @@ -14,14 +14,9 @@ *= require_self */ - @import "font-awesome-sprockets"; - @import "font-awesome"; - html { background-attachment: fixed; - background-image: url("../images/notebook-background.png"); background-position: center; - background-repeat: no-repeat; background-size: cover; -webkit-background-size: cover; -moz-background-size: cover; @@ -119,28 +114,48 @@ margin: .8rem; text-align: left; width: 28%; - height: 300px; + height: 340px; background-image: url("note.png"); background-repeat: no-repeat; border: solid green; + overflow: auto; + + } + + .task-item-azul { + display: inline-block; + font-size: 24px; + font-weight: 300; + margin: .8rem; + text-align: left; + width: 28%; + height: 300px; + background-image: url("note2.png"); + background-repeat: no-repeat; + border: solid green; } .text{ + height: 115px; border: solid blue; width: 75%; margin:2rem; margin-top:6rem; - } .task-description { padding: 6rem; line-height: 2.2rem; border: solid black; - } +.buttons{ + display: flex; + border: solid red; + position: relative; + margin-bottom: 0; +} .submit-button{ color:white; margin-top: 5px; diff --git a/tasklistapp/app/assets/stylesheets/tasks.scss b/tasklistapp/app/assets/stylesheets/tasks.scss index 334023f05..b57862ec7 100644 --- a/tasklistapp/app/assets/stylesheets/tasks.scss +++ b/tasklistapp/app/assets/stylesheets/tasks.scss @@ -1,6 +1,3 @@ // Place all the styles related to the tasks controller here. // They will automatically be included in application.css. // You can use Sass (SCSS) here: http://sass-lang.com/ - -@import "font-awesome-sprockets"; - @import "font-awesome"; diff --git a/tasklistapp/app/controllers/tasks_controller.rb b/tasklistapp/app/controllers/tasks_controller.rb index cb5105e3c..e35e822ba 100644 --- a/tasklistapp/app/controllers/tasks_controller.rb +++ b/tasklistapp/app/controllers/tasks_controller.rb @@ -1,6 +1,6 @@ class TasksController < ApplicationController def index - @all_tasks = Task.order(completed_at: :asc).where(completed_at: nil) + @all_tasks = Task.order(completed_at: :asc)#.where(completed_at: '') end def show @@ -20,16 +20,32 @@ def create end end - # def edit + def edit + @task = Task.find(params[:id]) + end + + def update + @task = Task.find(params[:id]) + @task.update(tasks_create_params[:task]) + redirect_to root_path + end + + # def precompleted # @task = Task.find(params[:id]) - # # redirect_to root_path - # + # render :completed # end def completed @task = Task.find(params[:id]) @task.update(completed_at: DateTime.now) - @all_completed_tasks = Task.where.not(completed_at: nil) + @all_tasks = Task.where.not(completed_at: "") + end + + def uncompleted + @task = Task.find(params[:id]) + @task.update(completed_at: "") + redirect_to root_path + end def destroy diff --git a/tasklistapp/app/views/layouts/application.html.erb b/tasklistapp/app/views/layouts/application.html.erb index 01061beb5..54ecc3e90 100644 --- a/tasklistapp/app/views/layouts/application.html.erb +++ b/tasklistapp/app/views/layouts/application.html.erb @@ -6,7 +6,6 @@ <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> <%= csrf_meta_tags %> - @@ -14,7 +13,6 @@ - @@ -25,7 +23,7 @@ diff --git a/tasklistapp/app/views/tasks/completed.html.erb b/tasklistapp/app/views/tasks/completed.html.erb index 61218470b..a5fb0f627 100644 --- a/tasklistapp/app/views/tasks/completed.html.erb +++ b/tasklistapp/app/views/tasks/completed.html.erb @@ -1,18 +1,22 @@ - +

Here is the big list of things I have to do!!!!

+ <%@all_tasks = Task.where.not(completed_at: "").order(completed_at: :desc)%> - <%@all_completed_tasks.each do |task| %> -
-

<%= link_to task.name, "/#{task.name}"%> -
- <%= task.description%> -
- <%= task.completed_at%> -

- <%= button_to "Remove That", "/delete/#{task.id}", method: :delete, data: { confirm: "Are you sure?" } %> -
- <%end%> - + <%@all_tasks.each do |task| %> +
+

<%= link_to task.name, task_path(task.id)%> +
+ <%=task.completed_at%> +

+ +
+<%= button_to "Opps um!!", uncompleted_path(task.id), method: :patch %> +<%= button_to "Remove That", destroy_path(task.id), method: :delete, data: { confirm: "Are you sure?" } %> +
+
+ <%end%>
+ +
  <%= params %> 
diff --git a/tasklistapp/app/views/tasks/index.html.erb b/tasklistapp/app/views/tasks/index.html.erb index 17553856a..c9e7ea6ad 100644 --- a/tasklistapp/app/views/tasks/index.html.erb +++ b/tasklistapp/app/views/tasks/index.html.erb @@ -1,12 +1,28 @@

Here is the big list of things I have to do!!!!

<%@all_tasks.each do |task| %> + <% if task.completed_at == "" %> +
-

<%= link_to task.name, task_path(task.id)%>

- + <% elsif task.completed_at != "" %> + +

+ <% else %> + <%= "ERROR" %> + + <% end %> - - +

+ <%= link_to task.name, task_path(task.id)%> +
+ <%=task.completed_at%> +

+
+ +<%= button_to "Edit", edit_path(task.id), method: :get %> +<%= button_to "Completed!!", completed_path(task.id), method: :patch %> +<%= button_to "Remove That", destroy_path(task.id), method: :delete, data: { confirm: "Are you sure?" } %> +
<%end%>
diff --git a/tasklistapp/app/views/tasks/show.html.erb b/tasklistapp/app/views/tasks/show.html.erb index 2980947af..906679887 100644 --- a/tasklistapp/app/views/tasks/show.html.erb +++ b/tasklistapp/app/views/tasks/show.html.erb @@ -1,13 +1,25 @@

All about this task!!!!

-

+

<%=@task.name %>
<%= @task.description%>
<%= @task.completed_at %>

+
+ <%= button_to "Edit", edit_path(@task.id), method: :get %> + + <% if @task.completed_at == ""%> + <%= button_to "Completed!!", completed_path(@task.id), method: :patch %> + <% else %> + <%= button_to "Opps um!!", uncompleted_path(@task.id), method: :patch %> + <% end %> + <%= button_to "Remove That", destroy_path(@task.id), method: :delete, data: { confirm: "Are you sure?" } %> +
+ +
diff --git a/tasklistapp/config/routes.rb b/tasklistapp/config/routes.rb index 232af9dc0..e2ed0c791 100644 --- a/tasklistapp/config/routes.rb +++ b/tasklistapp/config/routes.rb @@ -4,21 +4,25 @@ # You can have the root of your site routed with "root" root 'tasks#index' - get '/tasks' => 'tasks#index' + get '/tasks' => 'tasks#index', as: 'tasks' - # get '/tasks/new' => 'tasks#new' - # post '/tasks' => 'tasks#create', as: 'tasks' + post '/tasks' => 'tasks#create' + get '/tasks/new' => 'tasks#new' get '/tasks/:id' => 'tasks#show', as: 'task' + + + get '/task/:id/edit' => 'tasks#edit', as: 'edit' + patch '/tasks/:id' => 'tasks#update' + + # get '/tasks/:id/completed' => 'tasks#precompleted' + patch '/tasks/:id/completed' => 'tasks#completed', as: 'completed' + + patch '/tasks/:id/uncompleted' => 'tasks#uncompleted', as: 'uncompleted' + # - # - # get '/task/:id/edit' => 'tasks#edit' - # patch '/tasks/:id/edit' => 'tasks#edit', as: 'edit' - # - # patch '/tasks/:id' => 'tasks#completed', as: 'completed' - # - # delete '/tasks/:id' => 'tasks#destroy' + delete '/tasks/:id' => 'tasks#destroy', as: 'destroy' From ed164628522da67ed2f87879fd6628aacb88e038 Mon Sep 17 00:00:00 2001 From: melissajimison Date: Mon, 25 Apr 2016 11:15:17 -0700 Subject: [PATCH 09/32] aja --- tasklistapp/Gemfile | 15 +++++++++------ tasklistapp/Gemfile.lock | 8 ++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/tasklistapp/Gemfile b/tasklistapp/Gemfile index 4455f356f..b0939435a 100644 --- a/tasklistapp/Gemfile +++ b/tasklistapp/Gemfile @@ -3,8 +3,7 @@ source 'https://rubygems.org' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '4.2.6' -# Use sqlite3 as the database for Active Record -gem 'sqlite3' + # Use SCSS for stylesheets gem 'sass-rails', '~> 5.0' # Use Uglifier as compressor for JavaScript assets @@ -34,20 +33,24 @@ gem 'font-awesome-sass', '~> 4.5.0' # Use Capistrano for deployment # gem 'capistrano-rails', group: :development + group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug' + # Use sqlite3 as the database for Active Record + gem 'sqlite3' end group :development do + gem 'better_errors' + gem 'binding_of_caller' # Access an IRB console on exception pages or by using <%= console %> in views gem 'web-console', '~> 2.0' - # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' end -group :development do - gem "better_errors" - gem "binding_of_caller" +group :production do + gem 'pg' + gem 'rails_12factor' end diff --git a/tasklistapp/Gemfile.lock b/tasklistapp/Gemfile.lock index cd65278fa..c1597eec9 100644 --- a/tasklistapp/Gemfile.lock +++ b/tasklistapp/Gemfile.lock @@ -83,6 +83,7 @@ GEM multi_json (1.11.2) nokogiri (1.6.7.2) mini_portile2 (~> 2.0.0.rc2) + pg (0.18.4) rack (1.6.4) rack-test (0.6.3) rack (>= 1.0) @@ -105,6 +106,11 @@ GEM rails-deprecated_sanitizer (>= 1.0.1) rails-html-sanitizer (1.0.3) loofah (~> 2.0) + rails_12factor (0.0.3) + rails_serve_static_assets + rails_stdout_logging + rails_serve_static_assets (0.0.5) + rails_stdout_logging (0.0.5) railties (4.2.6) actionpack (= 4.2.6) activesupport (= 4.2.6) @@ -159,7 +165,9 @@ DEPENDENCIES font-awesome-sass (~> 4.5.0) jbuilder (~> 2.0) jquery-rails + pg rails (= 4.2.6) + rails_12factor sass-rails (~> 5.0) sdoc (~> 0.4.0) spring From c8479db579a4c59062120cd2698e0de9b736f1c7 Mon Sep 17 00:00:00 2001 From: melissajimison Date: Mon, 25 Apr 2016 14:55:19 -0700 Subject: [PATCH 10/32] moves files up --- .gitignore | 46 ++++------- .ruby-gemset | 1 - .ruby-version | 1 - tasklistapp/Gemfile => Gemfile | 2 - tasklistapp/Gemfile.lock => Gemfile.lock | 0 README.md | 75 ------------------ tasklistapp/README.rdoc => README.rdoc | 0 tasklistapp/Rakefile => Rakefile | 0 TaskListRails/.gitignore | 35 -------- TaskListRails/.ruby-gemset | 1 - TaskListRails/.ruby-version | 1 - TaskListRails/README.md | 75 ------------------ TaskListRails/seeds.rb | 20 ----- {tasklistapp/app => app}/assets/images/.keep | 0 .../app => app}/assets/images/note.png | Bin .../app => app}/assets/images/note2.png | Bin .../assets/javascripts/application.js | 0 .../assets/javascripts/tasks.coffee | 0 .../assets/stylesheets/application.css | 0 .../app => app}/assets/stylesheets/tasks.scss | 0 .../controllers/application_controller.rb | 0 .../app => app}/controllers/concerns/.keep | 0 .../controllers/tasks_controller.rb | 0 .../app => app}/helpers/application_helper.rb | 0 .../app => app}/helpers/tasks_helper.rb | 0 {tasklistapp/app => app}/mailers/.keep | 0 {tasklistapp/app => app}/models/.keep | 0 .../app => app}/models/concerns/.keep | 0 app/models/person.rb | 4 + {tasklistapp/app => app}/models/task.rb | 2 + .../views/layouts/application.html.erb | 0 .../views/tasks/completed.html.erb | 0 .../app => app}/views/tasks/delete.html.erb | 0 .../app => app}/views/tasks/edit.html.erb | 0 .../app => app}/views/tasks/index.html.erb | 0 .../app => app}/views/tasks/new.html.erb | 0 .../app => app}/views/tasks/show.html.erb | 0 {tasklistapp/bin => bin}/bundle | 0 {tasklistapp/bin => bin}/rails | 0 {tasklistapp/bin => bin}/rake | 0 {tasklistapp/bin => bin}/setup | 0 {tasklistapp/bin => bin}/spring | 0 tasklistapp/config.ru => config.ru | 0 {tasklistapp/config => config}/application.rb | 0 {tasklistapp/config => config}/boot.rb | 0 {tasklistapp/config => config}/database.yml | 0 {tasklistapp/config => config}/environment.rb | 0 .../environments/development.rb | 0 .../environments/production.rb | 0 .../config => config}/environments/test.rb | 0 .../config => config}/initializers/assets.rb | 0 .../initializers/backtrace_silencers.rb | 0 .../initializers/cookies_serializer.rb | 0 .../initializers/filter_parameter_logging.rb | 0 .../initializers/inflections.rb | 0 .../initializers/mime_types.rb | 0 .../initializers/session_store.rb | 0 .../initializers/wrap_parameters.rb | 0 {tasklistapp/config => config}/locales/en.yml | 0 {tasklistapp/config => config}/routes.rb | 0 {tasklistapp/config => config}/secrets.yml | 0 .../migrate/20160419204103_create_tasks.rb | 0 db/migrate/20160425192841_create_people.rb | 8 ++ {tasklistapp/db => db}/schema.rb | 0 {tasklistapp/db => db}/seeds.rb | 0 {tasklistapp/lib => lib}/assets/.keep | 0 {tasklistapp/lib => lib}/tasks/.keep | 0 {tasklistapp/log => log}/.keep | 0 {tasklistapp/public => public}/404.html | 0 {tasklistapp/public => public}/422.html | 0 {tasklistapp/public => public}/500.html | 0 {tasklistapp/public => public}/favicon.ico | 0 {tasklistapp/public => public}/robots.txt | 0 seeds.rb | 20 ----- tasklistapp/.gitignore | 17 ---- {tasklistapp/test => test}/controllers/.keep | 0 .../controllers/tasks_controller_test.rb | 0 {tasklistapp/test => test}/fixtures/.keep | 0 test/fixtures/people.yml | 11 +++ {tasklistapp/test => test}/fixtures/tasks.yml | 0 {tasklistapp/test => test}/helpers/.keep | 0 {tasklistapp/test => test}/integration/.keep | 0 {tasklistapp/test => test}/mailers/.keep | 0 {tasklistapp/test => test}/models/.keep | 0 test/models/person_test.rb | 7 ++ .../test => test}/models/task_test.rb | 0 {tasklistapp/test => test}/test_helper.rb | 0 .../assets/javascripts/.keep | 0 .../assets/stylesheets/.keep | 0 89 files changed, 46 insertions(+), 280 deletions(-) delete mode 100644 .ruby-gemset delete mode 100644 .ruby-version rename tasklistapp/Gemfile => Gemfile (99%) rename tasklistapp/Gemfile.lock => Gemfile.lock (100%) delete mode 100644 README.md rename tasklistapp/README.rdoc => README.rdoc (100%) rename tasklistapp/Rakefile => Rakefile (100%) delete mode 100644 TaskListRails/.gitignore delete mode 100644 TaskListRails/.ruby-gemset delete mode 100644 TaskListRails/.ruby-version delete mode 100644 TaskListRails/README.md delete mode 100644 TaskListRails/seeds.rb rename {tasklistapp/app => app}/assets/images/.keep (100%) rename {tasklistapp/app => app}/assets/images/note.png (100%) rename {tasklistapp/app => app}/assets/images/note2.png (100%) rename {tasklistapp/app => app}/assets/javascripts/application.js (100%) rename {tasklistapp/app => app}/assets/javascripts/tasks.coffee (100%) rename {tasklistapp/app => app}/assets/stylesheets/application.css (100%) rename {tasklistapp/app => app}/assets/stylesheets/tasks.scss (100%) rename {tasklistapp/app => app}/controllers/application_controller.rb (100%) rename {tasklistapp/app => app}/controllers/concerns/.keep (100%) rename {tasklistapp/app => app}/controllers/tasks_controller.rb (100%) rename {tasklistapp/app => app}/helpers/application_helper.rb (100%) rename {tasklistapp/app => app}/helpers/tasks_helper.rb (100%) rename {tasklistapp/app => app}/mailers/.keep (100%) rename {tasklistapp/app => app}/models/.keep (100%) rename {tasklistapp/app => app}/models/concerns/.keep (100%) create mode 100644 app/models/person.rb rename {tasklistapp/app => app}/models/task.rb (60%) rename {tasklistapp/app => app}/views/layouts/application.html.erb (100%) rename {tasklistapp/app => app}/views/tasks/completed.html.erb (100%) rename {tasklistapp/app => app}/views/tasks/delete.html.erb (100%) rename {tasklistapp/app => app}/views/tasks/edit.html.erb (100%) rename {tasklistapp/app => app}/views/tasks/index.html.erb (100%) rename {tasklistapp/app => app}/views/tasks/new.html.erb (100%) rename {tasklistapp/app => app}/views/tasks/show.html.erb (100%) rename {tasklistapp/bin => bin}/bundle (100%) rename {tasklistapp/bin => bin}/rails (100%) rename {tasklistapp/bin => bin}/rake (100%) rename {tasklistapp/bin => bin}/setup (100%) rename {tasklistapp/bin => bin}/spring (100%) rename tasklistapp/config.ru => config.ru (100%) rename {tasklistapp/config => config}/application.rb (100%) rename {tasklistapp/config => config}/boot.rb (100%) rename {tasklistapp/config => config}/database.yml (100%) rename {tasklistapp/config => config}/environment.rb (100%) rename {tasklistapp/config => config}/environments/development.rb (100%) rename {tasklistapp/config => config}/environments/production.rb (100%) rename {tasklistapp/config => config}/environments/test.rb (100%) rename {tasklistapp/config => config}/initializers/assets.rb (100%) rename {tasklistapp/config => config}/initializers/backtrace_silencers.rb (100%) rename {tasklistapp/config => config}/initializers/cookies_serializer.rb (100%) rename {tasklistapp/config => config}/initializers/filter_parameter_logging.rb (100%) rename {tasklistapp/config => config}/initializers/inflections.rb (100%) rename {tasklistapp/config => config}/initializers/mime_types.rb (100%) rename {tasklistapp/config => config}/initializers/session_store.rb (100%) rename {tasklistapp/config => config}/initializers/wrap_parameters.rb (100%) rename {tasklistapp/config => config}/locales/en.yml (100%) rename {tasklistapp/config => config}/routes.rb (100%) rename {tasklistapp/config => config}/secrets.yml (100%) rename {tasklistapp/db => db}/migrate/20160419204103_create_tasks.rb (100%) create mode 100644 db/migrate/20160425192841_create_people.rb rename {tasklistapp/db => db}/schema.rb (100%) rename {tasklistapp/db => db}/seeds.rb (100%) rename {tasklistapp/lib => lib}/assets/.keep (100%) rename {tasklistapp/lib => lib}/tasks/.keep (100%) rename {tasklistapp/log => log}/.keep (100%) rename {tasklistapp/public => public}/404.html (100%) rename {tasklistapp/public => public}/422.html (100%) rename {tasklistapp/public => public}/500.html (100%) rename {tasklistapp/public => public}/favicon.ico (100%) rename {tasklistapp/public => public}/robots.txt (100%) delete mode 100644 seeds.rb delete mode 100644 tasklistapp/.gitignore rename {tasklistapp/test => test}/controllers/.keep (100%) rename {tasklistapp/test => test}/controllers/tasks_controller_test.rb (100%) rename {tasklistapp/test => test}/fixtures/.keep (100%) create mode 100644 test/fixtures/people.yml rename {tasklistapp/test => test}/fixtures/tasks.yml (100%) rename {tasklistapp/test => test}/helpers/.keep (100%) rename {tasklistapp/test => test}/integration/.keep (100%) rename {tasklistapp/test => test}/mailers/.keep (100%) rename {tasklistapp/test => test}/models/.keep (100%) create mode 100644 test/models/person_test.rb rename {tasklistapp/test => test}/models/task_test.rb (100%) rename {tasklistapp/test => test}/test_helper.rb (100%) rename {tasklistapp/vendor => vendor}/assets/javascripts/.keep (100%) rename {tasklistapp/vendor => vendor}/assets/stylesheets/.keep (100%) diff --git a/.gitignore b/.gitignore index 28f484983..050c9d95c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,35 +1,17 @@ -*.gem -*.rbc -/.config -/coverage/ -/InstalledFiles -/pkg/ -/spec/reports/ -/test/tmp/ -/test/version_tmp/ -/tmp/ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' -## Specific to RubyMotion: -.dat* -.repl_history -build/ +# Ignore bundler config. +/.bundle -## Documentation cache and generated files: -/.yardoc/ -/_yardoc/ -/doc/ -/rdoc/ +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal -## Environment normalisation: -/.bundle/ -/vendor/bundle -/lib/bundler/man/ - -# for a library or gem, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# Gemfile.lock -# .ruby-version -# .ruby-gemset - -# unless supporting rvm < 1.11.0 or doing something fancy, ignore this: -.rvmrc +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +/tmp diff --git a/.ruby-gemset b/.ruby-gemset deleted file mode 100644 index 5d2410e51..000000000 --- a/.ruby-gemset +++ /dev/null @@ -1 +0,0 @@ -TaskListRails diff --git a/.ruby-version b/.ruby-version deleted file mode 100644 index 276cbf9e2..000000000 --- a/.ruby-version +++ /dev/null @@ -1 +0,0 @@ -2.3.0 diff --git a/tasklistapp/Gemfile b/Gemfile similarity index 99% rename from tasklistapp/Gemfile rename to Gemfile index b0939435a..9f7eb92e8 100644 --- a/tasklistapp/Gemfile +++ b/Gemfile @@ -1,6 +1,5 @@ source 'https://rubygems.org' - # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '4.2.6' @@ -33,7 +32,6 @@ gem 'font-awesome-sass', '~> 4.5.0' # Use Capistrano for deployment # gem 'capistrano-rails', group: :development - group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug' diff --git a/tasklistapp/Gemfile.lock b/Gemfile.lock similarity index 100% rename from tasklistapp/Gemfile.lock rename to Gemfile.lock diff --git a/README.md b/README.md deleted file mode 100644 index 5d73b6980..000000000 --- a/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# Task List Rails -Let's build our Task List in Rails. Solving the same problem--tracking tasks in a web app--will let us focus on following Rails conventions and learning how data flows through a Rails application. This project will enable us to keep track of and persist, add, edit and remove tasks. - -## Baseline -Once you've achieved this baseline, take a walk around the room and see if you can answer questions or help other folks. - -This project... - -- Will have our standard Github setup (fork this repo and clone to your machine) -- requires you to create a Rails 4.2.6 application - - create a controller for your `Tasks` - - create a `Task` model a migration. - - create the database schema and tables with `rake db:migrate` - - the `Task` model should include _at least_ a name, a description and a completion indicator - - conform to Rails conventions on naming and inflection - -Tinker with your Model in the `rails console` in order to ensure you have created your model and can interact with it as expected. - -## Wave 1 -This wave is where we will introduce the view layer to interact with our application via the browser. - -- Use the provided seed data to pre-populate your database with a given set of tasks. - - Hint: research `rake db:seed` -- Set up necessary controller(s) and route(s) that you will need in order to show a task from the database -- Create a root route for your application that directs users to the list of tasks - - Each task name in the list should link to a `show` action that will render a new view for the user. - - The `show` view should include the complete information about the task: name, description, completion status, and completion date. -- All markup in all views should have semantic relevance. -- Add some basic styles to your task list. - -## Wave 2 -In this wave we will add the first set of user interactivity and persistence. - -- Be able to create a new task: - - The home page should contain a link to Add a new task. This will give the user a form to fill out with the appropriate task fields. - - After the new task is added, the site should take the user back to the home page which displays the full list of tasks. The new task that was just added should be included in the full list of tasks. -- Be able to delete an existing task: - - Add a route and controller action whose responsibility is deleting a task (RESTful routes) - - On the home page, add a button or link for each task that will, once clicked... - 1. Ask the user to confirm that they definitely want to delete the task. - 1. Delete the task from the database and redirect the user back to the list of remaining tasks - -## Wave 3 -In this wave we will extend the interactivity with users, allowing them to edit existing tasks in a couple of different ways. As always, follow _RESTful_ conventions when implementing these features. - -- Add the ability for the user to mark a task complete - - Add a button to the list of tasks on the home page that, when clicked, will mark a task complete. - - Update the database with the task's completed date -- Add the ability for the user to edit a task's details. - - Add an `edit` action that renders a form allowing the user to update all the fields of a task. - - Submitting the form from the `edit` action should _update_ the existing task; not create a new one. - - Research: ActiveRecord's `update` method. - - Link to the `edit` action from the task's `show` page. - - DRY up your code by reusing the view code from the `new` functionality - - Hint: Rendering _partials_ in Rails. - -## Final Wave! -In this wave, we explore creating ActiveRecord associations by creating `belongs_to` and `has_many` relationships. - -- Create a model & migration for a new Person object. - - at a minimum, a Person should have a name -- Create seed data to add at least three Person records to the database. -- Each Task in your database can be assigned to a Person, indicating that Person is responsible for completing the Task. - - Express the relationship between Person and Task using `belongs_to` and `has_many` - - Update your Task `index` and `show` actions to include displaying the Person's name to which the Task belongs. - - Update your Task's `new` and `edit` actions to allow for selecting an _existing_ Person to which the Task should be associated. -- Add a new people (the plural of Person) controller with the following routes and actions - - `index` action: Show a list of all people in the database. - - Link each Person's name to their `show` action. - - The index should include a count of how many _uncompleted_ tasks are assigned to each Person. - - `show` action: show all of the Person's information -- Create a custom route and action for showing a complete list of a Person's tasks, both complete and incomplete. - - The url of this page should look something like `http://localhost:5000/people/1/tasks`. - - Link to this action from a Person's `show` view. -- Deploy your completed app to Heroku. diff --git a/tasklistapp/README.rdoc b/README.rdoc similarity index 100% rename from tasklistapp/README.rdoc rename to README.rdoc diff --git a/tasklistapp/Rakefile b/Rakefile similarity index 100% rename from tasklistapp/Rakefile rename to Rakefile diff --git a/TaskListRails/.gitignore b/TaskListRails/.gitignore deleted file mode 100644 index 28f484983..000000000 --- a/TaskListRails/.gitignore +++ /dev/null @@ -1,35 +0,0 @@ -*.gem -*.rbc -/.config -/coverage/ -/InstalledFiles -/pkg/ -/spec/reports/ -/test/tmp/ -/test/version_tmp/ -/tmp/ - -## Specific to RubyMotion: -.dat* -.repl_history -build/ - -## Documentation cache and generated files: -/.yardoc/ -/_yardoc/ -/doc/ -/rdoc/ - -## Environment normalisation: -/.bundle/ -/vendor/bundle -/lib/bundler/man/ - -# for a library or gem, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# Gemfile.lock -# .ruby-version -# .ruby-gemset - -# unless supporting rvm < 1.11.0 or doing something fancy, ignore this: -.rvmrc diff --git a/TaskListRails/.ruby-gemset b/TaskListRails/.ruby-gemset deleted file mode 100644 index 5d2410e51..000000000 --- a/TaskListRails/.ruby-gemset +++ /dev/null @@ -1 +0,0 @@ -TaskListRails diff --git a/TaskListRails/.ruby-version b/TaskListRails/.ruby-version deleted file mode 100644 index 276cbf9e2..000000000 --- a/TaskListRails/.ruby-version +++ /dev/null @@ -1 +0,0 @@ -2.3.0 diff --git a/TaskListRails/README.md b/TaskListRails/README.md deleted file mode 100644 index 5d73b6980..000000000 --- a/TaskListRails/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# Task List Rails -Let's build our Task List in Rails. Solving the same problem--tracking tasks in a web app--will let us focus on following Rails conventions and learning how data flows through a Rails application. This project will enable us to keep track of and persist, add, edit and remove tasks. - -## Baseline -Once you've achieved this baseline, take a walk around the room and see if you can answer questions or help other folks. - -This project... - -- Will have our standard Github setup (fork this repo and clone to your machine) -- requires you to create a Rails 4.2.6 application - - create a controller for your `Tasks` - - create a `Task` model a migration. - - create the database schema and tables with `rake db:migrate` - - the `Task` model should include _at least_ a name, a description and a completion indicator - - conform to Rails conventions on naming and inflection - -Tinker with your Model in the `rails console` in order to ensure you have created your model and can interact with it as expected. - -## Wave 1 -This wave is where we will introduce the view layer to interact with our application via the browser. - -- Use the provided seed data to pre-populate your database with a given set of tasks. - - Hint: research `rake db:seed` -- Set up necessary controller(s) and route(s) that you will need in order to show a task from the database -- Create a root route for your application that directs users to the list of tasks - - Each task name in the list should link to a `show` action that will render a new view for the user. - - The `show` view should include the complete information about the task: name, description, completion status, and completion date. -- All markup in all views should have semantic relevance. -- Add some basic styles to your task list. - -## Wave 2 -In this wave we will add the first set of user interactivity and persistence. - -- Be able to create a new task: - - The home page should contain a link to Add a new task. This will give the user a form to fill out with the appropriate task fields. - - After the new task is added, the site should take the user back to the home page which displays the full list of tasks. The new task that was just added should be included in the full list of tasks. -- Be able to delete an existing task: - - Add a route and controller action whose responsibility is deleting a task (RESTful routes) - - On the home page, add a button or link for each task that will, once clicked... - 1. Ask the user to confirm that they definitely want to delete the task. - 1. Delete the task from the database and redirect the user back to the list of remaining tasks - -## Wave 3 -In this wave we will extend the interactivity with users, allowing them to edit existing tasks in a couple of different ways. As always, follow _RESTful_ conventions when implementing these features. - -- Add the ability for the user to mark a task complete - - Add a button to the list of tasks on the home page that, when clicked, will mark a task complete. - - Update the database with the task's completed date -- Add the ability for the user to edit a task's details. - - Add an `edit` action that renders a form allowing the user to update all the fields of a task. - - Submitting the form from the `edit` action should _update_ the existing task; not create a new one. - - Research: ActiveRecord's `update` method. - - Link to the `edit` action from the task's `show` page. - - DRY up your code by reusing the view code from the `new` functionality - - Hint: Rendering _partials_ in Rails. - -## Final Wave! -In this wave, we explore creating ActiveRecord associations by creating `belongs_to` and `has_many` relationships. - -- Create a model & migration for a new Person object. - - at a minimum, a Person should have a name -- Create seed data to add at least three Person records to the database. -- Each Task in your database can be assigned to a Person, indicating that Person is responsible for completing the Task. - - Express the relationship between Person and Task using `belongs_to` and `has_many` - - Update your Task `index` and `show` actions to include displaying the Person's name to which the Task belongs. - - Update your Task's `new` and `edit` actions to allow for selecting an _existing_ Person to which the Task should be associated. -- Add a new people (the plural of Person) controller with the following routes and actions - - `index` action: Show a list of all people in the database. - - Link each Person's name to their `show` action. - - The index should include a count of how many _uncompleted_ tasks are assigned to each Person. - - `show` action: show all of the Person's information -- Create a custom route and action for showing a complete list of a Person's tasks, both complete and incomplete. - - The url of this page should look something like `http://localhost:5000/people/1/tasks`. - - Link to this action from a Person's `show` view. -- Deploy your completed app to Heroku. diff --git a/TaskListRails/seeds.rb b/TaskListRails/seeds.rb deleted file mode 100644 index de6ef27a7..000000000 --- a/TaskListRails/seeds.rb +++ /dev/null @@ -1,20 +0,0 @@ -def random_time - Time.at(rand * Time.now.to_i) -end - -tasks = [ - { name: "The First Task", description: "", completed_at: random_time }, - { name: "Go to Brunch", description: "" }, - { name: "Go to Lunch", description: "", completed_at: random_time }, - { name: "Go to Second Lunch", description: "" }, - { name: "Play Video Games", description: "", completed_at: random_time }, - { name: "High Five Somebody You Don't Know", description: "", completed_at: random_time }, - { name: "Plant Flowers", description: "", completed_at: random_time }, - { name: "Call Mom", description: "" }, - { name: "She worries, you know.", description: "" }, - { name: "Nap.", description: "", completed_at: random_time } -] - -tasks.each do |task| - Task.create task -end diff --git a/tasklistapp/app/assets/images/.keep b/app/assets/images/.keep similarity index 100% rename from tasklistapp/app/assets/images/.keep rename to app/assets/images/.keep diff --git a/tasklistapp/app/assets/images/note.png b/app/assets/images/note.png similarity index 100% rename from tasklistapp/app/assets/images/note.png rename to app/assets/images/note.png diff --git a/tasklistapp/app/assets/images/note2.png b/app/assets/images/note2.png similarity index 100% rename from tasklistapp/app/assets/images/note2.png rename to app/assets/images/note2.png diff --git a/tasklistapp/app/assets/javascripts/application.js b/app/assets/javascripts/application.js similarity index 100% rename from tasklistapp/app/assets/javascripts/application.js rename to app/assets/javascripts/application.js diff --git a/tasklistapp/app/assets/javascripts/tasks.coffee b/app/assets/javascripts/tasks.coffee similarity index 100% rename from tasklistapp/app/assets/javascripts/tasks.coffee rename to app/assets/javascripts/tasks.coffee diff --git a/tasklistapp/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css similarity index 100% rename from tasklistapp/app/assets/stylesheets/application.css rename to app/assets/stylesheets/application.css diff --git a/tasklistapp/app/assets/stylesheets/tasks.scss b/app/assets/stylesheets/tasks.scss similarity index 100% rename from tasklistapp/app/assets/stylesheets/tasks.scss rename to app/assets/stylesheets/tasks.scss diff --git a/tasklistapp/app/controllers/application_controller.rb b/app/controllers/application_controller.rb similarity index 100% rename from tasklistapp/app/controllers/application_controller.rb rename to app/controllers/application_controller.rb diff --git a/tasklistapp/app/controllers/concerns/.keep b/app/controllers/concerns/.keep similarity index 100% rename from tasklistapp/app/controllers/concerns/.keep rename to app/controllers/concerns/.keep diff --git a/tasklistapp/app/controllers/tasks_controller.rb b/app/controllers/tasks_controller.rb similarity index 100% rename from tasklistapp/app/controllers/tasks_controller.rb rename to app/controllers/tasks_controller.rb diff --git a/tasklistapp/app/helpers/application_helper.rb b/app/helpers/application_helper.rb similarity index 100% rename from tasklistapp/app/helpers/application_helper.rb rename to app/helpers/application_helper.rb diff --git a/tasklistapp/app/helpers/tasks_helper.rb b/app/helpers/tasks_helper.rb similarity index 100% rename from tasklistapp/app/helpers/tasks_helper.rb rename to app/helpers/tasks_helper.rb diff --git a/tasklistapp/app/mailers/.keep b/app/mailers/.keep similarity index 100% rename from tasklistapp/app/mailers/.keep rename to app/mailers/.keep diff --git a/tasklistapp/app/models/.keep b/app/models/.keep similarity index 100% rename from tasklistapp/app/models/.keep rename to app/models/.keep diff --git a/tasklistapp/app/models/concerns/.keep b/app/models/concerns/.keep similarity index 100% rename from tasklistapp/app/models/concerns/.keep rename to app/models/concerns/.keep diff --git a/app/models/person.rb b/app/models/person.rb new file mode 100644 index 000000000..706ad3f5d --- /dev/null +++ b/app/models/person.rb @@ -0,0 +1,4 @@ +class Person < ActiveRecord::Base + has_many :tasks + +end diff --git a/tasklistapp/app/models/task.rb b/app/models/task.rb similarity index 60% rename from tasklistapp/app/models/task.rb rename to app/models/task.rb index 935f76e12..64ea68c91 100644 --- a/tasklistapp/app/models/task.rb +++ b/app/models/task.rb @@ -1,2 +1,4 @@ class Task < ActiveRecord::Base + # belongs_to :person + end diff --git a/tasklistapp/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb similarity index 100% rename from tasklistapp/app/views/layouts/application.html.erb rename to app/views/layouts/application.html.erb diff --git a/tasklistapp/app/views/tasks/completed.html.erb b/app/views/tasks/completed.html.erb similarity index 100% rename from tasklistapp/app/views/tasks/completed.html.erb rename to app/views/tasks/completed.html.erb diff --git a/tasklistapp/app/views/tasks/delete.html.erb b/app/views/tasks/delete.html.erb similarity index 100% rename from tasklistapp/app/views/tasks/delete.html.erb rename to app/views/tasks/delete.html.erb diff --git a/tasklistapp/app/views/tasks/edit.html.erb b/app/views/tasks/edit.html.erb similarity index 100% rename from tasklistapp/app/views/tasks/edit.html.erb rename to app/views/tasks/edit.html.erb diff --git a/tasklistapp/app/views/tasks/index.html.erb b/app/views/tasks/index.html.erb similarity index 100% rename from tasklistapp/app/views/tasks/index.html.erb rename to app/views/tasks/index.html.erb diff --git a/tasklistapp/app/views/tasks/new.html.erb b/app/views/tasks/new.html.erb similarity index 100% rename from tasklistapp/app/views/tasks/new.html.erb rename to app/views/tasks/new.html.erb diff --git a/tasklistapp/app/views/tasks/show.html.erb b/app/views/tasks/show.html.erb similarity index 100% rename from tasklistapp/app/views/tasks/show.html.erb rename to app/views/tasks/show.html.erb diff --git a/tasklistapp/bin/bundle b/bin/bundle similarity index 100% rename from tasklistapp/bin/bundle rename to bin/bundle diff --git a/tasklistapp/bin/rails b/bin/rails similarity index 100% rename from tasklistapp/bin/rails rename to bin/rails diff --git a/tasklistapp/bin/rake b/bin/rake similarity index 100% rename from tasklistapp/bin/rake rename to bin/rake diff --git a/tasklistapp/bin/setup b/bin/setup similarity index 100% rename from tasklistapp/bin/setup rename to bin/setup diff --git a/tasklistapp/bin/spring b/bin/spring similarity index 100% rename from tasklistapp/bin/spring rename to bin/spring diff --git a/tasklistapp/config.ru b/config.ru similarity index 100% rename from tasklistapp/config.ru rename to config.ru diff --git a/tasklistapp/config/application.rb b/config/application.rb similarity index 100% rename from tasklistapp/config/application.rb rename to config/application.rb diff --git a/tasklistapp/config/boot.rb b/config/boot.rb similarity index 100% rename from tasklistapp/config/boot.rb rename to config/boot.rb diff --git a/tasklistapp/config/database.yml b/config/database.yml similarity index 100% rename from tasklistapp/config/database.yml rename to config/database.yml diff --git a/tasklistapp/config/environment.rb b/config/environment.rb similarity index 100% rename from tasklistapp/config/environment.rb rename to config/environment.rb diff --git a/tasklistapp/config/environments/development.rb b/config/environments/development.rb similarity index 100% rename from tasklistapp/config/environments/development.rb rename to config/environments/development.rb diff --git a/tasklistapp/config/environments/production.rb b/config/environments/production.rb similarity index 100% rename from tasklistapp/config/environments/production.rb rename to config/environments/production.rb diff --git a/tasklistapp/config/environments/test.rb b/config/environments/test.rb similarity index 100% rename from tasklistapp/config/environments/test.rb rename to config/environments/test.rb diff --git a/tasklistapp/config/initializers/assets.rb b/config/initializers/assets.rb similarity index 100% rename from tasklistapp/config/initializers/assets.rb rename to config/initializers/assets.rb diff --git a/tasklistapp/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb similarity index 100% rename from tasklistapp/config/initializers/backtrace_silencers.rb rename to config/initializers/backtrace_silencers.rb diff --git a/tasklistapp/config/initializers/cookies_serializer.rb b/config/initializers/cookies_serializer.rb similarity index 100% rename from tasklistapp/config/initializers/cookies_serializer.rb rename to config/initializers/cookies_serializer.rb diff --git a/tasklistapp/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb similarity index 100% rename from tasklistapp/config/initializers/filter_parameter_logging.rb rename to config/initializers/filter_parameter_logging.rb diff --git a/tasklistapp/config/initializers/inflections.rb b/config/initializers/inflections.rb similarity index 100% rename from tasklistapp/config/initializers/inflections.rb rename to config/initializers/inflections.rb diff --git a/tasklistapp/config/initializers/mime_types.rb b/config/initializers/mime_types.rb similarity index 100% rename from tasklistapp/config/initializers/mime_types.rb rename to config/initializers/mime_types.rb diff --git a/tasklistapp/config/initializers/session_store.rb b/config/initializers/session_store.rb similarity index 100% rename from tasklistapp/config/initializers/session_store.rb rename to config/initializers/session_store.rb diff --git a/tasklistapp/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb similarity index 100% rename from tasklistapp/config/initializers/wrap_parameters.rb rename to config/initializers/wrap_parameters.rb diff --git a/tasklistapp/config/locales/en.yml b/config/locales/en.yml similarity index 100% rename from tasklistapp/config/locales/en.yml rename to config/locales/en.yml diff --git a/tasklistapp/config/routes.rb b/config/routes.rb similarity index 100% rename from tasklistapp/config/routes.rb rename to config/routes.rb diff --git a/tasklistapp/config/secrets.yml b/config/secrets.yml similarity index 100% rename from tasklistapp/config/secrets.yml rename to config/secrets.yml diff --git a/tasklistapp/db/migrate/20160419204103_create_tasks.rb b/db/migrate/20160419204103_create_tasks.rb similarity index 100% rename from tasklistapp/db/migrate/20160419204103_create_tasks.rb rename to db/migrate/20160419204103_create_tasks.rb diff --git a/db/migrate/20160425192841_create_people.rb b/db/migrate/20160425192841_create_people.rb new file mode 100644 index 000000000..38499738b --- /dev/null +++ b/db/migrate/20160425192841_create_people.rb @@ -0,0 +1,8 @@ +class CreatePeople < ActiveRecord::Migration + def change + create_table :people do |t| + + t.timestamps null: false + end + end +end diff --git a/tasklistapp/db/schema.rb b/db/schema.rb similarity index 100% rename from tasklistapp/db/schema.rb rename to db/schema.rb diff --git a/tasklistapp/db/seeds.rb b/db/seeds.rb similarity index 100% rename from tasklistapp/db/seeds.rb rename to db/seeds.rb diff --git a/tasklistapp/lib/assets/.keep b/lib/assets/.keep similarity index 100% rename from tasklistapp/lib/assets/.keep rename to lib/assets/.keep diff --git a/tasklistapp/lib/tasks/.keep b/lib/tasks/.keep similarity index 100% rename from tasklistapp/lib/tasks/.keep rename to lib/tasks/.keep diff --git a/tasklistapp/log/.keep b/log/.keep similarity index 100% rename from tasklistapp/log/.keep rename to log/.keep diff --git a/tasklistapp/public/404.html b/public/404.html similarity index 100% rename from tasklistapp/public/404.html rename to public/404.html diff --git a/tasklistapp/public/422.html b/public/422.html similarity index 100% rename from tasklistapp/public/422.html rename to public/422.html diff --git a/tasklistapp/public/500.html b/public/500.html similarity index 100% rename from tasklistapp/public/500.html rename to public/500.html diff --git a/tasklistapp/public/favicon.ico b/public/favicon.ico similarity index 100% rename from tasklistapp/public/favicon.ico rename to public/favicon.ico diff --git a/tasklistapp/public/robots.txt b/public/robots.txt similarity index 100% rename from tasklistapp/public/robots.txt rename to public/robots.txt diff --git a/seeds.rb b/seeds.rb deleted file mode 100644 index de6ef27a7..000000000 --- a/seeds.rb +++ /dev/null @@ -1,20 +0,0 @@ -def random_time - Time.at(rand * Time.now.to_i) -end - -tasks = [ - { name: "The First Task", description: "", completed_at: random_time }, - { name: "Go to Brunch", description: "" }, - { name: "Go to Lunch", description: "", completed_at: random_time }, - { name: "Go to Second Lunch", description: "" }, - { name: "Play Video Games", description: "", completed_at: random_time }, - { name: "High Five Somebody You Don't Know", description: "", completed_at: random_time }, - { name: "Plant Flowers", description: "", completed_at: random_time }, - { name: "Call Mom", description: "" }, - { name: "She worries, you know.", description: "" }, - { name: "Nap.", description: "", completed_at: random_time } -] - -tasks.each do |task| - Task.create task -end diff --git a/tasklistapp/.gitignore b/tasklistapp/.gitignore deleted file mode 100644 index 050c9d95c..000000000 --- a/tasklistapp/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -# See https://help.github.com/articles/ignoring-files for more about ignoring files. -# -# If you find yourself ignoring temporary files generated by your text editor -# or operating system, you probably want to add a global ignore instead: -# git config --global core.excludesfile '~/.gitignore_global' - -# Ignore bundler config. -/.bundle - -# Ignore the default SQLite database. -/db/*.sqlite3 -/db/*.sqlite3-journal - -# Ignore all logfiles and tempfiles. -/log/* -!/log/.keep -/tmp diff --git a/tasklistapp/test/controllers/.keep b/test/controllers/.keep similarity index 100% rename from tasklistapp/test/controllers/.keep rename to test/controllers/.keep diff --git a/tasklistapp/test/controllers/tasks_controller_test.rb b/test/controllers/tasks_controller_test.rb similarity index 100% rename from tasklistapp/test/controllers/tasks_controller_test.rb rename to test/controllers/tasks_controller_test.rb diff --git a/tasklistapp/test/fixtures/.keep b/test/fixtures/.keep similarity index 100% rename from tasklistapp/test/fixtures/.keep rename to test/fixtures/.keep diff --git a/test/fixtures/people.yml b/test/fixtures/people.yml new file mode 100644 index 000000000..937a0c002 --- /dev/null +++ b/test/fixtures/people.yml @@ -0,0 +1,11 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +# This model initially had no columns defined. If you add columns to the +# model remove the '{}' from the fixture names and add the columns immediately +# below each fixture, per the syntax in the comments below +# +one: {} +# column: value +# +two: {} +# column: value diff --git a/tasklistapp/test/fixtures/tasks.yml b/test/fixtures/tasks.yml similarity index 100% rename from tasklistapp/test/fixtures/tasks.yml rename to test/fixtures/tasks.yml diff --git a/tasklistapp/test/helpers/.keep b/test/helpers/.keep similarity index 100% rename from tasklistapp/test/helpers/.keep rename to test/helpers/.keep diff --git a/tasklistapp/test/integration/.keep b/test/integration/.keep similarity index 100% rename from tasklistapp/test/integration/.keep rename to test/integration/.keep diff --git a/tasklistapp/test/mailers/.keep b/test/mailers/.keep similarity index 100% rename from tasklistapp/test/mailers/.keep rename to test/mailers/.keep diff --git a/tasklistapp/test/models/.keep b/test/models/.keep similarity index 100% rename from tasklistapp/test/models/.keep rename to test/models/.keep diff --git a/test/models/person_test.rb b/test/models/person_test.rb new file mode 100644 index 000000000..ad04ed813 --- /dev/null +++ b/test/models/person_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class PersonTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/tasklistapp/test/models/task_test.rb b/test/models/task_test.rb similarity index 100% rename from tasklistapp/test/models/task_test.rb rename to test/models/task_test.rb diff --git a/tasklistapp/test/test_helper.rb b/test/test_helper.rb similarity index 100% rename from tasklistapp/test/test_helper.rb rename to test/test_helper.rb diff --git a/tasklistapp/vendor/assets/javascripts/.keep b/vendor/assets/javascripts/.keep similarity index 100% rename from tasklistapp/vendor/assets/javascripts/.keep rename to vendor/assets/javascripts/.keep diff --git a/tasklistapp/vendor/assets/stylesheets/.keep b/vendor/assets/stylesheets/.keep similarity index 100% rename from tasklistapp/vendor/assets/stylesheets/.keep rename to vendor/assets/stylesheets/.keep From 1dd5362a0677860f9f06a8e84db8c2dcba3d156e Mon Sep 17 00:00:00 2001 From: melissajimison Date: Mon, 25 Apr 2016 15:07:09 -0700 Subject: [PATCH 11/32] migrated error corrected --- app/models/person.rb | 4 ---- db/schema.rb | 7 ++++++- 2 files changed, 6 insertions(+), 5 deletions(-) delete mode 100644 app/models/person.rb diff --git a/app/models/person.rb b/app/models/person.rb deleted file mode 100644 index 706ad3f5d..000000000 --- a/app/models/person.rb +++ /dev/null @@ -1,4 +0,0 @@ -class Person < ActiveRecord::Base - has_many :tasks - -end diff --git a/db/schema.rb b/db/schema.rb index 22de19fef..fc6faf6cf 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,12 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160419204103) do +ActiveRecord::Schema.define(version: 20160425192841) do + + create_table "people", force: :cascade do |t| + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end create_table "tasks", force: :cascade do |t| t.string "name", null: false From 58fbcbf8bcb1d3f19b71b94ec150bf2e5f23a116 Mon Sep 17 00:00:00 2001 From: melissajimison Date: Mon, 25 Apr 2016 15:38:48 -0700 Subject: [PATCH 12/32] vendor compiled assets --- ...fest-cd10e785d2be0c5563b65282ad4b704f.json | 1 + ...e86c3452c63337e89d8d7c0a49bbf6845f6343.css | 1 + ...c3452c63337e89d8d7c0a49bbf6845f6343.css.gz | Bin 0 -> 851 bytes ...93e0d86e3f1908fa66e11169e89ec2d37658ebc.js | 27 + ...0d86e3f1908fa66e11169e89ec2d37658ebc.js.gz | Bin 0 -> 40629 bytes ...4b9cc875a2ec617a557e849b813918eb733499.ttf | Bin 0 -> 142072 bytes ...cc875a2ec617a557e849b813918eb733499.ttf.gz | Bin 0 -> 83567 bytes ...9ce598a2a5babb7afc55477d59215c4a38a40.woff | Bin 0 -> 83588 bytes ...8f7ce6b130eaaaaa2ce4d496b18d0a33aeb87b.svg | 655 ++++++++++++++++++ ...ce6b130eaaaaa2ce4d496b18d0a33aeb87b.svg.gz | Bin 0 -> 109309 bytes ...a7c7b5057ea68a109937fc26b03c6e99ee9322.eot | Bin 0 -> 70807 bytes ...7b5057ea68a109937fc26b03c6e99ee9322.eot.gz | Bin 0 -> 70788 bytes ...3d2e682eb78c89117a438ce6cfea8c498995.woff2 | Bin 0 -> 66624 bytes ...d8c9777778ce25362439caf990a523258b8910.png | Bin 0 -> 110718 bytes ...2f1b268db0e36235f06e3e6fbd4323df1f800d.png | Bin 0 -> 79881 bytes 15 files changed, 684 insertions(+) create mode 100644 public/assets/.sprockets-manifest-cd10e785d2be0c5563b65282ad4b704f.json create mode 100644 public/assets/application-190e815311b14d69bb19c38721e86c3452c63337e89d8d7c0a49bbf6845f6343.css create mode 100644 public/assets/application-190e815311b14d69bb19c38721e86c3452c63337e89d8d7c0a49bbf6845f6343.css.gz create mode 100644 public/assets/application-b0426e496058d3d784915d30693e0d86e3f1908fa66e11169e89ec2d37658ebc.js create mode 100644 public/assets/application-b0426e496058d3d784915d30693e0d86e3f1908fa66e11169e89ec2d37658ebc.js.gz create mode 100644 public/assets/font-awesome/fontawesome-webfont-7b5a4320fba0d4c8f79327645b4b9cc875a2ec617a557e849b813918eb733499.ttf create mode 100644 public/assets/font-awesome/fontawesome-webfont-7b5a4320fba0d4c8f79327645b4b9cc875a2ec617a557e849b813918eb733499.ttf.gz create mode 100644 public/assets/font-awesome/fontawesome-webfont-c812ddc9e475d3e65d68a6b3b589ce598a2a5babb7afc55477d59215c4a38a40.woff create mode 100644 public/assets/font-awesome/fontawesome-webfont-d67041fe5d50eef9ef671643968f7ce6b130eaaaaa2ce4d496b18d0a33aeb87b.svg create mode 100644 public/assets/font-awesome/fontawesome-webfont-d67041fe5d50eef9ef671643968f7ce6b130eaaaaa2ce4d496b18d0a33aeb87b.svg.gz create mode 100644 public/assets/font-awesome/fontawesome-webfont-e219ece8f4d3e4ac455ef31cd3a7c7b5057ea68a109937fc26b03c6e99ee9322.eot create mode 100644 public/assets/font-awesome/fontawesome-webfont-e219ece8f4d3e4ac455ef31cd3a7c7b5057ea68a109937fc26b03c6e99ee9322.eot.gz create mode 100644 public/assets/font-awesome/fontawesome-webfont-ff82aeed6b9bb6701696c84d1b223d2e682eb78c89117a438ce6cfea8c498995.woff2 create mode 100644 public/assets/note-d60e7812f97c8797b4a3cd9bc6d8c9777778ce25362439caf990a523258b8910.png create mode 100644 public/assets/note2-08b458e9f505795126c94822c52f1b268db0e36235f06e3e6fbd4323df1f800d.png diff --git a/public/assets/.sprockets-manifest-cd10e785d2be0c5563b65282ad4b704f.json b/public/assets/.sprockets-manifest-cd10e785d2be0c5563b65282ad4b704f.json new file mode 100644 index 000000000..944f28aaa --- /dev/null +++ b/public/assets/.sprockets-manifest-cd10e785d2be0c5563b65282ad4b704f.json @@ -0,0 +1 @@ +{"files":{"note-d60e7812f97c8797b4a3cd9bc6d8c9777778ce25362439caf990a523258b8910.png":{"logical_path":"note.png","mtime":"2016-04-21T13:41:36-07:00","size":110718,"digest":"d60e7812f97c8797b4a3cd9bc6d8c9777778ce25362439caf990a523258b8910","integrity":"sha256-1g54Evl8h5e0o82bxtjJd3d4ziU2JDnK+ZClIyWLiRA="},"note2-08b458e9f505795126c94822c52f1b268db0e36235f06e3e6fbd4323df1f800d.png":{"logical_path":"note2.png","mtime":"2016-04-24T17:42:05-07:00","size":79881,"digest":"08b458e9f505795126c94822c52f1b268db0e36235f06e3e6fbd4323df1f800d","integrity":"sha256-CLRY6fUFeVEmyUgixS8bJo2w42I18G4+b71DI98fgA0="},"application-b0426e496058d3d784915d30693e0d86e3f1908fa66e11169e89ec2d37658ebc.js":{"logical_path":"application.js","mtime":"2016-04-24T17:45:31-07:00","size":120143,"digest":"b0426e496058d3d784915d30693e0d86e3f1908fa66e11169e89ec2d37658ebc","integrity":"sha256-sEJuSWBY09eEkV0waT4NhuPxkI+mbhEWnonsLTdljrw="},"application-190e815311b14d69bb19c38721e86c3452c63337e89d8d7c0a49bbf6845f6343.css":{"logical_path":"application.css","mtime":"2016-04-25T15:36:49-07:00","size":2261,"digest":"190e815311b14d69bb19c38721e86c3452c63337e89d8d7c0a49bbf6845f6343","integrity":"sha256-GQ6BUxGxTWm7GcOHIehsNFLGMzfonY18Ckm79oRfY0M="},"font-awesome/fontawesome-webfont-e219ece8f4d3e4ac455ef31cd3a7c7b5057ea68a109937fc26b03c6e99ee9322.eot":{"logical_path":"font-awesome/fontawesome-webfont.eot","mtime":"2016-04-21T21:08:46-07:00","size":70807,"digest":"e219ece8f4d3e4ac455ef31cd3a7c7b5057ea68a109937fc26b03c6e99ee9322","integrity":"sha256-4hns6PTT5KxFXvMc06fHtQV+pooQmTf8JrA8bpnukyI="},"font-awesome/fontawesome-webfont-d67041fe5d50eef9ef671643968f7ce6b130eaaaaa2ce4d496b18d0a33aeb87b.svg":{"logical_path":"font-awesome/fontawesome-webfont.svg","mtime":"2016-04-21T21:08:46-07:00","size":365616,"digest":"d67041fe5d50eef9ef671643968f7ce6b130eaaaaa2ce4d496b18d0a33aeb87b","integrity":"sha256-1nBB/l1Q7vnvZxZDlo985rEw6qqqLOTUlrGNCjOuuHs="},"font-awesome/fontawesome-webfont-7b5a4320fba0d4c8f79327645b4b9cc875a2ec617a557e849b813918eb733499.ttf":{"logical_path":"font-awesome/fontawesome-webfont.ttf","mtime":"2016-04-21T21:08:46-07:00","size":142072,"digest":"7b5a4320fba0d4c8f79327645b4b9cc875a2ec617a557e849b813918eb733499","integrity":"sha256-e1pDIPug1Mj3kydkW0ucyHWi7GF6VX6Em4E5GOtzNJk="},"font-awesome/fontawesome-webfont-c812ddc9e475d3e65d68a6b3b589ce598a2a5babb7afc55477d59215c4a38a40.woff":{"logical_path":"font-awesome/fontawesome-webfont.woff","mtime":"2016-04-21T21:08:46-07:00","size":83588,"digest":"c812ddc9e475d3e65d68a6b3b589ce598a2a5babb7afc55477d59215c4a38a40","integrity":"sha256-yBLdyeR10+ZdaKaztYnOWYoqW6u3r8VUd9WSFcSjikA="},"font-awesome/fontawesome-webfont-ff82aeed6b9bb6701696c84d1b223d2e682eb78c89117a438ce6cfea8c498995.woff2":{"logical_path":"font-awesome/fontawesome-webfont.woff2","mtime":"2016-04-21T21:08:46-07:00","size":66624,"digest":"ff82aeed6b9bb6701696c84d1b223d2e682eb78c89117a438ce6cfea8c498995","integrity":"sha256-/4Ku7WubtnAWlshNGyI9Lmgut4yJEXpDjObP6oxJiZU="}},"assets":{"note.png":"note-d60e7812f97c8797b4a3cd9bc6d8c9777778ce25362439caf990a523258b8910.png","note2.png":"note2-08b458e9f505795126c94822c52f1b268db0e36235f06e3e6fbd4323df1f800d.png","application.js":"application-b0426e496058d3d784915d30693e0d86e3f1908fa66e11169e89ec2d37658ebc.js","application.css":"application-190e815311b14d69bb19c38721e86c3452c63337e89d8d7c0a49bbf6845f6343.css","font-awesome/fontawesome-webfont.eot":"font-awesome/fontawesome-webfont-e219ece8f4d3e4ac455ef31cd3a7c7b5057ea68a109937fc26b03c6e99ee9322.eot","font-awesome/fontawesome-webfont.svg":"font-awesome/fontawesome-webfont-d67041fe5d50eef9ef671643968f7ce6b130eaaaaa2ce4d496b18d0a33aeb87b.svg","font-awesome/fontawesome-webfont.ttf":"font-awesome/fontawesome-webfont-7b5a4320fba0d4c8f79327645b4b9cc875a2ec617a557e849b813918eb733499.ttf","font-awesome/fontawesome-webfont.woff":"font-awesome/fontawesome-webfont-c812ddc9e475d3e65d68a6b3b589ce598a2a5babb7afc55477d59215c4a38a40.woff","font-awesome/fontawesome-webfont.woff2":"font-awesome/fontawesome-webfont-ff82aeed6b9bb6701696c84d1b223d2e682eb78c89117a438ce6cfea8c498995.woff2"}} \ No newline at end of file diff --git a/public/assets/application-190e815311b14d69bb19c38721e86c3452c63337e89d8d7c0a49bbf6845f6343.css b/public/assets/application-190e815311b14d69bb19c38721e86c3452c63337e89d8d7c0a49bbf6845f6343.css new file mode 100644 index 000000000..11ef2d360 --- /dev/null +++ b/public/assets/application-190e815311b14d69bb19c38721e86c3452c63337e89d8d7c0a49bbf6845f6343.css @@ -0,0 +1 @@ +.task-item-azul{background:url(/assets/note2-08b458e9f505795126c94822c52f1b268db0e36235f06e3e6fbd4323df1f800d.png)}.task-item{background:url(/assets/note-d60e7812f97c8797b4a3cd9bc6d8c9777778ce25362439caf990a523258b8910.png)}html{background-attachment:fixed;background-position:center;background-size:cover;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;font-family:'Oswald', sans-serif}h1{font-weight:400;text-align:center;margin-top:15px}.main-form label{margin:0;margin-right:10px;padding:0}.both-forms{margin:0;margin-top:20px;overflow:auto;padding:0;margin-bottom:10px}.check-form,.check-deleted{color:#262127;font-size:14px;margin:0;padding:0}.check-form{float:left}.check-deleted{float:right}.top-bar{color:#D76B88;font-family:'Oswald', sans-serif;font-size:16px;margin-top:60px;margin-bottom:40px;text-align:center;width:100%}.top-bar ul{list-style:none}.top-bar ul li{display:inline}.top-bar a{color:#D76B88;font-size:32px;padding-top:10px;padding-right:30px;padding-left:30px;padding-bottom:5px;text-decoration:none}.task-container{background-color:rgba(244,244,244,0.7);border-radius:15px;color:#4D434F;display:-webkit-flex;display:flex;flex-wrap:wrap;margin-top:1%;margin-right:10%;margin-left:auto;margin-bottom:1%;overflow:auto;width:80%;border:solid red}.task-item{display:inline-block;font-size:24px;font-weight:300;margin:.8rem;text-align:left;width:28%;height:340px;border:solid green;overflow:auto}.task-item-azul{display:inline-block;font-size:24px;font-weight:300;margin:.8rem;text-align:left;width:28%;height:300px;border:solid green}.text{height:115px;border:solid blue;width:75%;margin:2rem;margin-top:6rem}.task-description{padding:6rem;line-height:2.2rem;border:solid black}.buttons{display:flex;border:solid red;position:relative;margin-bottom:0}.submit-button{color:white;margin-top:5px;padding:10px}input[type=submit]{background-color:#0668a5;border-radius:5px;color:white;cursor:pointer;display:inline-block;font-family:'Oswald', sans-serif;font-size:16px;margin-top:5px;margin-left:10px;padding:5px 15px 5px 15px}input[type=text]{border-radius:5px;color:#3F1A08;cursor:pointer;display:inline-block;font-family:'Oswald', sans-serif;font-size:16px;margin-top:5px;margin-left:10px;padding:5px 15px} diff --git a/public/assets/application-190e815311b14d69bb19c38721e86c3452c63337e89d8d7c0a49bbf6845f6343.css.gz b/public/assets/application-190e815311b14d69bb19c38721e86c3452c63337e89d8d7c0a49bbf6845f6343.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..276d458fe9557c1b568a590d4cc838bd770f0542 GIT binary patch literal 851 zcmV-Z1FZZXiwFP#oE}#K1I<)TkJ~m7z4uobSS*qND~F=KCFGDI$hAM9=z$_fHepH> zNGkTO;QwBVl5E-=r$7%y4cIU_!B*ZB#;v8d|;3lkbnzI@~l;S99Pzn*GP0iv6N302(93i&t zyWOYr_LA~f*#ed#$np?3MMm?i$m*Cxlod5iSx$>=`s5UFV)MmOK}k~-h$J||NnYng zh~{K_)A~gP#27;NEp(=A_z76$*?OtD;j$~KHG}d^n!iCwr6=$m`?P&xSCvb&=0ox(9l20biE?3pQIWo!er_cGd@tk6g)7i0^G=V?cfy@1%I(V;YN@5*Y@>kr zJL;B_pcaxIy#C`!t^RaIXdQ%dn=5F2ZA{RXv^amR_R9+=p&JZ41<>8X^)St=`ab}M zeh$n+u}{avD|FP}c-3NnC0v%Q#FThS>JO7WFI6$nRPlb&+_+BsWUgFkOCr2=5$-Zs zG1{#)Sc*G6-l*rE)#|d~6$q>EA8@A-yJPfFx6^WW@s^=G?rqb3;EA^~-In8BKbSww zYY$)M0Drw7k|&g=IZ5uu;yM*`7CI0&&t-1 in e}function r(e,t,n){if(pe.isFunction(t))return pe.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return pe.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(Ee.test(t))return pe.filter(t,e,n);t=pe.filter(t,e)}return pe.grep(e,function(e){return pe.inArray(e,t)>-1!==n})}function i(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function o(e){var t={};return pe.each(e.match(Ae)||[],function(e,n){t[n]=!0}),t}function a(){re.addEventListener?(re.removeEventListener("DOMContentLoaded",s),e.removeEventListener("load",s)):(re.detachEvent("onreadystatechange",s),e.detachEvent("onload",s))}function s(){(re.addEventListener||"load"===e.event.type||"complete"===re.readyState)&&(a(),pe.ready())}function u(e,t,n){if(void 0===n&&1===e.nodeType){var r="data-"+t.replace(qe,"-$1").toLowerCase();if(n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:_e.test(n)?pe.parseJSON(n):n}catch(i){}pe.data(e,t,n)}else n=void 0}return n}function l(e){var t;for(t in e)if(("data"!==t||!pe.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function c(e,t,n,r){if(He(e)){var i,o,a=pe.expando,s=e.nodeType,u=s?pe.cache:e,l=s?e[a]:e[a]&&a;if(l&&u[l]&&(r||u[l].data)||void 0!==n||"string"!=typeof t)return l||(l=s?e[a]=ne.pop()||pe.guid++:a),u[l]||(u[l]=s?{}:{toJSON:pe.noop}),"object"!=typeof t&&"function"!=typeof t||(r?u[l]=pe.extend(u[l],t):u[l].data=pe.extend(u[l].data,t)),o=u[l],r||(o.data||(o.data={}),o=o.data),void 0!==n&&(o[pe.camelCase(t)]=n),"string"==typeof t?(i=o[t],null==i&&(i=o[pe.camelCase(t)])):i=o,i}}function d(e,t,n){if(He(e)){var r,i,o=e.nodeType,a=o?pe.cache:e,s=o?e[pe.expando]:pe.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){pe.isArray(t)?t=t.concat(pe.map(t,pe.camelCase)):t in r?t=[t]:(t=pe.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;for(;i--;)delete r[t[i]];if(n?!l(r):!pe.isEmptyObject(r))return}(n||(delete a[s].data,l(a[s])))&&(o?pe.cleanData([e],!0):de.deleteExpando||a!=a.window?delete a[s]:a[s]=void 0)}}}function f(e,t,n,r){var i,o=1,a=20,s=r?function(){return r.cur()}:function(){return pe.css(e,t,"")},u=s(),l=n&&n[3]||(pe.cssNumber[t]?"":"px"),c=(pe.cssNumber[t]||"px"!==l&&+u)&&Re.exec(pe.css(e,t));if(c&&c[3]!==l){l=l||c[3],n=n||[],c=+u||1;do o=o||".5",c/=o,pe.style(e,t,c+l);while(o!==(o=s()/u)&&1!==o&&--a)}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}function p(e){var t=ze.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function h(e,t){var n,r,i=0,o="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):void 0;if(!o)for(o=[],n=e.childNodes||e;null!=(r=n[i]);i++)!t||pe.nodeName(r,t)?o.push(r):pe.merge(o,h(r,t));return void 0===t||t&&pe.nodeName(e,t)?pe.merge([e],o):o}function m(e,t){for(var n,r=0;null!=(n=e[r]);r++)pe._data(n,"globalEval",!t||pe._data(t[r],"globalEval"))}function g(e){Ie.test(e.type)&&(e.defaultChecked=e.checked)}function v(e,t,n,r,i){for(var o,a,s,u,l,c,d,f=e.length,v=p(t),y=[],b=0;f>b;b++)if(a=e[b],a||0===a)if("object"===pe.type(a))pe.merge(y,a.nodeType?[a]:a);else if(Ue.test(a)){for(u=u||v.appendChild(t.createElement("div")),l=(Be.exec(a)||["",""])[1].toLowerCase(),d=Xe[l]||Xe._default,u.innerHTML=d[1]+pe.htmlPrefilter(a)+d[2],o=d[0];o--;)u=u.lastChild;if(!de.leadingWhitespace&&$e.test(a)&&y.push(t.createTextNode($e.exec(a)[0])),!de.tbody)for(a="table"!==l||Ge.test(a)?""!==d[1]||Ge.test(a)?0:u:u.firstChild,o=a&&a.childNodes.length;o--;)pe.nodeName(c=a.childNodes[o],"tbody")&&!c.childNodes.length&&a.removeChild(c);for(pe.merge(y,u.childNodes),u.textContent="";u.firstChild;)u.removeChild(u.firstChild);u=v.lastChild}else y.push(t.createTextNode(a));for(u&&v.removeChild(u),de.appendChecked||pe.grep(h(y,"input"),g),b=0;a=y[b++];)if(r&&pe.inArray(a,r)>-1)i&&i.push(a);else if(s=pe.contains(a.ownerDocument,a),u=h(v.appendChild(a),"script"),s&&m(u),n)for(o=0;a=u[o++];)We.test(a.type||"")&&n.push(a);return u=null,v}function y(){return!0}function b(){return!1}function x(){try{return re.activeElement}catch(e){}}function w(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)w(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=b;else if(!i)return e;return 1===o&&(a=i,i=function(e){return pe().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=pe.guid++)),e.each(function(){pe.event.add(this,t,i,r,n)})}function T(e,t){return pe.nodeName(e,"table")&&pe.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function E(e){return e.type=(null!==pe.find.attr(e,"type"))+"/"+e.type,e}function C(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function k(e,t){if(1===t.nodeType&&pe.hasData(e)){var n,r,i,o=pe._data(e),a=pe._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)pe.event.add(t,n,s[n][r])}a.data&&(a.data=pe.extend({},a.data))}}function S(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!de.noCloneEvent&&t[pe.expando]){i=pe._data(t);for(r in i.events)pe.removeEvent(t,r,i.handle);t.removeAttribute(pe.expando)}"script"===n&&t.text!==e.text?(E(t).text=e.text,C(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),de.html5Clone&&e.innerHTML&&!pe.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ie.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}}function N(e,t,n,r){t=oe.apply([],t);var i,o,a,s,u,l,c=0,d=e.length,f=d-1,p=t[0],m=pe.isFunction(p);if(m||d>1&&"string"==typeof p&&!de.checkClone&&rt.test(p))return e.each(function(i){var o=e.eq(i);m&&(t[0]=p.call(this,i,o.html())),N(o,t,n,r)});if(d&&(l=v(t,e[0].ownerDocument,!1,e,r),i=l.firstChild,1===l.childNodes.length&&(l=i),i||r)){for(s=pe.map(h(l,"script"),E),a=s.length;d>c;c++)o=l,c!==f&&(o=pe.clone(o,!0,!0),a&&pe.merge(s,h(o,"script"))),n.call(e[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,pe.map(s,C),c=0;a>c;c++)o=s[c],We.test(o.type||"")&&!pe._data(o,"globalEval")&&pe.contains(u,o)&&(o.src?pe._evalUrl&&pe._evalUrl(o.src):pe.globalEval((o.text||o.textContent||o.innerHTML||"").replace(ot,"")));l=i=null}return e}function j(e,t,n){for(var r,i=t?pe.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||pe.cleanData(h(r)),r.parentNode&&(n&&pe.contains(r.ownerDocument,r)&&m(h(r,"script")),r.parentNode.removeChild(r));return e}function A(e,t){var n=pe(t.createElement(e)).appendTo(t.body),r=pe.css(n[0],"display");return n.detach(),r}function D(e){var t=re,n=lt[e];return n||(n=A(e,t),"none"!==n&&n||(ut=(ut||pe("