Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
14 changes: 14 additions & 0 deletions CHANGELOG.md
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
30 changes: 30 additions & 0 deletions Gemfile
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
94 changes: 94 additions & 0 deletions Gemfile.lock
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
31 changes: 29 additions & 2 deletions README.md
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!
141 changes: 141 additions & 0 deletions Rakefile
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
Binary file added app/.DS_Store
Binary file not shown.
Empty file added app/controllers/.gitkeep
Empty file.
3 changes: 3 additions & 0 deletions app/controllers/about.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
get '/about' do
erb :about
end
5 changes: 5 additions & 0 deletions app/controllers/demo.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
get '/demo' do
puts "LEL"
puts session[:error]

Copy link
Copy Markdown

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

erb :demo
end
14 changes: 14 additions & 0 deletions app/controllers/index.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
enable :sessions

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

enable :sessions should be in an app or config file not one of you controllers


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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you're checking @user_id != nil twice which is a code smell.

looking up the current user based on the ID in the session should be in a helper method called current_user

end

post '/' do
erb :index
end

3 changes: 3 additions & 0 deletions app/controllers/learn.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
get '/learn' do
erb :learn
end
29 changes: 29 additions & 0 deletions app/controllers/login.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
get '/login' do
if session_logged_in?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

session_logged_in? should just be logged_in?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should also make an ensure_logged_in! helper method that uses halt to redirect to /login

redirect to('/profile')
end
erb :login
end

put '/login' do
# login if possible
username = params[:username] || params[:username2]
password = params[:password] || params[:password2]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

whats up with username2 and password2?


puts "REQUEST TO LOGIN: #{username}"
if session_authenticate(username, password)
puts "LOGIN SUCCESSFUL!"
session[:error] = ""

Copy link
Copy Markdown

Choose a reason for hiding this comment

The 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) )

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

session_authenticate already looked up the user. You shouldnt need to look it up again.

else
puts "LOGIN NOT SUCCESSFUL!"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The 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
9 changes: 9 additions & 0 deletions app/controllers/profile.rb
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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just use @trees = current_user.trees

erb :trees
end
Loading