Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
9147dd0
initial setup
elle-terch Nov 5, 2018
5534cf9
updated schema with fields for movie and customer
elle-terch Nov 5, 2018
1a194d6
added new table for rentals and added associations between models
elle-terch Nov 5, 2018
4e817f2
added columns to rentals table
elle-terch Nov 5, 2018
ae274d2
added validations to models
elle-terch Nov 5, 2018
717eedd
added validation testing for movies
elle-terch Nov 5, 2018
543921b
added validation testing for customers
elle-terch Nov 5, 2018
117dd32
added validation tests
elle-terch Nov 6, 2018
b758910
added routes
elle-terch Nov 6, 2018
a31a6cf
created customers and movies controller
elle-terch Nov 6, 2018
e129c05
added index action for customers controller
elle-terch Nov 6, 2018
02ac7d7
added index and create actions for movies controller
elle-terch Nov 6, 2018
ffb5f3f
added movies_checked_out_column to movies table
elle-terch Nov 6, 2018
62d4c4e
Merge branch 'lt_work' into wave_two
elle-terch Nov 6, 2018
0c07515
changed db to add movies_checked_out column to customers
elle-terch Nov 6, 2018
3f0e007
updated show route for movie
elle-terch Nov 6, 2018
21e3bda
error handling in the Application controller.
CarlyReiter Nov 6, 2018
eed76bd
jsonify of customers is working.
CarlyReiter Nov 6, 2018
5bf4276
jsonify movies.
CarlyReiter Nov 6, 2018
e976d1d
added error handling to movie create
elle-terch Nov 6, 2018
0f6d050
handled errors, added show method and added jsonify to movies controller
elle-terch Nov 6, 2018
4001d46
fixed movies controller
elle-terch Nov 6, 2018
03e55ec
added rental controller & routes
elle-terch Nov 6, 2018
fdc79cc
added default checkout date to today
elle-terch Nov 6, 2018
44a22cf
created index and show action for rentals
elle-terch Nov 6, 2018
ac4d951
added checkout method and strong params
elle-terch Nov 7, 2018
56602ca
created simple yml files and basic relation testing for models.
CarlyReiter Nov 7, 2018
bf60613
relations testing for customer.
CarlyReiter Nov 7, 2018
485174e
basic model relations testing.
CarlyReiter Nov 7, 2018
f316d0f
fixed index for movies
elle-terch Nov 7, 2018
ab86f7e
Merge branch 'master' of https://github.com/elle-terch/VideoStoreAPI
CarlyReiter Nov 7, 2018
fd0d545
added error handling to movies show
elle-terch Nov 7, 2018
5e2b8a8
added rental routes
elle-terch Nov 7, 2018
8eb417d
reconfigured rental model testing to take in movie and customer.
CarlyReiter Nov 7, 2018
f8a3e38
created movies and customers controller testing files.
CarlyReiter Nov 7, 2018
f4524bf
added error handling for rental show method
elle-terch Nov 7, 2018
3bb693c
Created customer controller tests.
CarlyReiter Nov 7, 2018
2c26d34
added error handling for checkout method
elle-terch Nov 7, 2018
bb6e4f4
completed movies controller testing.
CarlyReiter Nov 7, 2018
851c6c7
updated checkout method in rentals controller
elle-terch Nov 7, 2018
f187a9a
Merge branch 'master' of https://github.com/elle-terch/VideoStoreAPI
elle-terch Nov 7, 2018
777a581
updated index and show tests for Rentals, and began checkout.
CarlyReiter Nov 7, 2018
b769df6
added checkin method for rentals
elle-terch Nov 7, 2018
c1a2ee7
merge with master
elle-terch Nov 7, 2018
4ae022e
merge conflict resolved. hopefully.
CarlyReiter Nov 7, 2018
c73b8af
created test for making a rental with invalid data
elle-terch Nov 7, 2018
9c1f466
added negative test to rental checkin
CarlyReiter Nov 7, 2018
d56e8d1
Merge branch 'master' of https://github.com/elle-terch/VideoStoreAPI
CarlyReiter Nov 7, 2018
7b05b3d
change to the checkout controller test.
CarlyReiter Nov 7, 2018
1ce33b8
fixed one rentals controller test.
CarlyReiter Nov 9, 2018
90e3b7a
updated rental yml files with checkout date.
CarlyReiter Nov 9, 2018
bb00a63
added 200 status for rental checkout
elle-terch Nov 9, 2018
0b8db75
updated migration with default available inventory
elle-terch Nov 9, 2018
13eeded
added status codes to final two methods
elle-terch Nov 9, 2018
2c7175b
Merge branch 'master' of https://github.com/elle-terch/VideoStoreAPI
elle-terch Nov 9, 2018
d45b016
removed unnecessary comments in code
elle-terch 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
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.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
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.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)
rack (2.0.6)
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)
rails (~> 5.2.1)
spring
spring-watcher-listen (~> 2.0.0)
tzinfo-data

RUBY VERSION
ruby 2.5.1p57

BUNDLED WITH
1.16.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.
17 changes: 17 additions & 0 deletions app/controllers/customers_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
class CustomersController < ApplicationController

def index
customers = Customer.all
render json: jsonify(customers)
end



private

def jsonify(customer_data)
return customer_data.as_json( only: [:id, :name, :registered_at, :postal_code, :phone, :movies_checked_out_count])
end


end
40 changes: 40 additions & 0 deletions app/controllers/movies_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
class MoviesController < ApplicationController

def index
movies = Movie.all

render json: movies.as_json( only: [:id, :title, :release_date ])

end

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

def show
movie_id = params[:id]
movie = Movie.find_by(id: movie_id)
if movie
render json: jsonify(movie)
else
render json: { errors: { movie_id: ["No such movie"] } }, status: :not_found
end
end


private

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

Choose a reason for hiding this comment

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

In Rails when we used forms, params would come back populated with a nested structure that had movie in it. In this API, we won't have that nested structure, so we need to take out the .require('movie') bit. When we do this, then most of Wave 2 starts working :)

end

def jsonify(movie_data)
return movie_data.as_json( only: [:title, :overview, :release_date, :inventory] )
end

end
53 changes: 53 additions & 0 deletions app/controllers/rentals_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
class RentalsController < ApplicationController

def index

rentals = Rental.all
render json: rentals.as_json( except: [:created_at, :updated_at] )

end


def show
rental_id = params[:id]
rental = Rental.find_by(id: rental_id)
if rental
render json: rental.as_json( except: [:created_at, :updated_at] )
else
render json: { errors: { rental_id: ["No such rental"] } }, status: :not_found
end
end


def checkout
rental = Rental.new(rental_params)
if rental.save
render json: { id: rental.id }, status: :ok
else
render json: { errors: { rental: ["No such rental"] } }, status: :bad_request
end
end


def checkin
rental_id = params[:id]
rental = Rental.find_by(id: rental_id)

if rental
rental.update(checkin: Date.today)
render json: { id: rental.id }, status: :ok
else
render json: { errors: { rental_id: ["No such rental"] } }, status: :bad_request
end
end




private

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

end
Loading