Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
1df2d57
initialize rails server
Guribot Nov 6, 2017
4309ebc
add movie and customer tables
tanham Nov 6, 2017
5e0bbb6
generate movies and customers controller
tanham Nov 6, 2017
60cffe6
basic model testing for customer
Guribot Nov 6, 2017
78005fd
Merge branch 'master' of https://github.com/Guribot/VideoStoreAPI
Guribot Nov 6, 2017
8c108d5
add index method
tanham Nov 6, 2017
bda3a0e
stub tests
tanham Nov 6, 2017
d313a66
Merge branch 'master' of https://github.com/Guribot/VideoStoreAPI
tanham Nov 6, 2017
ccfa0a2
add tests for index method
tanham Nov 6, 2017
2767a6b
add numericality test for account balance
Guribot Nov 6, 2017
417e428
basic model testing for movies
Guribot Nov 6, 2017
95d390d
add error message tests for customer model
Guribot Nov 6, 2017
295c12a
add error message tests for movies model
Guribot Nov 6, 2017
5a2e7b1
add validations for movies model
Guribot Nov 6, 2017
3c23cf8
Merge branch 'master' of https://github.com/Guribot/VideoStoreAPI
Guribot Nov 6, 2017
3de255f
add controller tests for customers
Guribot Nov 6, 2017
ba37720
add routes for movies, customers
Guribot Nov 6, 2017
28c9371
update movies#index
tanham Nov 6, 2017
dc5a081
fix typpo
tanham Nov 6, 2017
1157fc0
uncommented pride :)
Guribot Nov 6, 2017
de885e7
Merge branch 'master' of https://github.com/Guribot/VideoStoreAPI
Guribot Nov 6, 2017
72a9b2c
add customer#index method
tanham Nov 6, 2017
672f908
implement controller#show, fix fixtures
Guribot Nov 6, 2017
0649846
Merge branch 'master' of https://github.com/Guribot/VideoStoreAPI
tanham Nov 6, 2017
2d68d84
add tests for movie#create method
tanham Nov 6, 2017
4c710d6
add create method
tanham Nov 6, 2017
d3d9471
did something but not really
Guribot Nov 7, 2017
498170e
fix post requirements so that smoke test wont fail
Guribot Nov 7, 2017
a237761
add serializer and unbreak tests
tanham Nov 7, 2017
c7a31f7
add movies_checked_out_count to customers serializers
Guribot Nov 7, 2017
5e1f7bc
add routes, model, controller for rentals
Guribot Nov 7, 2017
235c1c6
model validations for rentals
Guribot Nov 7, 2017
13b4597
clarified test names for rental model
Guribot Nov 7, 2017
2bf5472
add status to rentals
tanham Nov 7, 2017
e8413b3
add status to rentals
tanham Nov 7, 2017
bfc0dc1
add status defalut test and functionality
tanham Nov 7, 2017
a587484
add aliases to routes
tanham Nov 7, 2017
a8685ce
add rentals#checkout functionality and tests
tanham Nov 7, 2017
b5dc8f3
implement checkin for rentals
Guribot Nov 7, 2017
13907a9
rental#checkin returns not found if rental DNE
Guribot Nov 7, 2017
688280e
add overdue functionality and test
tanham Nov 7, 2017
ce2cf77
fix tests to use 'reload'
Guribot Nov 7, 2017
33e2bb4
add available_inventory to movies table
tanham Nov 8, 2017
2b6d1af
Merge branch 'rentals' of https://github.com/Guribot/VideoStoreAPI in…
tanham Nov 8, 2017
b956587
add functionality to keep track of available inventory
tanham Nov 8, 2017
9f4cb34
add check out count to customers model
Guribot Nov 8, 2017
696f0d5
refactor defaults
Guribot Nov 8, 2017
6a8367d
add customer check_out count functionality to checkin and checkout, D…
Guribot Nov 8, 2017
b9196de
customer account balance defaults to 0
Guribot Nov 8, 2017
67f2a96
add test for update_checkin and checkout
tanham Nov 8, 2017
dfab1b2
test available_inventory for movies
Guribot Nov 8, 2017
a661a43
test checked_out_count for customers
Guribot Nov 8, 2017
9d02e94
Merge branch 'rentals' of https://github.com/Guribot/VideoStoreAPI in…
tanham Nov 8, 2017
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
16 changes: 16 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# 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

.byebug_history
58 changes: 58 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
source 'https://rubygems.org'

git_source(:github) do |repo_name|
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
"https://github.com/#{repo_name}.git"
end


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.1.4'
# Use postgresql as the database for Active Record
gem 'pg', '~> 0.18'
# Use Puma as the app server
gem 'puma', '~> 3.7'
# 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', '~> 3.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

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

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

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]

gem 'jquery-turbolinks'
gem 'foundation-rails', '6.4.1.2'
group :development, :test do
gem 'pry-rails'
end

group :development do
gem 'better_errors'
gem 'binding_of_caller'
end

group :test do
gem 'minitest-rails'
gem 'minitest-reporters'
end
194 changes: 194 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
GEM
remote: https://rubygems.org/
specs:
actioncable (5.1.4)
actionpack (= 5.1.4)
nio4r (~> 2.0)
websocket-driver (~> 0.6.1)
actionmailer (5.1.4)
actionpack (= 5.1.4)
actionview (= 5.1.4)
activejob (= 5.1.4)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
actionpack (5.1.4)
actionview (= 5.1.4)
activesupport (= 5.1.4)
rack (~> 2.0)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (5.1.4)
activesupport (= 5.1.4)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.3)
active_model_serializers (0.10.6)
actionpack (>= 4.1, < 6)
activemodel (>= 4.1, < 6)
case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.2)
activejob (5.1.4)
activesupport (= 5.1.4)
globalid (>= 0.3.6)
activemodel (5.1.4)
activesupport (= 5.1.4)
activerecord (5.1.4)
activemodel (= 5.1.4)
activesupport (= 5.1.4)
arel (~> 8.0)
activesupport (5.1.4)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (~> 0.7)
minitest (~> 5.1)
tzinfo (~> 1.1)
ansi (1.5.0)
arel (8.0.0)
babel-source (5.8.35)
babel-transpiler (0.7.0)
babel-source (>= 4.0, < 6)
execjs (~> 2.0)
better_errors (2.4.0)
coderay (>= 1.0.0)
erubi (>= 1.0.0)
rack (>= 0.9.0)
binding_of_caller (0.7.3)
debug_inspector (>= 0.0.1)
builder (3.2.3)
byebug (9.1.0)
case_transform (0.2)
activesupport
coderay (1.1.2)
concurrent-ruby (1.0.5)
crass (1.0.2)
debug_inspector (0.0.3)
erubi (1.7.0)
execjs (2.7.0)
ffi (1.9.18)
foundation-rails (6.4.1.2)
railties (>= 3.1.0)
sass (>= 3.3.0, < 3.5)
sprockets-es6 (>= 0.9.0)
globalid (0.4.1)
activesupport (>= 4.2.0)
i18n (0.9.1)
concurrent-ruby (~> 1.0)
jquery-turbolinks (2.1.0)
railties (>= 3.1.0)
turbolinks
jsonapi-renderer (0.1.3)
listen (3.1.5)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
ruby_dep (~> 1.2)
loofah (2.1.1)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mail (2.7.0)
mini_mime (>= 0.1.1)
method_source (0.9.0)
mini_mime (0.1.4)
mini_portile2 (2.3.0)
minitest (5.10.3)
minitest-rails (3.0.0)
minitest (~> 5.8)
railties (~> 5.0)
minitest-reporters (1.1.18)
ansi
builder
minitest (>= 5.0)
ruby-progressbar
nio4r (2.1.0)
nokogiri (1.8.1)
mini_portile2 (~> 2.3.0)
pg (0.21.0)
pry (0.11.2)
coderay (~> 1.1.0)
method_source (~> 0.9.0)
pry-rails (0.3.6)
pry (>= 0.10.4)
puma (3.10.0)
rack (2.0.3)
rack-test (0.7.0)
rack (>= 1.0, < 3)
rails (5.1.4)
actioncable (= 5.1.4)
actionmailer (= 5.1.4)
actionpack (= 5.1.4)
actionview (= 5.1.4)
activejob (= 5.1.4)
activemodel (= 5.1.4)
activerecord (= 5.1.4)
activesupport (= 5.1.4)
bundler (>= 1.3.0)
railties (= 5.1.4)
sprockets-rails (>= 2.0.0)
rails-dom-testing (2.0.3)
activesupport (>= 4.2.0)
nokogiri (>= 1.6)
rails-html-sanitizer (1.0.3)
loofah (~> 2.0)
railties (5.1.4)
actionpack (= 5.1.4)
activesupport (= 5.1.4)
method_source
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
rake (12.2.1)
rb-fsevent (0.10.2)
rb-inotify (0.9.10)
ffi (>= 0.5.0, < 2)
ruby-progressbar (1.9.0)
ruby_dep (1.5.0)
sass (3.4.25)
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.1)
concurrent-ruby (~> 1.0)
rack (> 1, < 3)
sprockets-es6 (0.9.2)
babel-source (>= 5.8.11)
babel-transpiler
sprockets (>= 3.0.0)
sprockets-rails (3.2.1)
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
thor (0.20.0)
thread_safe (0.3.6)
turbolinks (5.0.1)
turbolinks-source (~> 5)
turbolinks-source (5.0.3)
tzinfo (1.2.4)
thread_safe (~> 0.1)
websocket-driver (0.6.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.2)

PLATFORMS
ruby

DEPENDENCIES
active_model_serializers
better_errors
binding_of_caller
byebug
foundation-rails (= 6.4.1.2)
jquery-turbolinks
listen (>= 3.0.5, < 3.2)
minitest-rails
minitest-reporters
pg (~> 0.18)
pry-rails
puma (~> 3.7)
rails (~> 5.1.4)
spring
spring-watcher-listen (~> 2.0.0)
tzinfo-data

BUNDLED WITH
1.16.0.pre.3
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.
6 changes: 6 additions & 0 deletions app/controllers/customers_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class CustomersController < ApplicationController
def index
customers = Customer.all
render json: customers
end
end
29 changes: 29 additions & 0 deletions app/controllers/movies_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
class MoviesController < ApplicationController
def index
movies = Movie.all
render json: movies.as_json(only: [:id, :title, :overview, :inventory, :release_date], :methods => [:available_inventory])
end

def show
movie = Movie.find_by(id: params[:id])
if movie
render json: movie
else
render json: { nothing: true }, status: :not_found
end
end

def create
movie = Movie.new(movie_params)
if movie.save
render json: {id: movie.id}
else
render json: {errors: movie.errors.messages}, status: :bad_request
end
end

private
def movie_params
params.permit(:title, :overview, :inventory, :release_date)
end
end
54 changes: 54 additions & 0 deletions app/controllers/rentals_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
class RentalsController < ApplicationController
def checkout
@rental = Rental.new(rental_params)
if @rental.save
update_checkout
render json: {id: @rental.id}
else
render json: {errors: @rental.errors.messages}, status: :bad_request
end
end

def checkin
@rental = Rental.find_by(movie_id: params[:movie_id], customer_id: params[:customer_id])
if @rental
if @rental.status == 'checked_out'
@rental.status = 'returned'
@rental.save

update_checkin

render json: {status: @rental.status}
else
render json: {:errors => {"rental" => "is already checked in"}}, status: :bad_request
end
else
render json: {nothing: true}, status: :not_found
end
end

def overdue
render json: Rental.overdue.as_json
end

private
def rental_params
params.permit(:movie_id, :customer_id, :due_date)
end

def update_checkout
movie, customer = @rental.movie, @rental.customer
movie.available_inventory -= 1
movie.save
customer.movies_checked_out_count += 1
customer.save
end

def update_checkin
movie, customer = @rental.movie, @rental.customer
movie.available_inventory += 1
movie.save
customer.movies_checked_out_count -= 1
customer.save
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: '[email protected]'
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.
Loading