diff --git a/Gemfile.lock b/Gemfile.lock
new file mode 100644
index 0000000000..c14020e447
--- /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.5)
+ 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.4.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.3)
+ 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.1.4
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 1c07694e9d..f34255f51e 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -1,3 +1,18 @@
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
+
+ def current_user
+ @user ||= User.find_by(id: session[:user_id])
+ end
+
+
+ def logged_in?
+ !!session[:user_id]
+ end
+
+ def admin
+ current_user.admin
+ end
+
+ helper_method :logged_in?, :current_user, :authenticate, :admin #why do i need this?
end
diff --git a/app/controllers/attractions_controller.rb b/app/controllers/attractions_controller.rb
new file mode 100644
index 0000000000..aae7dcdc56
--- /dev/null
+++ b/app/controllers/attractions_controller.rb
@@ -0,0 +1,42 @@
+class AttractionsController < ApplicationController
+
+ def index
+ @attractions = Attraction.all
+ end
+
+ def new
+ @attraction = Attraction.new
+ end
+
+ def create
+ @attraction = Attraction.new(attractions_params)
+ if @attraction.save
+ redirect_to attraction_path(@attraction)
+ else
+ redirect_to attractions_path
+ end
+ end
+
+ def show
+ @attraction = Attraction.find_by(id: params[:id])
+ end
+
+ def edit
+ @attraction = Attraction.find_by(id: params[:id])
+ end
+
+ def update
+ @attraction = Attraction.find_by(id: params[:id])
+ if @attraction.update(attractions_params)
+ redirect_to attraction_path(@attraction)
+ else
+ render 'attractions/edit'
+ end
+ end
+
+ private
+
+ def attractions_params
+ params.require(:attraction).permit(:name, :tickets, :nausea_rating, :happiness_rating, :min_height)
+ end
+end
\ No newline at end of file
diff --git a/app/controllers/rides_controller.rb b/app/controllers/rides_controller.rb
new file mode 100644
index 0000000000..dc9a6e0eb1
--- /dev/null
+++ b/app/controllers/rides_controller.rb
@@ -0,0 +1,21 @@
+class RidesController < ApplicationController
+
+ def new
+ @ride = Ride.new
+ end
+
+ def create
+ @attraction = Attraction.find(ride_params[:attraction])
+ @ride = Ride.new(:attraction_id => ride_params[:attraction], :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
+ def ride_params
+ params.permit(:attraction)
+ end
+end
\ No newline at end of file
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
new file mode 100644
index 0000000000..2d15dc7dad
--- /dev/null
+++ b/app/controllers/sessions_controller.rb
@@ -0,0 +1,25 @@
+class SessionsController < ApplicationController
+ def welcome
+ end
+
+ 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.clear
+ redirect_to root_path
+ end
+
+
+end
\ No newline at end of file
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
new file mode 100644
index 0000000000..8ec604fc35
--- /dev/null
+++ b/app/controllers/users_controller.rb
@@ -0,0 +1,27 @@
+class UsersController < ApplicationController
+
+ 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.id)
+ else
+ redirect_to root_path
+ end
+ end
+
+ def show
+ if !logged_in?
+ redirect_to root_path
+ end
+ end
+
+
+ def user_params
+ params.require(:user).permit(:name, :height, :happiness, :nausea, :tickets, :password, :admin)
+ end
+end
diff --git a/app/models/attraction.rb b/app/models/attraction.rb
index 474bd1e76c..cfd320c6ed 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..9df79be4c1 100644
--- a/app/models/ride.rb
+++ b/app/models/ride.rb
@@ -1,2 +1,25 @@
class Ride < ActiveRecord::Base
-end
+ belongs_to :attraction
+ belongs_to :user
+
+
+
+ def take_ride
+ if user.height >= attraction.min_height && user.tickets > attraction.tickets
+ user.tickets = user.tickets - attraction.tickets
+ user.nausea = user.nausea += attraction.nausea_rating
+ user.happiness = user.happiness += attraction.happiness_rating
+ user.save
+ return "Thanks for riding the #{attraction.name}!"
+ elsif user.height < attraction.min_height && user.tickets < attraction.tickets
+ return "Sorry. You do not have enough tickets to ride the #{attraction.name}. You are not tall enough to ride the #{attraction.name}."
+ elsif user.height < attraction.min_height
+ return "Sorry. You are not tall enough to ride the #{attraction.name}."
+ else user.tickets < attraction.tickets
+ return "Sorry. You do not have enough tickets to ride the #{attraction.name}."
+ end
+ end
+
+
+
+end
\ No newline at end of file
diff --git a/app/models/user.rb b/app/models/user.rb
index 4a57cf079b..3992b09756 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1,2 +1,15 @@
class User < ActiveRecord::Base
+
+ has_many :rides
+ has_many :attractions, through: :rides
+ has_secure_password
+
+ def mood
+ if self.nausea.to_i > self.happiness.to_i
+ mood = "sad"
+ else
+ mood = "happy"
+ end
+ end
+
end
diff --git a/app/views/attractions/edit.html.erb b/app/views/attractions/edit.html.erb
new file mode 100644
index 0000000000..d505ff7b3b
--- /dev/null
+++ b/app/views/attractions/edit.html.erb
@@ -0,0 +1,15 @@
+Editing an attraction
+
+<%= form_for @attraction do |f| %>
+
<%= f.label :name %>
+
<%= f.text_field :name %>
+
<%= f.label :min_height, "Height Requirement (in inches)" %>
+
<%= f.text_field :min_height %>
+
<%= f.label :happiness_rating, "How fun is it? (1-5 scale)" %>
+
<%= f.text_field :happiness_rating %>
+
<%= f.label :nausea_rating, "How nausea-inducing is it? (1-5 scale)" %>
+
<%= f.text_field :nausea_rating %>
+
<%= f.label :tickets, "How many tickets does it cost?" %>
+
<%= f.text_field :tickets %>
+
<%= f.submit "Update Attraction" %>
+<% end %>
\ 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..1e42bef673
--- /dev/null
+++ b/app/views/attractions/index.html.erb
@@ -0,0 +1,14 @@
+Attractions index page
+
+<%@attractions.each do |attraction|%>
+
<%= attraction.name%>
+
<%= attraction.tickets %>
+
<%= attraction.nausea_rating %>
+
<%= attraction.happiness_rating %>
+
<%= attraction.min_height %>
+
<%= link_to "Show #{attraction.name}", attraction if admin %>
+
<%= link_to "Go on #{attraction.name}", attraction unless admin %>
+
+<%end%>
+
+<%= link_to "New Attraction", new_attraction_path if admin %>
\ 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..07947e3052
--- /dev/null
+++ b/app/views/attractions/new.html.erb
@@ -0,0 +1,20 @@
+Add New Attraction
+
+<%= form_for @attraction do |f| %>
+ <%= f.label :name %>
+ <%= f.text_field :name %>
+
+ <%= f.label :tickets %>
+ <%= f.text_field :tickets %>
+
+ <%= f.label :nausea_rating %>
+ <%= f.text_field :nausea_rating %>
+
+ <%= f.label :happiness_rating %>
+ <%= f.text_field :happiness_rating %>
+
+ <%= f.label :min_height %>
+ <%= f.text_field :min_height %>
+
+ <%= f.submit %>
+<% end %>
\ 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..a9b1550fab
--- /dev/null
+++ b/app/views/attractions/show.html.erb
@@ -0,0 +1,17 @@
+Attraction show page
+
+
+
Name<%= @attraction.name%>
+
Tickets:<%= @attraction.tickets %>
+
Nausea:<%= @attraction.nausea_rating %>
+
Happiness:<%= @attraction.happiness_rating %>
+
Minimum Height:<%= @attraction.min_height %>
+
+ <% if admin %>
+ <%= link_to "Edit Attraction", edit_attraction_path(@attraction) %>
+ <% else %>
+ <%= form_tag('/rides',method: :post) do %>
+ <%= hidden_field_tag "attraction", @attraction.id %>
+ <%= submit_tag("Go on this ride") %>
+ <% end %>
+ <% end %>
\ No newline at end of file
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index d5e06ee11b..7d86dfee79 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -18,6 +18,18 @@
Home
+
+ <% if logged_in? %>
+ <%= link_to "#{current_user.name}'s profile", current_user %>
+ <%= link_to "Log Out", signout_path if logged_in? %>
+ <% if current_user.admin %>
+ ADMIN
+ <% end %>
+ <% else %>
+ <%= link_to "Sign In", signin_path %>
+ <%= link_to "Sign Up", signup_path %>
+ <% end %>
+