Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
9b7f5a8
generated rails new
krismosk Nov 5, 2019
e19350f
generated movie model with validations
krismosk Nov 5, 2019
4110c9c
created customers model
krismosk Nov 5, 2019
506c6a2
generated rental model
krismosk Nov 5, 2019
00d2f91
seeded and migrated database
krismosk Nov 5, 2019
28f3434
added minitest stuff to test_helper
krismosk Nov 5, 2019
274360b
working on movie model test
krismosk Nov 5, 2019
8040b47
remove validation for customer model, registered_at
krismosk Nov 5, 2019
9499ca8
created customer fixture
ashassan Nov 5, 2019
c6eef56
added migrations to tie rentals with movies and customers
krismosk Nov 5, 2019
cd370a5
all movie model tests passing
krismosk Nov 5, 2019
161aadd
added customer tests and movie fixture
ashassan Nov 5, 2019
3c0bb63
rental test in progress
krismosk Nov 5, 2019
7707c87
Merge branch 'am/wave-1' of https://github.com/krismosk/video-store-a…
krismosk Nov 5, 2019
57b8cea
finished customer tests
ashassan Nov 5, 2019
96dd486
passed all rental model tests
krismosk Nov 5, 2019
8608a56
Merge branch 'am/wave-1' of https://github.com/krismosk/video-store-a…
krismosk Nov 5, 2019
35456f9
fixed movie test
ashassan Nov 5, 2019
b7c8e7e
Merge branch 'am/wave-1' of https://github.com/krismosk/video-store-a…
krismosk Nov 5, 2019
18c3288
created index for customer controller
krismosk Nov 6, 2019
c03e3d7
added a new migration to set the default movie_checked_out_count for …
krismosk Nov 6, 2019
8e75f11
customer index nominal tests passing
krismosk Nov 6, 2019
f59618a
customers index tests all passing
krismosk Nov 6, 2019
8f17da2
added movie controllers
ashassan Nov 6, 2019
59695c2
Merge branch 'am/wave-2' of https://github.com/krismosk/video-store-a…
krismosk Nov 6, 2019
a4dadbe
show nominal test passing for movies, added necessary routes
krismosk Nov 6, 2019
dc9f31d
passing nominal test case for movie response body for show action
krismosk Nov 6, 2019
3673a98
generated migration to add a column available_inventory to movies table
krismosk Nov 6, 2019
088968e
created route for create movie action
krismosk Nov 6, 2019
9aa234f
created and passed all tests for movies create action
krismosk Nov 6, 2019
54f2dad
rails generate rentals controller
krismosk Nov 6, 2019
a5baf5a
add custom route for POST rentals/checkout
krismosk Nov 6, 2019
36720d5
passing test to create one rental
krismosk Nov 6, 2019
3b17e7c
passing edge case for failing to create a new rental with incorrect a…
krismosk Nov 6, 2019
7389cdb
changed the response code for a newly created movie or rental from :c…
krismosk Nov 6, 2019
95e4d4c
scaffold out rental custom method tests
krismosk Nov 6, 2019
82ab985
added route for movie index and tests
ashassan Nov 6, 2019
f9664b8
merged branches with amal
krismosk Nov 6, 2019
1c41778
wip
krismosk Nov 6, 2019
5fe4c02
implemented check_inventory method in movie model and passed correspo…
krismosk Nov 6, 2019
2af6a21
wrote rentals controller test to confirm rental can't be made if movi…
krismosk Nov 6, 2019
ec5bd02
created a checkout_movie method in rental model that reduces movie in…
krismosk Nov 6, 2019
720e731
remove validation for movie release date and overview
krismosk Nov 7, 2019
0c65a9a
wave 3 still in progress, commiting some additional changes to rental…
krismosk Nov 7, 2019
f0dc73d
movie rental due date and checkout date methods to the rental model
krismosk Nov 7, 2019
5540575
create checkin_movie method
krismosk Nov 7, 2019
7531010
checkin_movie test passing
krismosk Nov 7, 2019
d0b6558
create checkin custom controller action in rentals controller. still …
krismosk Nov 7, 2019
b39ba4e
added back the params.require(:movie) for create movie action because…
krismosk Nov 7, 2019
60dad4a
fixed failing tests for rentals
krismosk Nov 7, 2019
e682412
passing success status and return of a rental id after rental checkin
krismosk Nov 7, 2019
f75807d
passing nominal and edge case for checkin rental
krismosk Nov 7, 2019
5b120e0
all tests passing, wave 3 complete
krismosk Nov 7, 2019
9917418
finished checkout_movie test
krismosk Nov 8, 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
25 changes: 25 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# 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

.vscode/settings.json
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.
10 changes: 10 additions & 0 deletions app/controllers/customers_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
class CustomersController < ApplicationController
CUSTOMER_FIELDS = ["id", "name", "registered_at", "postal_code", "phone", "movies_checked_out_count"]

def index
customers = Customer.all.as_json(only: CUSTOMER_FIELDS)
render json: customers, status: :ok
end


end
44 changes: 44 additions & 0 deletions app/controllers/movies_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
class MoviesController < ApplicationController
MOVIE_INDEX_FIELDS = ["id", "title", "release_date"]
MOVIE_SHOW_FIELDS = ["title", "overview", "release_date", "inventory", "available_inventory"]

def index
movies = Movie.all.as_json(only: MOVIE_INDEX_FIELDS)
render json: movies, status: :ok
end

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

if movie
found_movie = movie.as_json(only: MOVIE_SHOW_FIELDS)
render json: found_movie, status: :ok
return
else
render json: {"errors" => "not_found"}, status: :not_found
return
end
end

def create
movie = Movie.new(movie_params)
if movie.save
render json: movie.as_json(only: [:id]), status: :ok
return
else
render json: {
ok: false,
errors: movie.errors.messages
}, status: :bad_request
return
end
end

private

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


end
38 changes: 38 additions & 0 deletions app/controllers/rentals_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
class RentalsController < ApplicationController
def checkout
rental = Rental.new(rental_params)
rental.checkout_date = Time.now
rental.due_date = Time.now + 7

if rental.save
rental.checkout_movie
render json: rental.as_json(only: [:id]), status: :ok
return
else
render json: {
ok: false,
errors: rental.errors.messages
}, status: :bad_request
return
end
end

def checkin
rental = Rental.find_by(id: params[:id])
if rental
rental.checkin_movie
found_rental = rental.as_json(only: [:id])
render json: found_rental, status: :ok
return
else
render json: {"errors" => ["not found"]}, status: :not_found
end
end

private

def rental_params
params.require(:rental).permit(:movie_id, :customer_id)
end

end
2 changes: 2 additions & 0 deletions app/jobs/application_job.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class ApplicationJob < ActiveJob::Base
end
4 changes: 4 additions & 0 deletions app/mailers/application_mailer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
class ApplicationMailer < ActionMailer::Base
default from: 'from@example.com'
layout 'mailer'
end
Loading