Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
ed6a390
intial rails app created
amythetester May 14, 2019
ea471d6
generated movie and customer models
tatsqui May 14, 2019
521eed1
routes added
amythetester May 14, 2019
b9c7bbd
merged conflicts
amythetester May 14, 2019
9d424f6
added some fixtures to movie
tatsqui May 14, 2019
742642b
added model validation tests for movie
tatsqui May 14, 2019
1bf1b08
validation tests added, but failing
amythetester May 14, 2019
c7b295a
added customer model validations and tests pass
amythetester May 14, 2019
4199ed6
added words to
tatsqui May 14, 2019
47ca5df
Merge pull request #1 from tatsqui/customer-model-tests
tatsqui May 14, 2019
3722815
added more tests to movie_test
tatsqui May 14, 2019
25de2a0
Merge pull request #2 from tatsqui/movie-model-test
amythetester May 14, 2019
88242d2
generated controller movies
tatsqui May 14, 2019
9abc444
customer controller tests written and CRUD action wrritten, one test …
amythetester May 14, 2019
60f1760
all controller tests passing
amythetester May 14, 2019
d187cf1
removed unrelated references
amythetester May 14, 2019
880fcd1
added basic tests to movies_controller_tests for index action
tatsqui May 14, 2019
f2f45c6
made movie params private
tatsqui May 14, 2019
b6d69ce
added params
amythetester May 14, 2019
fccb4ea
changed order
tatsqui May 14, 2019
64563f3
Merge pull request #3 from tatsqui/customer-controller
tatsqui May 14, 2019
cc1d0fb
Merge pull request #4 from tatsqui/movie-controller
amythetester May 14, 2019
1fd9fc9
Merge branch 'master' into movie-controller
tatsqui May 14, 2019
401070e
added id to render movies json
tatsqui May 14, 2019
904b277
updated for fields that only need to be returned
amythetester May 14, 2019
1e67b8a
add id to test line 35
tatsqui May 14, 2019
5276332
Merge pull request #5 from tatsqui/customer-controller-fix
tatsqui May 14, 2019
3ecdeed
added movies checked out count column with a default of 0
amythetester May 14, 2019
79a6fd3
added available_inventory to Movie
tatsqui May 14, 2019
6cbfd75
updated what is returned in JSON to include movie count
amythetester May 14, 2019
9c51322
adding available_inventory to test and controller
tatsqui May 14, 2019
b917b9c
Merge pull request #6 from tatsqui/adding-movies-checked-out
tatsqui May 14, 2019
1fc4889
wrote tests for movie#show
tatsqui May 14, 2019
227daf1
cleaned up show test
tatsqui May 14, 2019
0370a7d
changed id literal to variable
tatsqui May 14, 2019
5db714b
movie create tests and code
amythetester May 14, 2019
122c875
Merge branch 'master' into movie-controller
amythetester May 14, 2019
81af412
Merge pull request #7 from tatsqui/movie-controller
amythetester May 14, 2019
9006772
making sure to not lose info
amythetester May 14, 2019
90c153f
passing create action tests
amythetester May 14, 2019
96e5db0
remove ok false
amythetester May 14, 2019
692eed5
Merge pull request #8 from tatsqui/create-movie
tatsqui May 14, 2019
266eb41
migrate customer checkout
tatsqui May 14, 2019
d8d0f7c
Merge branch 'master' of github.com:tatsqui/VideoStoreAPI
tatsqui May 14, 2019
3321de9
fixed smoke tests, removed movie hash from params
amythetester May 15, 2019
a8b144b
simplified tests
amythetester May 15, 2019
98c7cd8
Merge pull request #9 from tatsqui/create-movie
tatsqui May 15, 2019
a6553a4
updated checkin route
amythetester May 15, 2019
fe30314
created rental model and controller
amythetester May 15, 2019
5bd92df
Merge pull request #10 from tatsqui/rentals-amy
tatsqui May 15, 2019
ef7ec44
Merge branch 'master' of github.com:tatsqui/VideoStoreAPI
tatsqui May 15, 2019
a754d29
removed movie key from test
amythetester May 15, 2019
07f1078
DRY up line 58
tatsqui May 15, 2019
fae4b5e
Merge branch 'master' of github.com:tatsqui/VideoStoreAPI
tatsqui May 15, 2019
9d8a1ea
fixed rental model test
amythetester May 15, 2019
fd094e1
test stubs for check out
tatsqui May 15, 2019
a8f6e3f
added rental_params
tatsqui May 15, 2019
72e8209
contoller test shells
amythetester May 15, 2019
fd41e71
merged conflict
amythetester May 15, 2019
c82c903
added checkout method stub
tatsqui May 15, 2019
8599a88
test001 green
tatsqui May 15, 2019
e1a3de5
wrote test for nominal failure case
tatsqui May 15, 2019
60ca72f
customer model method and test
amythetester May 15, 2019
6432e84
wrote tests for bad movie_id and customer_id
tatsqui May 15, 2019
5765bd5
negative test for custom method
amythetester May 15, 2019
d6111fb
checkin tests and code
amythetester May 16, 2019
c3ce7c5
passing controller edge case for checkin
amythetester May 16, 2019
03ab29b
all tests for checkin passing
amythetester May 16, 2019
6f89553
Merge pull request #11 from tatsqui/rentals-amy
tatsqui May 16, 2019
1a11ef0
working on edge success test for checking out on same day something i…
tatsqui May 16, 2019
98a8c88
all tests green
tatsqui May 16, 2019
6e2c452
added inventory check to controller tests for checkin
amythetester May 16, 2019
2a27520
added model custom method tests
tatsqui May 16, 2019
8fe4d81
Merge pull request #12 from tatsqui/rental-tq
amythetester May 16, 2019
81f51fd
Merge branch 'master' into rentals-amy
amythetester May 16, 2019
ecf2b37
Merge pull request #13 from tatsqui/rentals-amy
tatsqui May 16, 2019
03f7e61
cleaned up some controller tests
tatsqui May 16, 2019
8f24947
Merge branch 'master' into rental-tq
tatsqui May 16, 2019
379ef9d
Merge pull request #14 from tatsqui/rental-tq
amythetester May 16, 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 @@
ruby-2.5.1
54 changes: 54 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.5.1'

# 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 :test do
gem 'minitest-rails'
gem 'minitest-reporters'
end
169 changes: 169 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
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.4)
msgpack (~> 1.0)
builder (3.2.3)
byebug (11.0.1)
coderay (1.1.2)
concurrent-ruby (1.1.5)
crass (1.0.4)
erubi (1.8.0)
ffi (1.10.0)
globalid (0.4.2)
activesupport (>= 4.2.0)
i18n (1.6.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.2.3)
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.1)
mini_portile2 (2.4.0)
minitest (5.11.3)
minitest-rails (3.0.0)
minitest (~> 5.8)
railties (~> 5.0)
minitest-reporters (1.3.6)
ansi
builder
minitest (>= 5.0)
ruby-progressbar
msgpack (1.2.10)
nio4r (2.3.1)
nokogiri (1.10.3)
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.0.4)
loofah (~> 2.2, >= 2.2.2)
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 (12.3.2)
rb-fsevent (0.10.3)
rb-inotify (0.10.0)
ffi (~> 1.0)
ruby-progressbar (1.10.0)
ruby_dep (1.5.0)
spring (2.0.2)
activesupport (>= 4.2)
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)
thor (0.20.3)
thread_safe (0.3.6)
tzinfo (1.2.5)
thread_safe (~> 0.1)
websocket-driver (0.7.0)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.3)

PLATFORMS
ruby

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

RUBY VERSION
ruby 2.5.1p57

BUNDLED WITH
1.17.3
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.
13 changes: 13 additions & 0 deletions app/controllers/customers_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class CustomersController < ApplicationController
def index
customers = Customer.all
render json: customers.as_json(only: [:id, :name, :registered_at, :postal_code, :phone, :movies_checked_out_count]),
status: :ok
end

private

def customer_params
params.require(customer).permit(:name, :registered_at, :postal_code, :phone)
end
end
35 changes: 35 additions & 0 deletions app/controllers/movies_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
class MoviesController < ApplicationController
def index
movies = Movie.all
render json: movies.as_json(only: [:available_inventory, :id, :title, :inventory, :overview, :release_date]), status: :ok
end

def create
movie = Movie.new(movie_params)
movie.available_inventory = movie.inventory

if movie.save
render json: movie.as_json(only: [:id]),
status: :ok
else
render json: { errors: ["Movie could not be saved"] },

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No validation errors reported?

status: :bad_request
end
end

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

if movie
render json: movie.as_json(only: [:available_inventory, :id, :title, :inventory, :overview, :release_date]), status: :ok
else
render json: { errors: ["The movie with id #{params[:id]} could not be found"] }, status: :not_found
end
end

private

def movie_params
params.permit(:title, :inventory, :overview, :release_date)
end
end
42 changes: 42 additions & 0 deletions app/controllers/rentals_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
require 'pry'
class RentalsController < ApplicationController

def checkout
rental = Rental.new(rental_params)
movie = Movie.find_by(id: params[:movie_id])

rental.checkout_date = Date.today
rental.due_date = rental.checkout_date + 7

if movie && movie.reduce_avail_inventory
if rental.save
render json: rental.as_json(only: [:id, :movie_id, :customer_id, :due_date]),
status: :ok
else
render json: { errors: [rental.errors.messages] },
status: :bad_request
end
else
render json: { errors: ["Could not create rental request"] },
status: :bad_request
end
end

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

if movie.nil?
render json: { errors: ["The movie with id #{params[:id]} could not be found"] }, status: :not_found
elsif movie.increase_available_inventory
render json: movie.as_json(only: [:available_inventory]), status: :ok
else
render json: { errors: ["The movie with id #{params[:id]} already have full inventory"] }, status: :bad_request
end
end

private

def rental_params
params.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
3 changes: 3 additions & 0 deletions app/models/application_record.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end
Empty file added app/models/concerns/.keep
Empty file.
9 changes: 9 additions & 0 deletions app/models/customer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class Customer < ApplicationRecord

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No has_many?

validates :name, presence: true
validates :registered_at, presence: true
validates :address, presence: true
validates :city, presence: true
validates :state, presence: true
validates :postal_code, presence: true
validates :phone, presence: true
end
Loading