Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
2874f6b
rails initial setup
dtingg Nov 5, 2019
2497645
Generated customer and movie models
dtingg Nov 5, 2019
fa47ea5
Generate Customers and Movies controllers
dtingg Nov 5, 2019
e5e7435
Added validations for customer and movie; created test stubs for cust…
dtingg Nov 5, 2019
ff195f2
added validation test for customer and customer with no name
dtingg Nov 5, 2019
547053f
finished tests for customer model validation
dtingg Nov 5, 2019
b59354a
Added tests for movie model validations
dtingg Nov 5, 2019
572ac69
Generated rental model and set up relationships
dtingg Nov 5, 2019
cd5e4d5
added test for customer relationship to rental
dtingg Nov 5, 2019
09f97e1
added test for customer's relationship to movie
dtingg Nov 5, 2019
dbd8da6
added validation tests for rental model
dtingg Nov 5, 2019
ca4df2d
Created tests and customers#index method in customer controller
dtingg Nov 6, 2019
397abeb
added movie#index action and test
dtingg Nov 6, 2019
f1f513e
added movies_checked_out_count column to customer controller and test
dtingg Nov 6, 2019
e4d5a68
added application method for updating inventory
dtingg Nov 6, 2019
3f7ecdb
rearranged tests and fixed test for movie available inventory
dtingg Nov 6, 2019
bbd212b
fixed typos
dtingg Nov 6, 2019
fa886cc
added check response to test helper
dtingg Nov 6, 2019
fd761ef
created movie show and tests
dtingg Nov 6, 2019
2eedea0
Added create method for movies controller and tests
dtingg Nov 6, 2019
99a0cdb
changed find_available_inventory to model method
dtingg Nov 6, 2019
bbfcaae
added new routes for rentals
dtingg Nov 6, 2019
6c11f34
removed available inventory column
dtingg Nov 6, 2019
53445f8
created rentals controller, added checked_out date and due_date
dtingg Nov 6, 2019
bf6a855
stubbed out tests for rental check in and check out
dtingg Nov 7, 2019
a5de380
added test for check out movie to customer
dtingg Nov 7, 2019
f4ed25e
added rental test for bad customer and bad movie
dtingg Nov 7, 2019
b576e3d
finished tests for rental check out method
dtingg Nov 7, 2019
f5b67d3
Added default check_out dates and due_dates; defined change_movies_ch…
dtingg Nov 7, 2019
d83f3ae
Changed movies_checked_out_count from a column to a method in the ren…
dtingg Nov 7, 2019
1f94c57
Updated available_inventory method in the movie model
dtingg Nov 8, 2019
c85cb75
fixed movie available inventory method
dtingg Nov 8, 2019
01bfdf9
updated rental check_in test for bad customer id
dtingg Nov 8, 2019
0a734db
added tests for checking out movie with available inventory 0
dtingg Nov 8, 2019
8c86d76
fixed rentals controller check_out method
dtingg Nov 8, 2019
8cf23f2
all rake and postman tests passing
dtingg Nov 8, 2019
0c49f7a
Added rental controller edge case test and movie model edge tests
dtingg Nov 8, 2019
cfc475e
Added controller tests for when no parameters are given
dtingg Nov 8, 2019
7aa500d
fixed test for sort
dtingg Nov 9, 2019
fd7504b
added test for sort but not enough customers
dtingg Nov 9, 2019
c0de91c
added one more assertion to customers sort test
dtingg Nov 9, 2019
6ed1ddd
Added query parameters to customers#index to sort and paginate
dtingg Nov 9, 2019
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
23 changes: 23 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
#
# If you find yourself ignoring temporary files generated by your text editor
# or operating system, you probably want to add a global ignore instead:
# git config --global core.excludesfile '~/.gitignore_global'

# Ignore bundler config.
/.bundle

# Ignore all logfiles and tempfiles.
/log/*
/tmp/*
!/log/.keep
!/tmp/.keep

# Ignore uploaded files in development
/storage/*
!/storage/.keep

.byebug_history

# Ignore master key for decrypting credentials and more.
/config/master.key
1 change: 1 addition & 0 deletions .ruby-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
2.5.5
59 changes: 59 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.5.5'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.2.3'
# Use postgresql as the database for Active Record
gem 'pg', '>= 0.18', '< 2.0'
# Use Puma as the app server
gem 'puma', '~> 3.11'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
# gem 'jbuilder', '~> 2.5'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 4.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use ActiveStorage variant
# gem 'mini_magick', '~> 4.8'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

# Reduces boot times through caching; required in config/boot.rb
gem 'bootsnap', '>= 1.1.0', require: false

# Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible
# gem 'rack-cors'

group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end

group :development do
gem 'listen', '>= 3.0.5', '< 3.2'
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end


# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

group :development, :test do
gem 'pry-rails'
end

group :development do
gem 'debase', '>= 0.2.4.1'
gem 'ruby-debug-ide', '>= 0.7.0'
end

group :test do
gem 'minitest-rails'
gem 'minitest-reporters'
end
175 changes: 175 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
GEM
remote: https://rubygems.org/
specs:
actioncable (5.2.3)
actionpack (= 5.2.3)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
actionmailer (5.2.3)
actionpack (= 5.2.3)
actionview (= 5.2.3)
activejob (= 5.2.3)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
actionpack (5.2.3)
actionview (= 5.2.3)
activesupport (= 5.2.3)
rack (~> 2.0)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (5.2.3)
activesupport (= 5.2.3)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.3)
activejob (5.2.3)
activesupport (= 5.2.3)
globalid (>= 0.3.6)
activemodel (5.2.3)
activesupport (= 5.2.3)
activerecord (5.2.3)
activemodel (= 5.2.3)
activesupport (= 5.2.3)
arel (>= 9.0)
activestorage (5.2.3)
actionpack (= 5.2.3)
activerecord (= 5.2.3)
marcel (~> 0.3.1)
activesupport (5.2.3)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
tzinfo (~> 1.1)
ansi (1.5.0)
arel (9.0.0)
bootsnap (1.4.5)
msgpack (~> 1.0)
builder (3.2.3)
byebug (11.0.1)
coderay (1.1.2)
concurrent-ruby (1.1.5)
crass (1.0.5)
debase (0.2.4.1)
debase-ruby_core_source (>= 0.10.2)
debase-ruby_core_source (0.10.6)
erubi (1.9.0)
ffi (1.11.1)
globalid (0.4.2)
activesupport (>= 4.2.0)
i18n (1.7.0)
concurrent-ruby (~> 1.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.3.1)
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 (0.9.2)
mimemagic (0.3.3)
mini_mime (1.0.2)
mini_portile2 (2.4.0)
minitest (5.13.0)
minitest-rails (5.2.0)
minitest (~> 5.10)
railties (~> 5.2.0)
minitest-reporters (1.4.2)
ansi
builder
minitest (>= 5.0)
ruby-progressbar
msgpack (1.3.1)
nio4r (2.5.2)
nokogiri (1.10.5)
mini_portile2 (~> 2.4.0)
pg (1.1.4)
pry (0.12.2)
coderay (~> 1.1.0)
method_source (~> 0.9.0)
pry-rails (0.3.9)
pry (>= 0.10.4)
puma (3.12.1)
rack (2.0.7)
rack-test (1.1.0)
rack (>= 1.0, < 3)
rails (5.2.3)
actioncable (= 5.2.3)
actionmailer (= 5.2.3)
actionpack (= 5.2.3)
actionview (= 5.2.3)
activejob (= 5.2.3)
activemodel (= 5.2.3)
activerecord (= 5.2.3)
activestorage (= 5.2.3)
activesupport (= 5.2.3)
bundler (>= 1.3.0)
railties (= 5.2.3)
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.3)
actionpack (= 5.2.3)
activesupport (= 5.2.3)
method_source
rake (>= 0.8.7)
thor (>= 0.19.0, < 2.0)
rake (13.0.0)
rb-fsevent (0.10.3)
rb-inotify (0.10.0)
ffi (~> 1.0)
ruby-debug-ide (0.7.0)
rake (>= 0.8.1)
ruby-progressbar (1.10.1)
ruby_dep (1.5.0)
spring (2.1.0)
spring-watcher-listen (2.0.1)
listen (>= 2.7, < 4.0)
spring (>= 1.2, < 3.0)
sprockets (4.0.0)
concurrent-ruby (~> 1.0)
rack (> 1, < 3)
sprockets-rails (3.2.1)
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
thor (0.20.3)
thread_safe (0.3.6)
tzinfo (1.2.5)
thread_safe (~> 0.1)
websocket-driver (0.7.1)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.4)

PLATFORMS
ruby

DEPENDENCIES
bootsnap (>= 1.1.0)
byebug
debase (>= 0.2.4.1)
listen (>= 3.0.5, < 3.2)
minitest-rails
minitest-reporters
pg (>= 0.18, < 2.0)
pry-rails
puma (~> 3.11)
rails (~> 5.2.3)
ruby-debug-ide (>= 0.7.0)
spring
spring-watcher-listen (~> 2.0.0)
tzinfo-data

RUBY VERSION
ruby 2.5.5p157

BUNDLED WITH
2.0.2
9 changes: 9 additions & 0 deletions Guardfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
guard :minitest, autorun: false, spring: true do
watch(%r{^app/(.+).rb$}) { |m| "test/#{m[1]}_test.rb" }
watch(%r{^app/controllers/application_controller.rb$}) { 'test/controllers' }
watch(%r{^app/controllers/(.+)_controller.rb$}) { |m| "test/integration/#{m[1]}_test.rb" }
watch(%r{^app/views/(.+)_mailer/.+}) { |m| "test/mailers/#{m[1]}_mailer_test.rb" }
watch(%r{^lib/(.+).rb$}) { |m| "test/lib/#{m[1]}_test.rb" }
watch(%r{^test/.+_test.rb$})
watch(%r{^test/test_helper.rb$}) { 'test' }
end
6 changes: 6 additions & 0 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.

require_relative 'config/application'

Rails.application.load_tasks
4 changes: 4 additions & 0 deletions app/channels/application_cable/channel.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module ApplicationCable
class Channel < ActionCable::Channel::Base
end
end
4 changes: 4 additions & 0 deletions app/channels/application_cable/connection.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module ApplicationCable
class Connection < ActionCable::Connection::Base
end
end
2 changes: 2 additions & 0 deletions app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class ApplicationController < ActionController::API
end
Empty file added app/controllers/concerns/.keep
Empty file.
27 changes: 27 additions & 0 deletions app/controllers/customers_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
class CustomersController < ApplicationController
def index
customer_json = Customer.update_customer_json

if params[:sort] == "name" || params[:sort] == "postal_code" || params[:sort] == "registered_at"
customer_json = customer_json.sort_by { |hash| hash[params[:sort]] }
end

if params[:n] && params[:p] == nil
n = params[:n].to_i
customer_json = customer_json[0..n]
elsif params[:n] && params[:p]
n = params[:n].to_i
p = params[:p].to_i
starting = n * ( p - 1 )
ending = (n * p) - 1
customer_json = customer_json[starting..ending]
end

if !customer_json
render json: {"errors": { "customer": ["Not enough customers to reach this page"] } }, status: :bad_request
return
end

render json: customer_json, status: :ok
end
end
37 changes: 37 additions & 0 deletions app/controllers/movies_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
class MoviesController < ApplicationController
def index
movies = Movie.all
render json: movies.as_json(only: ["id", "release_date", "title"]), status: :ok
end

def show
movie = Movie.find_by(id: params[:id])

if movie
available_inventory = movie.available_inventory
render json: movie.as_json(only: ["title", "overview", "release_date", "inventory"]).merge(:available_inventory => available_inventory), status: :ok
return
else
render json: {"errors": { "movie": ["Movie not found"] } }, status: :not_found
return
end
end

def create
new_movie = Movie.new(movie_params)

if new_movie.save
render json: {id: new_movie.id}, status: :ok
return
else
render json: {"errors": new_movie.errors.messages }, status: :bad_request
return
end
end

private

def movie_params
params.permit(:title, :overview, :release_date, :inventory)
end
end
Loading