diff --git a/Gemfile.lock b/Gemfile.lock
new file mode 100644
index 0000000000..967524dd43
--- /dev/null
+++ b/Gemfile.lock
@@ -0,0 +1,240 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ actioncable (5.2.6)
+ actionpack (= 5.2.6)
+ nio4r (~> 2.0)
+ websocket-driver (>= 0.6.1)
+ actionmailer (5.2.6)
+ actionpack (= 5.2.6)
+ actionview (= 5.2.6)
+ activejob (= 5.2.6)
+ mail (~> 2.5, >= 2.5.4)
+ rails-dom-testing (~> 2.0)
+ actionpack (5.2.6)
+ actionview (= 5.2.6)
+ activesupport (= 5.2.6)
+ 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.6)
+ activesupport (= 5.2.6)
+ builder (~> 3.1)
+ erubi (~> 1.4)
+ rails-dom-testing (~> 2.0)
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
+ activejob (5.2.6)
+ activesupport (= 5.2.6)
+ globalid (>= 0.3.6)
+ activemodel (5.2.6)
+ activesupport (= 5.2.6)
+ activerecord (5.2.6)
+ activemodel (= 5.2.6)
+ activesupport (= 5.2.6)
+ arel (>= 9.0)
+ activestorage (5.2.6)
+ actionpack (= 5.2.6)
+ activerecord (= 5.2.6)
+ marcel (~> 1.0.0)
+ activesupport (5.2.6)
+ 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 (10.2.5.1)
+ execjs (> 0)
+ bcrypt (3.1.16)
+ bindex (0.8.1)
+ bootsnap (1.7.5)
+ msgpack (~> 1.0)
+ bootstrap-sass (3.3.7)
+ autoprefixer-rails (>= 5.2.1)
+ sass (>= 3.3.4)
+ builder (3.2.4)
+ byebug (11.1.3)
+ 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.9)
+ crass (1.0.6)
+ database_cleaner (2.0.1)
+ database_cleaner-active_record (~> 2.0.0)
+ database_cleaner-active_record (2.0.1)
+ activerecord (>= 5.a)
+ database_cleaner-core (~> 2.0.0)
+ database_cleaner-core (2.0.1)
+ diff-lcs (1.4.4)
+ erubi (1.10.0)
+ execjs (2.8.1)
+ ffi (1.15.1)
+ globalid (0.4.2)
+ activesupport (>= 4.2.0)
+ i18n (1.8.10)
+ concurrent-ruby (~> 1.0)
+ jbuilder (2.11.2)
+ 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.10.0)
+ crass (~> 1.0.2)
+ nokogiri (>= 1.5.9)
+ mail (2.7.1)
+ mini_mime (>= 0.1.1)
+ marcel (1.0.1)
+ method_source (1.0.0)
+ mini_mime (1.1.0)
+ minitest (5.14.4)
+ msgpack (1.4.2)
+ nio4r (2.5.7)
+ nokogiri (1.11.7-x86_64-darwin)
+ racc (~> 1.4)
+ public_suffix (4.0.6)
+ puma (3.12.6)
+ racc (1.5.2)
+ rack (2.2.3)
+ 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.6)
+ actioncable (= 5.2.6)
+ actionmailer (= 5.2.6)
+ actionpack (= 5.2.6)
+ actionview (= 5.2.6)
+ activejob (= 5.2.6)
+ activemodel (= 5.2.6)
+ activerecord (= 5.2.6)
+ activestorage (= 5.2.6)
+ activesupport (= 5.2.6)
+ bundler (>= 1.3.0)
+ railties (= 5.2.6)
+ 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.6)
+ actionpack (= 5.2.6)
+ activesupport (= 5.2.6)
+ method_source
+ rake (>= 0.8.7)
+ thor (>= 0.19.0, < 2.0)
+ rake (13.0.3)
+ rb-fsevent (0.11.0)
+ rb-inotify (0.10.1)
+ ffi (~> 1.0)
+ rspec-core (3.10.1)
+ rspec-support (~> 3.10.0)
+ rspec-expectations (3.10.1)
+ diff-lcs (>= 1.2.0, < 2.0)
+ rspec-support (~> 3.10.0)
+ rspec-mocks (3.10.2)
+ diff-lcs (>= 1.2.0, < 2.0)
+ rspec-support (~> 3.10.0)
+ rspec-rails (5.0.1)
+ actionpack (>= 5.2)
+ activesupport (>= 5.2)
+ railties (>= 5.2)
+ rspec-core (~> 3.10)
+ rspec-expectations (~> 3.10)
+ rspec-mocks (~> 3.10)
+ rspec-support (~> 3.10)
+ rspec-support (3.10.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.1)
+ 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.2)
+ actionpack (>= 4.0)
+ activesupport (>= 4.0)
+ sprockets (>= 3.0.0)
+ sqlite3 (1.3.13)
+ thor (1.1.0)
+ 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.9)
+ 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.4)
+ websocket-extensions (>= 0.1.0)
+ websocket-extensions (0.1.5)
+ xpath (3.2.0)
+ nokogiri (~> 1.8)
+
+PLATFORMS
+ x86_64-darwin-19
+
+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.2.7
diff --git a/[ b/[
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 1c07694e9d..52398c3856 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -1,3 +1,28 @@
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
+ protect_from_forgery with: :exception
+
+
+ def home
+ end
+
+
+ def current_user
+ User.find_by(id: session[:user_id])
+ end
+
+
+ def admin
+ current_user.admin
+ end
+
+ def user_is_authenticated
+ !!current_user
+ end
+
+ def verified_user
+ redirect_to '/' unless user_is_authenticated
+ end
+
+
end
diff --git a/app/controllers/attractions_controller.rb b/app/controllers/attractions_controller.rb
new file mode 100644
index 0000000000..62c293f941
--- /dev/null
+++ b/app/controllers/attractions_controller.rb
@@ -0,0 +1,45 @@
+class AttractionsController < ApplicationController
+
+ def index
+ @attractions = Attraction.all
+ end
+
+ def show
+ @attraction = Attraction.find(params[:id])
+
+ @ride = Ride.new
+ @user = current_user
+
+ end
+
+ def new
+ @attraction = Attraction.new
+ end
+
+ def create
+ attraction = Attraction.create(attraction_params)
+ redirect_to attraction_path(attraction)
+ end
+
+ def edit
+ @attraction = Attraction.find_by(id: params[:id])
+ @ride = Ride.create(user_id: current_user.id, attraction_id: @attraction.id)
+ end
+
+ def update
+ attraction = Attraction.find_by(id: params[:id])
+ attraction.update(attraction_params)
+ redirect_to attraction_path(attraction)
+ end
+
+ private
+ def attraction_params
+ params.require(:attraction).permit(
+ :name,
+ :min_height,
+ :tickets,
+ :happiness_rating,
+ :nausea_ratiing
+ )
+ end
+end
diff --git a/app/controllers/rides_controller.rb b/app/controllers/rides_controller.rb
new file mode 100644
index 0000000000..18cd7d46d1
--- /dev/null
+++ b/app/controllers/rides_controller.rb
@@ -0,0 +1,28 @@
+class RidesController < ApplicationController
+
+ def create
+ ride = Ride.new(ride_params)
+ if ride.take_ride == true
+ ride.save
+ notice = "Thanks for riding the #{ride.attraction.name}!"
+ redirect_to user_path(ride.user), notice: notice
+ else
+
+ notice = ride.take_ride
+ redirect_to user_path(ride.user), notice: notice
+ # raise params.inspect
+ end
+
+
+ end
+
+ private
+
+ def ride_params
+ params.require(:ride).permit(
+ :user_id,
+ :attraction_id
+ )
+ end
+
+end
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
new file mode 100644
index 0000000000..2681f9d828
--- /dev/null
+++ b/app/controllers/users_controller.rb
@@ -0,0 +1,70 @@
+class UsersController < ApplicationController
+ # skip_before_action :verified_user, only: [:new, :create]
+
+ def new
+ @user = User.new
+ end
+
+ def create
+ if (user = User.create(user_params))
+ session[:user_id] = user.id
+ redirect_to user_path(user)
+ else
+ render 'new'
+ end
+ end
+
+ def update
+ @user = User.find_by(id: params[:id])
+\
+ end
+
+
+
+
+ def signin
+ @users = User.all
+ end
+
+ def newsignin
+ #raise params.inspect
+ @user = User.find_by(name: params[:user][:name])
+ if @user == nil
+ redirect_to '/signin'
+ else
+ session[:user_id] = @user.id
+ redirect_to user_path(@user)
+ end
+ end
+
+
+ def signout
+ session.delete("user_id")
+ redirect_to root_path
+ end
+
+ def show
+ @user = User.find_by(id: params[:id])
+ if current_user != @user
+ redirect_to '/'
+ end
+
+ end
+
+ private
+
+ def user_params
+ params.require(:user).permit(
+ :name,
+ :height,
+ :nausea,
+ :tickets,
+ :admin,
+ :password,
+ :happiness
+ )
+ end
+
+
+
+end
\ No newline at end of file
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index de6be7945c..58763af6cb 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -1,2 +1,5 @@
module ApplicationHelper
+ def current_user
+ User.find_by(id: session[:user_id])
+ end
end
diff --git a/app/models/attraction.rb b/app/models/attraction.rb
index 474bd1e76c..0e7dd82af3 100644
--- a/app/models/attraction.rb
+++ b/app/models/attraction.rb
@@ -1,2 +1,4 @@
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..e0fe5b5cd3 100644
--- a/app/models/ride.rb
+++ b/app/models/ride.rb
@@ -1,2 +1,30 @@
class Ride < ActiveRecord::Base
+ belongs_to :user
+ belongs_to :attraction
+
+
+ def take_ride
+
+ ride_hash = {}
+
+ @user = self.user
+ @attraction = self.attraction
+ if @user.tickets < @attraction.tickets && @user.height < @attraction.min_height
+ "Sorry. You do not have enough tickets to ride the #{attraction.name}. You are not tall enough to ride the #{attraction.name}."
+ elsif @user.tickets < @attraction.tickets
+ "Sorry. You do not have enough tickets to ride the #{attraction.name}."
+ elsif @user.height < @attraction.min_height
+ "Sorry. You are not tall enough to ride the #{attraction.name}."
+ else #user takes ride
+ @user.update(tickets: @user.tickets -= @attraction.tickets)
+ @user.update(nausea: @user.nausea += @attraction.nausea_rating)
+ @user.update(happiness: @user.happiness += @attraction.happiness_rating)
+
+ return true
+
+ end
+ end
+
+
+
end
diff --git a/app/models/user.rb b/app/models/user.rb
index 4a57cf079b..61d101fa8d 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
+ nausea = self.nausea
+ happiness = self.happiness
+ if nausea != nil && happiness != nil
+ happiness > nausea ? "happy" : "sad"
+ end
+ end
end
diff --git a/app/views/application/home.html.erb b/app/views/application/home.html.erb
new file mode 100644
index 0000000000..447b8ca892
--- /dev/null
+++ b/app/views/application/home.html.erb
@@ -0,0 +1,4 @@
+ <% flash.each do |type, msg| %>
+ <%= msg %>
+
+ <% 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..14aecee95f
--- /dev/null
+++ b/app/views/attractions/edit.html.erb
@@ -0,0 +1,10 @@
+
+<%= form_for @attraction do |f| %>
+Name: <%= f.text_field :name %>
+Minimum Height: <%= f.number_field :min_height %>
+Happiness Rating: <%= f.number_field :happiness_rating %>
+Nausea Rating: <%= f.number_field :nausea_rating %>
+Tickets: <%= f.number_field :tickets %>
+
+<%= f.submit %>
+<% 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..00238a7615
--- /dev/null
+++ b/app/views/attractions/index.html.erb
@@ -0,0 +1,38 @@
+
+ | |||
---|---|---|---|
Name | +Tickets | +Details | +|
<%= attraction.name %> | +<%= attraction.tickets %> | + <% if current_user.admin %> +<%= link_to "Show #{attraction.name}", attraction_path(attraction) %> | + <% else %> +<%= link_to "Go on #{attraction.name}", attraction_path(attraction) %> | + <% end %> +
+ <%= link_to "Back to profile", user_path(@user) %> +
+<% else %> +<%= 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..14aecee95f --- /dev/null +++ b/app/views/attractions/new.html.erb @@ -0,0 +1,10 @@ + +<%= form_for @attraction do |f| %> +Name: <%= f.text_field :name %>