diff --git a/Gemfile.lock b/Gemfile.lock
new file mode 100644
index 0000000000..69ed3ba5fe
--- /dev/null
+++ b/Gemfile.lock
@@ -0,0 +1,237 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ actioncable (5.2.4.2)
+ actionpack (= 5.2.4.2)
+ nio4r (~> 2.0)
+ websocket-driver (>= 0.6.1)
+ actionmailer (5.2.4.2)
+ actionpack (= 5.2.4.2)
+ actionview (= 5.2.4.2)
+ activejob (= 5.2.4.2)
+ mail (~> 2.5, >= 2.5.4)
+ rails-dom-testing (~> 2.0)
+ actionpack (5.2.4.2)
+ actionview (= 5.2.4.2)
+ activesupport (= 5.2.4.2)
+ rack (~> 2.0, >= 2.0.8)
+ rack-test (>= 0.6.3)
+ rails-dom-testing (~> 2.0)
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
+ actionview (5.2.4.2)
+ activesupport (= 5.2.4.2)
+ builder (~> 3.1)
+ erubi (~> 1.4)
+ rails-dom-testing (~> 2.0)
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
+ activejob (5.2.4.2)
+ activesupport (= 5.2.4.2)
+ globalid (>= 0.3.6)
+ activemodel (5.2.4.2)
+ activesupport (= 5.2.4.2)
+ activerecord (5.2.4.2)
+ activemodel (= 5.2.4.2)
+ activesupport (= 5.2.4.2)
+ arel (>= 9.0)
+ activestorage (5.2.4.2)
+ actionpack (= 5.2.4.2)
+ activerecord (= 5.2.4.2)
+ marcel (~> 0.3.1)
+ activesupport (5.2.4.2)
+ concurrent-ruby (~> 1.0, >= 1.0.2)
+ i18n (>= 0.7, < 2)
+ minitest (~> 5.1)
+ tzinfo (~> 1.1)
+ addressable (2.7.0)
+ public_suffix (>= 2.0.2, < 5.0)
+ arel (9.0.0)
+ autoprefixer-rails (9.7.6)
+ execjs
+ bcrypt (3.1.13)
+ bindex (0.8.1)
+ bootsnap (1.4.6)
+ msgpack (~> 1.0)
+ bootstrap-sass (3.3.7)
+ autoprefixer-rails (>= 5.2.1)
+ sass (>= 3.3.4)
+ builder (3.2.4)
+ byebug (11.1.1)
+ capybara (2.18.0)
+ addressable
+ mini_mime (>= 0.1.3)
+ nokogiri (>= 1.3.3)
+ rack (>= 1.0.0)
+ rack-test (>= 0.5.4)
+ xpath (>= 2.0, < 4.0)
+ childprocess (3.0.0)
+ coffee-rails (4.2.2)
+ coffee-script (>= 2.2.0)
+ railties (>= 4.0.0)
+ coffee-script (2.4.1)
+ coffee-script-source
+ execjs
+ coffee-script-source (1.12.2)
+ concurrent-ruby (1.1.6)
+ crass (1.0.6)
+ database_cleaner (1.8.4)
+ diff-lcs (1.3)
+ erubi (1.9.0)
+ execjs (2.7.0)
+ ffi (1.12.2)
+ globalid (0.4.2)
+ activesupport (>= 4.2.0)
+ i18n (1.8.2)
+ concurrent-ruby (~> 1.0)
+ jbuilder (2.10.0)
+ activesupport (>= 5.0.0)
+ listen (3.1.5)
+ rb-fsevent (~> 0.9, >= 0.9.4)
+ rb-inotify (~> 0.9, >= 0.9.7)
+ ruby_dep (~> 1.2)
+ loofah (2.5.0)
+ crass (~> 1.0.2)
+ nokogiri (>= 1.5.9)
+ mail (2.7.1)
+ mini_mime (>= 0.1.1)
+ marcel (0.3.3)
+ mimemagic (~> 0.3.2)
+ method_source (1.0.0)
+ mimemagic (0.3.4)
+ mini_mime (1.0.2)
+ mini_portile2 (2.4.0)
+ minitest (5.14.0)
+ msgpack (1.3.3)
+ nio4r (2.5.2)
+ nokogiri (1.10.9)
+ mini_portile2 (~> 2.4.0)
+ public_suffix (4.0.4)
+ puma (3.12.4)
+ rack (2.2.2)
+ rack-test (1.1.0)
+ rack (>= 1.0, < 3)
+ rack_session_access (0.2.0)
+ builder (>= 2.0.0)
+ rack (>= 1.0.0)
+ rails (5.2.4.2)
+ actioncable (= 5.2.4.2)
+ actionmailer (= 5.2.4.2)
+ actionpack (= 5.2.4.2)
+ actionview (= 5.2.4.2)
+ activejob (= 5.2.4.2)
+ activemodel (= 5.2.4.2)
+ activerecord (= 5.2.4.2)
+ activestorage (= 5.2.4.2)
+ activesupport (= 5.2.4.2)
+ bundler (>= 1.3.0)
+ railties (= 5.2.4.2)
+ sprockets-rails (>= 2.0.0)
+ rails-dom-testing (2.0.3)
+ activesupport (>= 4.2.0)
+ nokogiri (>= 1.6)
+ rails-html-sanitizer (1.3.0)
+ loofah (~> 2.3)
+ railties (5.2.4.2)
+ actionpack (= 5.2.4.2)
+ activesupport (= 5.2.4.2)
+ method_source
+ rake (>= 0.8.7)
+ thor (>= 0.19.0, < 2.0)
+ rake (13.0.1)
+ rb-fsevent (0.10.3)
+ rb-inotify (0.10.1)
+ ffi (~> 1.0)
+ rspec-core (3.9.1)
+ rspec-support (~> 3.9.1)
+ rspec-expectations (3.9.1)
+ diff-lcs (>= 1.2.0, < 2.0)
+ rspec-support (~> 3.9.0)
+ rspec-mocks (3.9.1)
+ diff-lcs (>= 1.2.0, < 2.0)
+ rspec-support (~> 3.9.0)
+ rspec-rails (4.0.0)
+ actionpack (>= 4.2)
+ activesupport (>= 4.2)
+ railties (>= 4.2)
+ rspec-core (~> 3.9)
+ rspec-expectations (~> 3.9)
+ rspec-mocks (~> 3.9)
+ rspec-support (~> 3.9)
+ rspec-support (3.9.2)
+ ruby_dep (1.5.0)
+ rubyzip (2.3.0)
+ sass (3.7.4)
+ sass-listen (~> 4.0.0)
+ sass-listen (4.0.0)
+ rb-fsevent (~> 0.9, >= 0.9.4)
+ rb-inotify (~> 0.9, >= 0.9.7)
+ sass-rails (5.1.0)
+ railties (>= 5.2.0)
+ sass (~> 3.1)
+ sprockets (>= 2.8, < 4.0)
+ sprockets-rails (>= 2.0, < 4.0)
+ tilt (>= 1.1, < 3)
+ selenium-webdriver (3.142.7)
+ childprocess (>= 0.5, < 4.0)
+ rubyzip (>= 1.2.2)
+ spring (2.1.0)
+ spring-watcher-listen (2.0.1)
+ listen (>= 2.7, < 4.0)
+ spring (>= 1.2, < 3.0)
+ sprockets (3.7.2)
+ concurrent-ruby (~> 1.0)
+ rack (> 1, < 3)
+ sprockets-rails (3.2.1)
+ actionpack (>= 4.0)
+ activesupport (>= 4.0)
+ sprockets (>= 3.0.0)
+ sqlite3 (1.3.13)
+ thor (1.0.1)
+ thread_safe (0.3.6)
+ tilt (2.0.10)
+ turbolinks (5.2.1)
+ turbolinks-source (~> 5.2)
+ turbolinks-source (5.2.0)
+ tzinfo (1.2.7)
+ thread_safe (~> 0.1)
+ uglifier (4.2.0)
+ execjs (>= 0.3.0, < 3)
+ web-console (3.7.0)
+ actionview (>= 5.0)
+ activemodel (>= 5.0)
+ bindex (>= 0.4.0)
+ railties (>= 5.0)
+ websocket-driver (0.7.1)
+ websocket-extensions (>= 0.1.0)
+ websocket-extensions (0.1.4)
+ xpath (3.2.0)
+ nokogiri (~> 1.8)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ bcrypt (~> 3.1.7)
+ bootsnap
+ bootstrap-sass (= 3.3.7)
+ byebug
+ capybara (~> 2.13)
+ coffee-rails (~> 4.2)
+ database_cleaner
+ jbuilder (~> 2.5)
+ listen (>= 3.0.5, < 3.2)
+ puma (~> 3.7)
+ rack_session_access
+ rails (~> 5.1)
+ rspec-rails
+ sass-rails (~> 5.0)
+ selenium-webdriver
+ spring
+ spring-watcher-listen (~> 2.0.0)
+ sqlite3 (~> 1.3.6)
+ turbolinks (~> 5)
+ tzinfo-data
+ uglifier (>= 1.3.0)
+ web-console (>= 3.3.0)
+
+BUNDLED WITH
+ 2.0.1
diff --git a/app/assets/javascripts/attraction.coffee b/app/assets/javascripts/attraction.coffee
new file mode 100644
index 0000000000..24f83d18bb
--- /dev/null
+++ b/app/assets/javascripts/attraction.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/app/assets/javascripts/ride.coffee b/app/assets/javascripts/ride.coffee
new file mode 100644
index 0000000000..24f83d18bb
--- /dev/null
+++ b/app/assets/javascripts/ride.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/app/assets/javascripts/session.coffee b/app/assets/javascripts/session.coffee
new file mode 100644
index 0000000000..24f83d18bb
--- /dev/null
+++ b/app/assets/javascripts/session.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/app/assets/javascripts/static.coffee b/app/assets/javascripts/static.coffee
new file mode 100644
index 0000000000..24f83d18bb
--- /dev/null
+++ b/app/assets/javascripts/static.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/app/assets/javascripts/user.coffee b/app/assets/javascripts/user.coffee
new file mode 100644
index 0000000000..24f83d18bb
--- /dev/null
+++ b/app/assets/javascripts/user.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/app/assets/stylesheets/attraction.scss b/app/assets/stylesheets/attraction.scss
new file mode 100644
index 0000000000..050aa6e2bc
--- /dev/null
+++ b/app/assets/stylesheets/attraction.scss
@@ -0,0 +1,3 @@
+// Place all the styles related to the Attraction controller here.
+// They will automatically be included in application.css.
+// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/app/assets/stylesheets/ride.scss b/app/assets/stylesheets/ride.scss
new file mode 100644
index 0000000000..71318dbc6b
--- /dev/null
+++ b/app/assets/stylesheets/ride.scss
@@ -0,0 +1,3 @@
+// Place all the styles related to the Ride controller here.
+// They will automatically be included in application.css.
+// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/app/assets/stylesheets/session.scss b/app/assets/stylesheets/session.scss
new file mode 100644
index 0000000000..a5dc23e6d0
--- /dev/null
+++ b/app/assets/stylesheets/session.scss
@@ -0,0 +1,3 @@
+// Place all the styles related to the Session controller here.
+// They will automatically be included in application.css.
+// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/app/assets/stylesheets/static.scss b/app/assets/stylesheets/static.scss
new file mode 100644
index 0000000000..b96eedbd40
--- /dev/null
+++ b/app/assets/stylesheets/static.scss
@@ -0,0 +1,3 @@
+// Place all the styles related to the Static controller here.
+// They will automatically be included in application.css.
+// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/app/assets/stylesheets/user.scss b/app/assets/stylesheets/user.scss
new file mode 100644
index 0000000000..c47a13e0c4
--- /dev/null
+++ b/app/assets/stylesheets/user.scss
@@ -0,0 +1,3 @@
+// Place all the styles related to the User controller here.
+// They will automatically be included in application.css.
+// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 1c07694e9d..48ba116703 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -1,3 +1,25 @@
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
+ before_action :verify_user
+ helper_method :current_user, :user_authenticated, :admin
+
+ # ------------------------------PRIVATE METHODS BELOW ---------------------------------
+ private
+
+ def verify_user
+ redirect_to '/' unless user_authenticated
+ end
+
+ def user_authenticated
+ !!session[:user_id]
+ end
+
+ def admin
+ current_user.admin
+ end
+
+ def current_user
+ @user ||= User.find_by(id: session[:user_id])
+ end
+
end
diff --git a/app/controllers/attractions_controller.rb b/app/controllers/attractions_controller.rb
new file mode 100644
index 0000000000..2dac78dea6
--- /dev/null
+++ b/app/controllers/attractions_controller.rb
@@ -0,0 +1,43 @@
+class AttractionsController < ApplicationController
+
+ before_action :find_attraction, only: [:show, :edit, :update]
+
+ def index
+ @attractions = Attraction.all
+ end
+
+ def show
+ @ride = @attraction.rides.build(user_id: current_user.id)
+ end
+
+ def new
+ @attraction = Attraction.new
+ end
+
+ def create
+ attraction = Attraction.create(attraction_params)
+ redirect_to attraction_path(attraction)
+ end
+
+ def edit
+ @ride = @attraction.rides.build(user_id: current_user.id)
+ end
+
+ def update
+ @attraction.update(attraction_params)
+ redirect_to attraction_path(@attraction)
+ end
+
+ # ------------------------------PRIVATE METHODS BELOW ---------------------------------
+ private
+
+
+ def find_attraction
+ @attraction = Attraction.find_by(id: params[:id])
+ end
+
+ def attraction_params
+ params.require(:attraction).permit(:name, :min_height, :nausea_rating, :happiness_rating, :tickets)
+ end
+
+end
diff --git a/app/controllers/rides_controller.rb b/app/controllers/rides_controller.rb
new file mode 100644
index 0000000000..f94c898199
--- /dev/null
+++ b/app/controllers/rides_controller.rb
@@ -0,0 +1,22 @@
+class RidesController < ApplicationController
+
+ def create
+ @attraction = Attraction.find(ride_params[:attraction_id])
+ @ride = Ride.new(:attraction_id => ride_params[:attraction_id], :user_id => current_user.id)
+
+ if @ride.valid?
+ redirect_to user_path(current_user), notice:@ride.take_ride
+ else
+ redirect_to attraction_path(@attraction)
+ end
+
+ end
+
+ # ------------------------------PRIVATE METHODS BELOW ---------------------------------
+ private
+
+ def ride_params
+ params.permit(:user_id, :attraction_id)
+ end
+
+end
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
new file mode 100644
index 0000000000..e377d366cf
--- /dev/null
+++ b/app/controllers/sessions_controller.rb
@@ -0,0 +1,25 @@
+class SessionsController < ApplicationController
+ skip_before_action :verify_user, only: [:new, :create]
+
+ def new
+ @user = User.new
+ end
+
+ def create
+ @user = User.find_by(name: params[:user_name])
+
+ if @user && @user.authenticate(params[:password])
+ session[:user_id] = @user.id
+ redirect_to user_path(@user)
+ else
+ redirect_to root_path
+ end
+
+ end
+
+ def destroy
+ session.delete("user_id")
+ redirect_to root_path
+ end
+
+end
diff --git a/app/controllers/static_controller.rb b/app/controllers/static_controller.rb
new file mode 100644
index 0000000000..7e9640c9e6
--- /dev/null
+++ b/app/controllers/static_controller.rb
@@ -0,0 +1,7 @@
+class StaticController < ApplicationController
+ skip_before_action :verify_user, only: [:home]
+
+ def home
+ end
+
+end
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
new file mode 100644
index 0000000000..b06111bd51
--- /dev/null
+++ b/app/controllers/users_controller.rb
@@ -0,0 +1,35 @@
+class UsersController < ApplicationController
+ skip_before_action :verify_user, only: [:new, :create]
+
+ def new
+ @user = User.new
+ end
+
+ def create
+ @user = User.create(user_params)
+
+ if @user.save
+ session[:user_id] = @user.id
+ redirect_to user_path(@user)
+ else
+ render 'new'
+ end
+
+ end
+
+ def show
+ @user = User.find_by(id: params[:id])
+ end
+
+
+
+ # ------------------------------PRIVATE METHODS BELOW ---------------------------------
+ private
+
+ def user_params
+ params.require(:user).permit(:name, :password, :height, :nausea, :happiness, :tickets, :admin)
+ end
+
+
+
+end
diff --git a/app/helpers/attraction_helper.rb b/app/helpers/attraction_helper.rb
new file mode 100644
index 0000000000..6d4bb90522
--- /dev/null
+++ b/app/helpers/attraction_helper.rb
@@ -0,0 +1,2 @@
+module AttractionHelper
+end
diff --git a/app/helpers/ride_helper.rb b/app/helpers/ride_helper.rb
new file mode 100644
index 0000000000..2773be0439
--- /dev/null
+++ b/app/helpers/ride_helper.rb
@@ -0,0 +1,2 @@
+module RideHelper
+end
diff --git a/app/helpers/session_helper.rb b/app/helpers/session_helper.rb
new file mode 100644
index 0000000000..f867f863e4
--- /dev/null
+++ b/app/helpers/session_helper.rb
@@ -0,0 +1,2 @@
+module SessionHelper
+end
diff --git a/app/helpers/static_helper.rb b/app/helpers/static_helper.rb
new file mode 100644
index 0000000000..8cfc9af4e2
--- /dev/null
+++ b/app/helpers/static_helper.rb
@@ -0,0 +1,2 @@
+module StaticHelper
+end
diff --git a/app/helpers/user_helper.rb b/app/helpers/user_helper.rb
new file mode 100644
index 0000000000..0147c3fe6a
--- /dev/null
+++ b/app/helpers/user_helper.rb
@@ -0,0 +1,2 @@
+module UserHelper
+end
diff --git a/app/models/attraction.rb b/app/models/attraction.rb
index 474bd1e76c..73af85a07c 100644
--- a/app/models/attraction.rb
+++ b/app/models/attraction.rb
@@ -1,2 +1,6 @@
class Attraction < ApplicationRecord
+
+ has_many :rides
+ has_many :users, :through => :rides
+
end
diff --git a/app/models/ride.rb b/app/models/ride.rb
index 4d880172e1..547a0367ce 100644
--- a/app/models/ride.rb
+++ b/app/models/ride.rb
@@ -1,2 +1,40 @@
class Ride < ActiveRecord::Base
+
+ belongs_to :user
+ belongs_to :attraction
+
+ def take_ride
+
+ if enough_tickets && tall_enough
+ update_user
+ "Thanks for riding the #{self.attraction.name}!"
+ elsif !enough_tickets && tall_enough
+ "Sorry. You do not have enough tickets to ride the #{self.attraction.name}."
+ elsif enough_tickets && !tall_enough
+ "Sorry. You are not tall enough to ride the #{self.attraction.name}."
+ else
+ "Sorry. You do not have enough tickets to ride the #{self.attraction.name}. You are not tall enough to ride the #{self.attraction.name}."
+ end
+
+ end
+
+ def enough_tickets
+ self.user.tickets >= self.attraction.tickets ? true : false
+ end
+
+ def tall_enough
+ self.user.height >= self.attraction.min_height ? true : false
+ end
+
+ def update_user
+ updated_happiness = self.user.happiness + self.attraction.happiness_rating
+
+ updated_nausea = self.user.nausea + self.attraction.nausea_rating
+
+ updated_ticket = self.user.tickets - self.attraction.tickets
+
+ self.user.update(:happiness => updated_happiness, :nausea => updated_nausea, :tickets => updated_ticket)
+ end
+
+
end
diff --git a/app/models/user.rb b/app/models/user.rb
index 4a57cf079b..3f124fb28f 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1,2 +1,13 @@
class User < ActiveRecord::Base
+ has_secure_password
+
+ has_many :rides
+ has_many :attractions, :through => :rides
+
+ def mood
+ unless admin
+ happiness.to_i < nausea.to_i ? "sad" : "happy"
+ end
+ end
+
end
diff --git a/app/views/attractions/_form.html.erb b/app/views/attractions/_form.html.erb
new file mode 100644
index 0000000000..7d9b03744a
--- /dev/null
+++ b/app/views/attractions/_form.html.erb
@@ -0,0 +1,8 @@
+<%= form_for @attraction do |f| %>
+ <%= f.text_field :name %>
+ <%= f.text_field :tickets %>
+ <%= f.text_field :nausea_rating %>
+ <%= f.text_field :happiness_rating %>
+ <%= f.text_field :min_height %>
+ <%= f.submit %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/attractions/edit.html.erb b/app/views/attractions/edit.html.erb
new file mode 100644
index 0000000000..3e31518123
--- /dev/null
+++ b/app/views/attractions/edit.html.erb
@@ -0,0 +1 @@
+<%= render "form" %>
\ No newline at end of file
diff --git a/app/views/attractions/index.html.erb b/app/views/attractions/index.html.erb
new file mode 100644
index 0000000000..cef2caf679
--- /dev/null
+++ b/app/views/attractions/index.html.erb
@@ -0,0 +1,10 @@
+<% @attractions.each do |attraction| %>
+ <%= attraction.name%>
+ <%= link_to "Show #{attraction.name}", attraction if admin %>
+ <%= link_to "Go on #{attraction.name}", attraction unless admin %>
+
+<%end%>
+
+<% if admin %>
+ <%= link_to "New Attraction", new_attraction_path %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/attractions/new.html.erb b/app/views/attractions/new.html.erb
new file mode 100644
index 0000000000..3e31518123
--- /dev/null
+++ b/app/views/attractions/new.html.erb
@@ -0,0 +1 @@
+<%= render "form" %>
\ No newline at end of file
diff --git a/app/views/attractions/show.html.erb b/app/views/attractions/show.html.erb
new file mode 100644
index 0000000000..f0e85d55a1
--- /dev/null
+++ b/app/views/attractions/show.html.erb
@@ -0,0 +1,14 @@
+