Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
4eda0b6
Created API
cassyarchibald Nov 5, 2018
9bc0e50
created models, associations and migrations
sheland Nov 5, 2018
c6ea706
Continued work on models
cassyarchibald Nov 5, 2018
f54994e
Added minitest to test helper
cassyarchibald Nov 5, 2018
cbeaf71
Merge branch 'master' into customer_model_validations
cassyarchibald Nov 5, 2018
dd12d30
Added presence validations
cassyarchibald Nov 5, 2018
5b2e468
added fixtures
sheland Nov 5, 2018
56fc238
Merge branch 'master' of https://github.com/cassyarchibald/VideoStoreAPI
sheland Nov 5, 2018
9812458
model-movie validations
sheland Nov 6, 2018
91628d8
Updated schema and relationships
cassyarchibald Nov 6, 2018
a060ad7
Fixed merge conflict
cassyarchibald Nov 6, 2018
12aa54e
Continued work on customer model tests
cassyarchibald Nov 6, 2018
7891c68
Generated empty controllers for movies, rentals, and customers
cassyarchibald Nov 6, 2018
561b08e
Added customer relationship tests
cassyarchibald Nov 6, 2018
3fc914a
Resolved merge conflict
cassyarchibald Nov 6, 2018
c7f17ef
Added relationship tests to rental
cassyarchibald Nov 6, 2018
76241c6
Continued work on rental model validation tests
cassyarchibald Nov 6, 2018
6594390
Added presence validation to rental
cassyarchibald Nov 6, 2018
dbd115f
Finished valid tests for rental model
cassyarchibald Nov 6, 2018
fcbd04c
Merge branch 'rental_model_tests'
cassyarchibald Nov 6, 2018
7b02ddf
movie model testing complete
sheland Nov 6, 2018
2c99dda
resolved merge conflict
sheland Nov 6, 2018
24d975e
began working on customer index
cassyarchibald Nov 6, 2018
2998c54
Created rabl view for customers
cassyarchibald Nov 6, 2018
51925b3
Added movie count to customer
cassyarchibald Nov 6, 2018
8a92722
Merge branch 'master' of https://github.com/cassyarchibald/VideoStoreAPI
cassyarchibald Nov 6, 2018
e1e53d6
Merge branch 'master' into get_customers
cassyarchibald Nov 6, 2018
ffecf9c
Completed test for customer index/ran smokescreen
cassyarchibald Nov 6, 2018
96a7626
completed movie show
cassyarchibald Nov 6, 2018
e9cfee3
Added methods from Shelan to prevent large conflicts
cassyarchibald Nov 6, 2018
d91fc6c
controller movies
sheland Nov 6, 2018
17ac444
resolved merge conflict
sheland Nov 6, 2018
5454c66
Added movie params, added available inventory to json for create
cassyarchibald Nov 7, 2018
202c86f
Continued work on checkout
cassyarchibald Nov 7, 2018
54477d1
Added set_registerd_at method to customer.rb
cassyarchibald Nov 7, 2018
d670e2e
Updated customer test for registered_at
cassyarchibald Nov 7, 2018
74473c6
Debugged tests that used fixtures
cassyarchibald Nov 7, 2018
ddaeabe
Worked on test fixtures
cassyarchibald Nov 7, 2018
0653f5c
controller testing movie
sheland Nov 7, 2018
228486b
resolved merge conflict
sheland Nov 7, 2018
317ab04
Fixed merge issues
cassyarchibald Nov 7, 2018
3605650
Revised test to use fixtures
cassyarchibald Nov 7, 2018
32741e4
Added tests/logic for reducing movie inventory and checking inventory
cassyarchibald Nov 7, 2018
11cbd98
controller testing movie
sheland Nov 7, 2018
333bc30
passed postman tests for movie controller
sheland Nov 7, 2018
3a4a0f8
Created helper method for number of checked out movies
cassyarchibald Nov 7, 2018
1c2b2da
Merge branch 'master' of https://github.com/cassyarchibald/VideoStoreAPI
sheland Nov 7, 2018
f497496
Continued work on setting the available inventory
cassyarchibald Nov 7, 2018
1fd1a33
Resolved merge conflict
cassyarchibald Nov 7, 2018
eec5c88
Continued work on testing available inventory
cassyarchibald Nov 7, 2018
78a7ef7
Continued debugging available inventory failure
cassyarchibald Nov 7, 2018
f965a47
Created methods to return the available inventory/count of movies che…
cassyarchibald Nov 8, 2018
7cfb761
Debugged issue with number of checked out movies method
cassyarchibald Nov 8, 2018
b1759fa
Debugged issue with movies_checked_out_count
cassyarchibald Nov 8, 2018
ee58aa4
testing controller
sheland Nov 8, 2018
dfc5a12
Merge branch 'master' of https://github.com/cassyarchibald/VideoStoreAPI
sheland Nov 8, 2018
fe3b313
Continued working on test. Added test in movie for available inventoy…
cassyarchibald Nov 8, 2018
e03b5f0
Removed customer movie count and available inventory columsn
cassyarchibald Nov 8, 2018
22741d5
Merge branch 'master' of https://github.com/cassyarchibald/VideoStoreAPI
sheland Nov 8, 2018
e9a3b71
Created tests for checkout date and due date
cassyarchibald Nov 8, 2018
d25538a
Merge branch 'master' of https://github.com/cassyarchibald/VideoStoreAPI
sheland Nov 8, 2018
274ca17
rental test model
sheland Nov 8, 2018
56c15fa
Continued work on rental test
cassyarchibald Nov 8, 2018
e6dbc9a
Merge branch 'master' of https://github.com/cassyarchibald/VideoStoreAPI
cassyarchibald Nov 8, 2018
4c2d4b7
rental custom testing
sheland Nov 8, 2018
b433d4a
Merge branch 'master' of https://github.com/cassyarchibald/VideoStoreAPI
sheland Nov 8, 2018
4dee887
Revised tests/methods for available movie and movies checkout out cou…
cassyarchibald Nov 9, 2018
f195ce3
Merge branch 'master' of https://github.com/cassyarchibald/VideoStoreAPI
cassyarchibald Nov 9, 2018
907e9f5
check-in method for rental created
sheland Nov 9, 2018
c2fef8c
Merge branch 'master' of https://github.com/cassyarchibald/VideoStoreAPI
sheland Nov 9, 2018
3427b43
Removed old comments
cassyarchibald Nov 9, 2018
4fde254
Removed old spaces
cassyarchibald Nov 9, 2018
a6ba0d7
resolved merge conflict
sheland Nov 9, 2018
2038ba7
Merge branch 'master' of https://github.com/cassyarchibald/VideoStoreAPI
sheland Nov 9, 2018
c836746
Passed smoke tests
cassyarchibald Nov 9, 2018
654ea7b
Merge branch 'master' of https://github.com/cassyarchibald/VideoStoreAPI
sheland Nov 9, 2018
a76203c
model testing movie
sheland Nov 9, 2018
4aa6a16
Changed some methods to private
cassyarchibald Nov 9, 2018
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 @@
ruby-2.5.1
56 changes: 56 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.5.1'

gem 'rabl'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.2.1'
# 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
172 changes: 172 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
GEM
remote: https://rubygems.org/
specs:
actioncable (5.2.1)
actionpack (= 5.2.1)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
actionmailer (5.2.1)
actionpack (= 5.2.1)
actionview (= 5.2.1)
activejob (= 5.2.1)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
actionpack (5.2.1)
actionview (= 5.2.1)
activesupport (= 5.2.1)
rack (~> 2.0)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (5.2.1)
activesupport (= 5.2.1)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.3)
activejob (5.2.1)
activesupport (= 5.2.1)
globalid (>= 0.3.6)
activemodel (5.2.1)
activesupport (= 5.2.1)
activerecord (5.2.1)
activemodel (= 5.2.1)
activesupport (= 5.2.1)
arel (>= 9.0)
activestorage (5.2.1)
actionpack (= 5.2.1)
activerecord (= 5.2.1)
marcel (~> 0.3.1)
activesupport (5.2.1)
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.3.2)
msgpack (~> 1.0)
builder (3.2.3)
byebug (10.0.2)
coderay (1.1.2)
concurrent-ruby (1.1.1)
crass (1.0.4)
erubi (1.7.1)
ffi (1.9.25)
globalid (0.4.1)
activesupport (>= 4.2.0)
i18n (1.1.1)
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.1)
mimemagic (0.3.2)
mini_mime (1.0.1)
mini_portile2 (2.3.0)
minitest (5.11.3)
minitest-rails (3.0.0)
minitest (~> 5.8)
railties (~> 5.0)
minitest-reporters (1.3.5)
ansi
builder
minitest (>= 5.0)
ruby-progressbar
msgpack (1.2.4)
nio4r (2.3.1)
nokogiri (1.8.5)
mini_portile2 (~> 2.3.0)
pg (1.1.3)
pry (0.12.0)
coderay (~> 1.1.0)
method_source (~> 0.9.0)
pry-rails (0.3.6)
pry (>= 0.10.4)
puma (3.12.0)
rabl (0.14.0)
activesupport (>= 2.3.14)
rack (2.0.5)
rack-test (1.1.0)
rack (>= 1.0, < 3)
rails (5.2.1)
actioncable (= 5.2.1)
actionmailer (= 5.2.1)
actionpack (= 5.2.1)
actionview (= 5.2.1)
activejob (= 5.2.1)
activemodel (= 5.2.1)
activerecord (= 5.2.1)
activestorage (= 5.2.1)
activesupport (= 5.2.1)
bundler (>= 1.3.0)
railties (= 5.2.1)
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.1)
actionpack (= 5.2.1)
activesupport (= 5.2.1)
method_source
rake (>= 0.8.7)
thor (>= 0.19.0, < 2.0)
rake (12.3.1)
rb-fsevent (0.10.3)
rb-inotify (0.9.10)
ffi (>= 0.5.0, < 2)
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.0)
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)
rabl
rails (~> 5.2.1)
spring
spring-watcher-listen (~> 2.0.0)
tzinfo-data

RUBY VERSION
ruby 2.5.1p57

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

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

if movie.nil?
render json: {ok: false, message: 'not found'},
status: :not_found
else
render json: {
title: movie.as_json(only: [:title])["title"],
overview: movie.as_json(only: [:overview])["overview"],
release_date: movie.as_json(only: [:release_date])["release_date"],
inventory: movie.as_json(only: [:inventory])["inventory"],
"available_inventory" => movie.available_inventory
}, status: :ok
end
end

def create
movie = Movie.new(movie_params)

if movie.save
render json: {
ok: true,
id: movie.as_json(only: [:id])["id"]
}, status: :ok

else
render json: {
ok: false,
message: movie.errors.messages
}, status: :bad_request
end
end

private

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

def checkout
rental = Rental.create(rental_params)
# If it's able to be saved,
# We'll have the created_at value we need
if rental.save
rental.set_checkout_values!
render json: {
ok: true,
rental: rental.as_json(only: [ :customer_id, :movie_id ] )
}, status: :ok
else
render json: {
ok: false,
message: rental.errors.messages
}, status: :bad_request
end
end

def checkin
movie_id = params[:rental][:movie_id]
customer_id = params[:rental][:customer_id]
rental = Rental.find_by(movie_id: movie_id, customer_id: customer_id)
if rental.check_in!

render json: {
ok: true,
rental: rental.as_json(only: [ :customer_id, :movie_id ] )
}, status: :ok

else
render json: {
ok: false,
message: rental.errors.messages
}, status: :bad_request
end
end

private

def rental_params
return params.require(:rental).permit(:movie_id, :customer_id, :checkout_date, :due_date, :checkin_date)
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