-
Notifications
You must be signed in to change notification settings - Fork 17
MVP [mostly] #20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
MVP [mostly] #20
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| ### v0.1.0 | ||
| * Integrate rspec | ||
| * Add rake db:reset task | ||
| * Upgrade rake to 10.1.0 | ||
| * Upgrade sinatra to 1.4.3 | ||
| * Upgrade sinatra-contrib to 1.4.1 | ||
|
|
||
| ### v.0.1.1 | ||
| * Implement a basic class and spec to exercise it | ||
| * Relocate misplaced comma set | ||
| * Convert models/README to Markdown | ||
| * Correct misusue of e.g. | ||
| * Convert helpers/README to Markdown | ||
| * Implement a "em" helper for reference; improve README |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| source 'https://rubygems.org' | ||
| ruby '2.0.0' | ||
|
|
||
| # PostgreSQL driver | ||
| gem 'pg' | ||
|
|
||
| # Sinatra driver | ||
| gem 'sinatra' | ||
| gem 'sinatra-contrib' | ||
|
|
||
| gem 'activesupport', '~>4.1' | ||
| gem 'activerecord', '~>4.1' | ||
|
|
||
| gem 'rake' | ||
|
|
||
| gem 'shotgun' | ||
|
|
||
| gem 'bcrypt' | ||
|
|
||
| group :test do | ||
| gem 'shoulda-matchers' | ||
| gem 'rack-test' | ||
| gem 'rspec' | ||
| gem 'capybara' | ||
| end | ||
|
|
||
| group :test, :development do | ||
| gem 'factory_girl' | ||
| gem 'faker' | ||
| end |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,94 @@ | ||
| GEM | ||
| remote: https://rubygems.org/ | ||
| specs: | ||
| activemodel (4.1.1) | ||
| activesupport (= 4.1.1) | ||
| builder (~> 3.1) | ||
| activerecord (4.1.1) | ||
| activemodel (= 4.1.1) | ||
| activesupport (= 4.1.1) | ||
| arel (~> 5.0.0) | ||
| activesupport (4.1.1) | ||
| i18n (~> 0.6, >= 0.6.9) | ||
| json (~> 1.7, >= 1.7.7) | ||
| minitest (~> 5.1) | ||
| thread_safe (~> 0.1) | ||
| tzinfo (~> 1.1) | ||
| arel (5.0.1.20140414130214) | ||
| backports (3.6.0) | ||
| bcrypt (3.1.7) | ||
| builder (3.2.2) | ||
| capybara (2.2.1) | ||
| mime-types (>= 1.16) | ||
| nokogiri (>= 1.3.3) | ||
| rack (>= 1.0.0) | ||
| rack-test (>= 0.5.4) | ||
| xpath (~> 2.0) | ||
| diff-lcs (1.2.5) | ||
| factory_girl (4.4.0) | ||
| activesupport (>= 3.0.0) | ||
| faker (1.3.0) | ||
| i18n (~> 0.5) | ||
| i18n (0.6.9) | ||
| json (1.8.1) | ||
| mime-types (2.3) | ||
| mini_portile (0.6.0) | ||
| minitest (5.3.4) | ||
| multi_json (1.10.1) | ||
| nokogiri (1.6.2.1) | ||
| mini_portile (= 0.6.0) | ||
| pg (0.17.1) | ||
| rack (1.5.2) | ||
| rack-protection (1.5.3) | ||
| rack | ||
| rack-test (0.6.2) | ||
| rack (>= 1.0) | ||
| rake (10.3.2) | ||
| rspec (2.14.1) | ||
| rspec-core (~> 2.14.0) | ||
| rspec-expectations (~> 2.14.0) | ||
| rspec-mocks (~> 2.14.0) | ||
| rspec-core (2.14.8) | ||
| rspec-expectations (2.14.5) | ||
| diff-lcs (>= 1.1.3, < 2.0) | ||
| rspec-mocks (2.14.6) | ||
| shotgun (0.9) | ||
| rack (>= 1.0) | ||
| shoulda-matchers (2.6.1) | ||
| activesupport (>= 3.0.0) | ||
| sinatra (1.4.5) | ||
| rack (~> 1.4) | ||
| rack-protection (~> 1.4) | ||
| tilt (~> 1.3, >= 1.3.4) | ||
| sinatra-contrib (1.4.2) | ||
| backports (>= 2.0) | ||
| multi_json | ||
| rack-protection | ||
| rack-test | ||
| sinatra (~> 1.4.0) | ||
| tilt (~> 1.3) | ||
| thread_safe (0.3.4) | ||
| tilt (1.4.1) | ||
| tzinfo (1.2.0) | ||
| thread_safe (~> 0.1) | ||
| xpath (2.0.0) | ||
| nokogiri (~> 1.3) | ||
|
|
||
| PLATFORMS | ||
| ruby | ||
|
|
||
| DEPENDENCIES | ||
| activerecord (~> 4.1) | ||
| activesupport (~> 4.1) | ||
| bcrypt | ||
| capybara | ||
| factory_girl | ||
| faker | ||
| pg | ||
| rack-test | ||
| rake | ||
| rspec | ||
| shotgun | ||
| shoulda-matchers | ||
| sinatra | ||
| sinatra-contrib |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,30 @@ | ||
| This repo should be used to hold your phase 2, week 1 passion project. | ||
| > **Note**: This branch (master) contains a skeleton without any app code, perfect for creating a _new_ application or challenge. If you're looking for an example app built with this skeleton, take a look at the [example](/../..//tree/example) branch which includes basic CRUD and RSpec tests. | ||
|
|
||
| see more about [portfolio challenges and passion projects here](../../../phase-2-guide/blob/sf/portfolio_challenges.md) | ||
| ### Purpose | ||
| The Sinatra Skeleton: | ||
|
|
||
| 1. Provides a foundation for building challenges or creating a new Sinatra application. | ||
| 2. Demonstrates a reasonable set of practices around building Sinatra applications. | ||
| 3. Eases the transition to Rails for Dev Bootcamp students | ||
|
|
||
| ### Quickstart | ||
|
|
||
| 1. `bundle install` | ||
| 2. `shotgun config.ru` | ||
|
|
||
| As needed, create models & migrations with the `rake` tasks: | ||
|
|
||
| ``` | ||
| rake generate:migration # Create an empty migration in db/migrate, e.g., rake generate:migration NAME=create_tasks | ||
| rake generate:model # Create an empty model in app/models, e.g., rake generate:model NAME=User | ||
| ``` | ||
|
|
||
| ### Contributing | ||
|
|
||
| We would love for you to help make the skeleton more awesome, There are three ways to contribute: | ||
|
|
||
| 1. Ask for a bug fix or enhancement! | ||
| 2. Submit a pull request for a bug fix or enhancement! | ||
| 3. Code review an open pull request! | ||
|
|
||
| Be prepared to give and receive specific, actionable, and kind feedback! |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,141 @@ | ||
| require 'rake' | ||
|
|
||
| require ::File.expand_path('../config/environment', __FILE__) | ||
|
|
||
| # Include all of ActiveSupport's core class extensions, e.g., String#camelize | ||
| require 'active_support/core_ext' | ||
|
|
||
| namespace :generate do | ||
| desc "Create an empty model in app/models, e.g., rake generate:model NAME=User" | ||
| task :model do | ||
| unless ENV.has_key?('NAME') | ||
| raise "Must specificy model name, e.g., rake generate:model NAME=User" | ||
| end | ||
|
|
||
| model_name = ENV['NAME'].camelize | ||
| model_filename = ENV['NAME'].underscore + '.rb' | ||
| model_path = APP_ROOT.join('app', 'models', model_filename) | ||
|
|
||
| if File.exist?(model_path) | ||
| raise "ERROR: Model file '#{model_path}' already exists" | ||
| end | ||
|
|
||
| puts "Creating #{model_path}" | ||
| File.open(model_path, 'w+') do |f| | ||
| f.write(<<-EOF.strip_heredoc) | ||
| class #{model_name} < ActiveRecord::Base | ||
| # Remember to create a migration! | ||
| end | ||
| EOF | ||
| end | ||
| end | ||
|
|
||
| desc "Create an empty migration in db/migrate, e.g., rake generate:migration NAME=create_tasks" | ||
| task :migration do | ||
| unless ENV.has_key?('NAME') | ||
| raise "Must specificy migration name, e.g., rake generate:migration NAME=create_tasks" | ||
| end | ||
|
|
||
| name = ENV['NAME'].camelize | ||
| filename = "%s_%s.rb" % [Time.now.strftime('%Y%m%d%H%M%S'), ENV['NAME'].underscore] | ||
| path = APP_ROOT.join('db', 'migrate', filename) | ||
|
|
||
| if File.exist?(path) | ||
| raise "ERROR: File '#{path}' already exists" | ||
| end | ||
|
|
||
| puts "Creating #{path}" | ||
| File.open(path, 'w+') do |f| | ||
| f.write(<<-EOF.strip_heredoc) | ||
| class #{name} < ActiveRecord::Migration | ||
| def change | ||
| end | ||
| end | ||
| EOF | ||
| end | ||
| end | ||
|
|
||
| desc "Create an empty model spec in spec, e.g., rake generate:spec NAME=user" | ||
| task :spec do | ||
| unless ENV.has_key?('NAME') | ||
| raise "Must specificy migration name, e.g., rake generate:spec NAME=user" | ||
| end | ||
|
|
||
| name = ENV['NAME'].camelize | ||
| filename = "%s_spec.rb" % ENV['NAME'].underscore | ||
| path = APP_ROOT.join('spec', filename) | ||
|
|
||
| if File.exist?(path) | ||
| raise "ERROR: File '#{path}' already exists" | ||
| end | ||
|
|
||
| puts "Creating #{path}" | ||
| File.open(path, 'w+') do |f| | ||
| f.write(<<-EOF.strip_heredoc) | ||
| require 'spec_helper' | ||
|
|
||
| describe #{name} do | ||
| pending "add some examples to (or delete) #{__FILE__}" | ||
| end | ||
| EOF | ||
| end | ||
| end | ||
|
|
||
| end | ||
|
|
||
| namespace :db do | ||
| desc "Drop, create, and migrate the database" | ||
| task :reset => [:drop, :create, :migrate] | ||
|
|
||
| desc "Create the databases at #{DB_NAME}" | ||
| task :create do | ||
| puts "Creating development and test databases if they don't exist..." | ||
| system("createdb #{APP_NAME}_development && createdb #{APP_NAME}_test") | ||
| end | ||
|
|
||
| desc "Drop the database at #{DB_NAME}" | ||
| task :drop do | ||
| puts "Dropping development and test databases..." | ||
| system("dropdb #{APP_NAME}_development && dropdb #{APP_NAME}_test") | ||
| end | ||
|
|
||
| desc "Migrate the database (options: VERSION=x, VERBOSE=false, SCOPE=blog)." | ||
| task :migrate do | ||
| ActiveRecord::Migrator.migrations_paths << File.dirname(__FILE__) + 'db/migrate' | ||
| ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true | ||
| ActiveRecord::Migrator.migrate(ActiveRecord::Migrator.migrations_paths, ENV["VERSION"] ? ENV["VERSION"].to_i : nil) do |migration| | ||
| ENV["SCOPE"].blank? || (ENV["SCOPE"] == migration.scope) | ||
| end | ||
| end | ||
|
|
||
| desc "rollback your migration--use STEP=number to step back multiple times" | ||
| task :rollback do | ||
| step = (ENV['STEP'] || 1).to_i | ||
| ActiveRecord::Migrator.rollback('db/migrate', step) | ||
| Rake::Task['db:version'].invoke if Rake::Task['db:version'] | ||
| end | ||
|
|
||
| desc "Populate the database with dummy data by running db/seeds.rb" | ||
| task :seed do | ||
| require APP_ROOT.join('db', 'seeds.rb') | ||
| end | ||
|
|
||
| desc "Returns the current schema version number" | ||
| task :version do | ||
| puts "Current version: #{ActiveRecord::Migrator.current_version}" | ||
| end | ||
|
|
||
| namespace :test do | ||
| desc "Migrate test database" | ||
| task :prepare do | ||
| system "rake db:migrate RACK_ENV=test" | ||
| end | ||
| end | ||
| end | ||
|
|
||
| desc 'Start IRB with application environment loaded' | ||
| task "console" do | ||
| exec "irb -r./config/environment" | ||
| end | ||
|
|
||
| task :default => :spec |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| get '/about' do | ||
| erb :about | ||
| end |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| get '/demo' do | ||
| puts "LEL" | ||
| puts session[:error] | ||
| erb :demo | ||
| end | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| enable :sessions | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
|
|
||
| get '/' do | ||
| @user_id = session[:current_user_id] | ||
| @username = User.find(@user_id).name if @user_id != nil | ||
| @logged_in = (@user_id != nil) | ||
| @error = session[:error] | ||
| erb :index | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. you're checking looking up the current user based on the ID in the session should be in a helper method called |
||
| end | ||
|
|
||
| post '/' do | ||
| erb :index | ||
| end | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| get '/learn' do | ||
| erb :learn | ||
| end |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,29 @@ | ||
| get '/login' do | ||
| if session_logged_in? | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You should also make an |
||
| redirect to('/profile') | ||
| end | ||
| erb :login | ||
| end | ||
|
|
||
| put '/login' do | ||
| # login if possible | ||
| username = params[:username] || params[:username2] | ||
| password = params[:password] || params[:password2] | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. whats up with |
||
|
|
||
| puts "REQUEST TO LOGIN: #{username}" | ||
| if session_authenticate(username, password) | ||
| puts "LOGIN SUCCESSFUL!" | ||
| session[:error] = "" | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. you shouldnt need to store an error in the session |
||
| session_set_current_user ( User.find_by(name: username) ) | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
| else | ||
| puts "LOGIN NOT SUCCESSFUL!" | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. if the login fails you should render the login page again with a message saying the auth failed. |
||
| session[:error] = "Unsuccessful login." | ||
| end | ||
|
|
||
| redirect back | ||
| end | ||
|
|
||
| get '/logout' do | ||
| session_logout | ||
| redirect to('/') | ||
| end | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| get '/profile' do | ||
| user = session_current_user | ||
|
|
||
| if !session_logged_in? | ||
| redirect to('/login') | ||
| end | ||
| @trees = user.trees | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. just use |
||
| erb :trees | ||
| end | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
careful not to leave these puts statements inhere