Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
fa1cdc4
baseline complete
brilatimer Nov 5, 2019
cc6e5e3
Created customer, movie, rental models and ran seeds and set up relat…
mfunkemomo Nov 5, 2019
70fcdca
created customer yml, ran relation tests for customer
brilatimer Nov 5, 2019
1ca6fd9
updated relations tests
mfunkemomo Nov 6, 2019
28d0a9a
validations added to customers, tests written, working through errors
brilatimer Nov 6, 2019
61d11af
all tests passing
brilatimer Nov 6, 2019
2b56695
wrote all tests for validations. A few not passing
mfunkemomo Nov 6, 2019
991c8ba
created rental yml, rental validation and relations tests written, so…
brilatimer Nov 6, 2019
9fb4f55
test troubleshooting for rental
brilatimer Nov 6, 2019
6c9518f
properly merged
brilatimer Nov 6, 2019
2bee234
Merge pull request #1 from mfunkemomo/bl/validations-customers
mfunkemomo Nov 6, 2019
a0681bb
Merge branch 'master' into mk/movie_validations
mfunkemomo Nov 6, 2019
641234c
Took out format and numerical validations
mfunkemomo Nov 6, 2019
ae7d6f5
Merge pull request #2 from mfunkemomo/mk/movie_validations
brilatimer Nov 6, 2019
32c3e03
Added index action and tests
mfunkemomo Nov 6, 2019
8418d8b
Added test to index for returning nothing when there are no customers
mfunkemomo Nov 6, 2019
a75156a
Merge pull request #3 from mfunkemomo/mk/customers-index
brilatimer Nov 6, 2019
8770f8b
Added tests for movie index
mfunkemomo Nov 6, 2019
624c7e7
fixed movie fields order
mfunkemomo Nov 7, 2019
a03f39e
Removed excess movie fixtures and updated movie model tests
mfunkemomo Nov 7, 2019
ae60801
Added bad request test for create, one test not working, commented th…
mfunkemomo Nov 7, 2019
115c130
Began writing checkout action
mfunkemomo Nov 7, 2019
451e066
added create line to checkout
mfunkemomo Nov 7, 2019
bd66402
Merge pull request #4 from mfunkemomo/mk/movies-index
brilatimer Nov 7, 2019
f3fb55a
Merge branch 'master' into mk/movies-create
mfunkemomo Nov 7, 2019
55b7967
added movie show method and tests, working through errors
brilatimer Nov 7, 2019
a45e700
passed create post test
mfunkemomo Nov 7, 2019
529bb9f
All tests for create pass
mfunkemomo Nov 7, 2019
11f757e
Merge branch 'master' into mk/rentals-checkout
mfunkemomo Nov 7, 2019
3669f49
Merge pull request #5 from mfunkemomo/mk/movies-create
brilatimer Nov 7, 2019
52ef30c
working through errors
brilatimer Nov 7, 2019
7562222
accepted conflicts
mfunkemomo Nov 7, 2019
9e3ff14
resolved merge conflicts
brilatimer Nov 7, 2019
5f8d769
tests passing for movie show
brilatimer Nov 7, 2019
cb71b43
migration added checkin, checkout, duedate for rentals
brilatimer Nov 7, 2019
8698c20
added available inventory column via migration to movies
brilatimer Nov 7, 2019
b7e5ffa
pulled in migrations
mfunkemomo Nov 8, 2019
78559ed
Merge branch 'master' into mk/rentals-checkout
mfunkemomo Nov 8, 2019
d0f54c9
made changes to chckout
mfunkemomo Nov 8, 2019
61b8ae8
Merge pull request #6 from mfunkemomo/bl/movie-show
mfunkemomo Nov 8, 2019
26b0a79
Merge branch 'master' of https://github.com/mfunkemomo/video-store-api
mfunkemomo Nov 8, 2019
84ab5df
Merge branch 'master' into mk/rentals-checkout
mfunkemomo Nov 8, 2019
eed1f51
checkout test no longer errors but is failing
mfunkemomo Nov 8, 2019
5b1e316
Made first test for checkotu pass
mfunkemomo Nov 8, 2019
9abbb1a
removed validations for created at and updated at
mfunkemomo Nov 8, 2019
1459467
added tests for checking json and checkout and due date. Added one fo…
mfunkemomo Nov 8, 2019
48c0786
added test for bad request
mfunkemomo Nov 8, 2019
040f48e
added save lines to new_rental and rental.movie
mfunkemomo Nov 8, 2019
13fd89b
adjusted seeds to show seeds were made
mfunkemomo Nov 8, 2019
85d9cef
added movie fixture with inventory of 0 and added test on available_i…
mfunkemomo Nov 8, 2019
3964b54
Merge pull request #7 from mfunkemomo/mk/smoke-test
brilatimer Nov 8, 2019
d878a92
Merge pull request #8 from mfunkemomo/mk/rentals-checkout
brilatimer Nov 8, 2019
89bea1c
checkin started
brilatimer Nov 8, 2019
4c922c4
tests passing for checkin
brilatimer Nov 8, 2019
116ef4f
test written for if rental is not found
brilatimer Nov 8, 2019
c744c77
final test is still failing but we tried
brilatimer Nov 8, 2019
08f1b05
Merge pull request #9 from mfunkemomo/bl/check-in
brilatimer 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
Binary file added .DS_Store
Binary file not shown.
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
60 changes: 60 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
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]
gem 'pry-byebug'
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
179 changes: 179 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
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-byebug (3.7.0)
byebug (~> 11.0)
pry (~> 0.10)
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-byebug
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', 'phone', 'postal_code', 'registered_at']

def index
customers = Customer.all
# binding.pry
render json: customers.as_json(only: CUSTOMER_FIELDS), status: :ok
end
end
39 changes: 39 additions & 0 deletions app/controllers/movies_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
class MoviesController < ApplicationController

MOVIE_FIELDS = ['id','inventory','overview','release_date','title']

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

def show
movie = Movie.find_by(id: params[:id])
if movie
render json: movie.as_json(only: MOVIE_FIELDS), status: :ok
return
else
render json: {ok: false, errors: ["Not found"]}, status: :not_found
return
end
end

def create
new_movie = Movie.new(movie_params)

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

private

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

50 changes: 50 additions & 0 deletions app/controllers/rentals_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
class RentalsController < ApplicationController
def checkout
movie = Movie.find_by(id: rental_params[:movie_id])
customer = Customer.find_by(id: rental_params[:customer_id])

if movie.available_inventory != 0
new_rental = Rental.new(rental_params)
new_rental.check_out = Time.now
new_rental.due_date = new_rental.check_out + (7*24*60*60)

new_rental.movie.available_inventory -= 1
else
render json: {ok: false, errors: "available inventory is 0"}, status: :bad_request
return
end

if new_rental.save && new_rental.movie.save
render json: new_rental.as_json(only: [:customer_id, :movie_id]), status: :created
return
else
render json: {ok: false, errors: new_rental.errors.messages}, status: :bad_request
return
end
end

def checkin
found_rental = Rental.find_by(id: params[:id])
if found_rental.nil?
render json: {ok: false, errors: "Not found"}, status: :not_found
return
end

found_rental.check_in = Time.now
found_rental.movie.available_inventory += 1

if found_rental.save && found_rental.movie.save
render json: found_rental.as_json(only: [:check_in]), status: :ok
return
else
render json: {ok: false, errors: found_rental.errors.messages}, status: :bad_request
return
end

end

private
def rental_params
params.permit(:customer_id, :movie_id, :checkout, :check_in, :check_out, :due_date)
end
end
Loading