diff --git a/Gemfile b/Gemfile
index 4c9125f27f..8f93f52801 100644
--- a/Gemfile
+++ b/Gemfile
@@ -49,6 +49,7 @@ group :development, :test do
gem "database_cleaner"
gem "rspec-rails"
gem "rack_session_access"
+ gem "pry"
end
group :development do
diff --git a/Gemfile.lock b/Gemfile.lock
new file mode 100644
index 0000000000..1618cdd9d7
--- /dev/null
+++ b/Gemfile.lock
@@ -0,0 +1,247 @@
+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.0)
+ execjs (< 2.8.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)
+ coderay (1.1.3)
+ 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.8)
+ 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.7.0)
+ ffi (1.15.0)
+ 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.9.1)
+ 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)
+ mini_portile2 (2.5.1)
+ minitest (5.14.4)
+ msgpack (1.4.2)
+ nio4r (2.5.7)
+ nokogiri (1.11.3)
+ mini_portile2 (~> 2.5.0)
+ racc (~> 1.4)
+ pry (0.14.1)
+ coderay (~> 1.1)
+ method_source (~> 1.0)
+ 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.3)
+ websocket-extensions (>= 0.1.0)
+ websocket-extensions (0.1.5)
+ 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)
+ pry
+ 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/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/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..b7b513485c 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -1,3 +1,13 @@
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
+
+ def sign_in_user(user)
+ session[:user_id] = user.id
+ end
+
+ def current_user
+ if session[:user_id]
+ @current_user ||= User.find_by(id: session[:user_id])
+ end
+ end
end
diff --git a/app/controllers/attractions_controller.rb b/app/controllers/attractions_controller.rb
new file mode 100644
index 0000000000..163d2f3bc0
--- /dev/null
+++ b/app/controllers/attractions_controller.rb
@@ -0,0 +1,41 @@
+class AttractionsController < ApplicationController
+ def index
+ @attractions = Attraction.all
+ @user = current_user
+ end
+
+ def show
+ @attraction = Attraction.find(params[:id])
+ @user = current_user
+ end
+
+ def new
+ @attraction = Attraction.new
+ end
+
+ def create
+ @attraction = Attraction.new(attraction_params(:name, :min_height, :happiness_rating, :nausea_rating, :tickets))
+ if @attraction.valid?
+ @attraction.save
+ redirect_to attraction_path(@attraction)
+ else
+ render :new
+ end
+ end
+
+ def edit
+ @attraction = Attraction.find(params[:id])
+ end
+
+ def update
+ @attraction = Attraction.find(params[:id])
+ @attraction.update(attraction_params(:name, :min_height, :happiness_rating, :nausea_rating, :tickets))
+ redirect_to attraction_path(@attraction)
+ end
+
+ private
+
+ def attraction_params(*args)
+ params.require(:attraction).permit(*args)
+ end
+end
diff --git a/app/controllers/rides_controller.rb b/app/controllers/rides_controller.rb
new file mode 100644
index 0000000000..1bcea17d8e
--- /dev/null
+++ b/app/controllers/rides_controller.rb
@@ -0,0 +1,16 @@
+class RidesController < ApplicationController
+ def new
+ end
+
+ def create
+ @ride = Ride.new(user: current_user, attraction: Attraction.find(params[:attraction]))
+ if @ride.take_ride == true
+ @ride.save
+ notice = "Thanks for riding the #{@ride.attraction.name}!"
+ else
+ notice = @ride.take_ride
+ end
+
+ redirect_to user_path(current_user), notice: notice
+ end
+end
diff --git a/app/controllers/static_controller.rb b/app/controllers/static_controller.rb
new file mode 100644
index 0000000000..0672d0fe26
--- /dev/null
+++ b/app/controllers/static_controller.rb
@@ -0,0 +1,4 @@
+class StaticController < ApplicationController
+ def home
+ end
+end
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
new file mode 100644
index 0000000000..cca8596aff
--- /dev/null
+++ b/app/controllers/users_controller.rb
@@ -0,0 +1,52 @@
+class UsersController < ApplicationController
+
+ def new
+ @user = User.new
+ end
+
+ def create
+ @user = User.new(user_params(:name, :admin, :nausea, :happiness, :tickets, :height, :password))
+ if @user.valid?
+ @user.save
+ sign_in_user(@user)
+ redirect_to user_path(@user)
+ else
+ render :new
+ end
+ end
+
+ def show
+ require_signin
+ @user = User.find(params[:id])
+ end
+
+ def signin
+ @users = User.all
+ end
+
+ def create_signin
+ user_id = user_params(:name)[:name].to_i
+ if user_id == nil || user_params(:name).empty?
+ redirect_to '/signin'
+ else
+ @user = User.find(user_id)
+ sign_in_user(@user)
+ redirect_to user_path(@user)
+ end
+ end
+
+ def destroy
+ session.delete :user_id
+ redirect_to root_path
+ end
+
+ private
+
+ def user_params(*args)
+ params.require(:user).permit(*args)
+ end
+
+ def require_signin
+ redirect_to root_path unless session.include? :user_id
+ end
+end
diff --git a/app/helpers/attractions_helper.rb b/app/helpers/attractions_helper.rb
index b78ce7d30a..843136a925 100644
--- a/app/helpers/attractions_helper.rb
+++ b/app/helpers/attractions_helper.rb
@@ -1,2 +1,5 @@
module AttractionsHelper
+ def link_to_attraction(user, attraction)
+ user.admin ? "Show #{attraction.name}" : "Go on #{attraction.name}"
+ end
end
diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb
index 2310a240d7..d3a15551b5 100644
--- a/app/helpers/users_helper.rb
+++ b/app/helpers/users_helper.rb
@@ -1,2 +1,5 @@
module UsersHelper
+ def is_admin
+ "ADMIN" if @user.admin
+ end
end
diff --git a/app/models/attraction.rb b/app/models/attraction.rb
index 474bd1e76c..d6082341d0 100644
--- a/app/models/attraction.rb
+++ b/app/models/attraction.rb
@@ -1,2 +1,6 @@
class Attraction < ApplicationRecord
+ validates :name, presence: true
+
+ has_many :rides
+ has_many :users, through: :rides
end
diff --git a/app/models/ride.rb b/app/models/ride.rb
index 4d880172e1..e347c5c124 100644
--- a/app/models/ride.rb
+++ b/app/models/ride.rb
@@ -1,2 +1,20 @@
class Ride < ActiveRecord::Base
+ belongs_to :user
+ belongs_to :attraction
+
+ def take_ride
+ ride_hash = {}
+ 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..fd9e6b8587 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1,2 +1,15 @@
class User < ActiveRecord::Base
+ validates :name, presence: true
+
+ has_secure_password
+ has_many :rides
+ has_many :attractions, through: :rides
+
+ 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/attractions/_form.html.erb b/app/views/attractions/_form.html.erb
new file mode 100644
index 0000000000..6194df31b9
--- /dev/null
+++ b/app/views/attractions/_form.html.erb
@@ -0,0 +1,9 @@
+<%= 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 %>
diff --git a/app/views/attractions/edit.html.erb b/app/views/attractions/edit.html.erb
new file mode 100644
index 0000000000..2d3436368b
--- /dev/null
+++ b/app/views/attractions/edit.html.erb
@@ -0,0 +1 @@
+<%= render 'form' %>
diff --git a/app/views/attractions/index.html.erb b/app/views/attractions/index.html.erb
new file mode 100644
index 0000000000..018c483762
--- /dev/null
+++ b/app/views/attractions/index.html.erb
@@ -0,0 +1,10 @@
+
<%= link_to "Edit Attraction", edit_attraction_path(@attraction) %>
+<% else %> + <%= button_to "Go on this ride", rides_path, method: :post, params: {attraction: @attraction} %> +<% end %> diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index d5e06ee11b..390e2a25cc 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -21,7 +21,7 @@ diff --git a/app/views/static/home.html.erb b/app/views/static/home.html.erb new file mode 100644 index 0000000000..0cf3463d10 --- /dev/null +++ b/app/views/static/home.html.erb @@ -0,0 +1,4 @@ +<%= flash[:notice] %>
+