Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
98e2f98
initial setup
kanderson38 May 14, 2019
d499294
initial setup
aribray May 14, 2019
8fa9c2f
resolved changes
aribray May 14, 2019
b5e75a1
added customers and movies controllers
aribray May 14, 2019
50b604b
zomg test route
aribray May 14, 2019
57b8f57
updated routes
kanderson38 May 14, 2019
624971c
added tests for movies#show and movies#create
aribray May 14, 2019
4066d05
Merge pull request #1 from kanderson38/movie_show_and_create
kanderson38 May 14, 2019
c757024
movies and customers index
kanderson38 May 14, 2019
47f6d36
merging changes
kanderson38 May 14, 2019
a36c20a
merging again??
kanderson38 May 14, 2019
1cc81c1
available_inventory for movies
kanderson38 May 14, 2019
6daa837
available_inventory in movies#create
kanderson38 May 14, 2019
967cbec
passing all tests for movie create
aribray May 14, 2019
48ef11d
added validations to movie model
aribray May 14, 2019
57bf2a1
merging to get validations
kanderson38 May 14, 2019
797e7ba
Merge branch 'master' of https://github.com/kanderson38/VideoStoreAPI
kanderson38 May 14, 2019
97fd061
added available_inventory to json
kanderson38 May 14, 2019
025ee88
added available inventory to moviescontrolloer
aribray May 14, 2019
d87b1d6
Merge branch 'master' of https://github.com/kanderson38/VideoStoreAPI
aribray May 14, 2019
31d005f
added column to customer
kanderson38 May 14, 2019
0a24793
fixed failing tests in movie_test and customers_controller
aribray May 14, 2019
b38b4af
Merge branch 'master' of https://github.com/kanderson38/VideoStoreAPI
kanderson38 May 14, 2019
c844a85
generated rentals
kanderson38 May 14, 2019
44953a6
added validation tests to movie model
aribray May 14, 2019
1920de8
Merge branch 'master' of https://github.com/kanderson38/VideoStoreAPI
aribray May 14, 2019
af5ebc9
rentals routes
kanderson38 May 14, 2019
3cd4a2a
validations for rentals
kanderson38 May 14, 2019
28e51be
checkout action
kanderson38 May 14, 2019
1464dbf
fixed checkout
kanderson38 May 14, 2019
a85cee6
added default value to movies_checked_out_by_customer field
aribray May 14, 2019
108f25f
passing postman tests for checkout
aribray May 14, 2019
7c69fa3
added checkedin migration for rentals table
aribray May 14, 2019
4ed5fa8
added fixtures for rental and customer
kanderson38 May 14, 2019
93e1dbf
added movies yml and began checkin function
aribray May 14, 2019
f871a4c
rental tests
kanderson38 May 14, 2019
8767202
adding tests for checkout rental method
aribray May 14, 2019
18efbd3
merged from master
kanderson38 May 14, 2019
a6096ff
updated customers yml to add movies_checked_out column
aribray May 14, 2019
367e28b
merged tests for checkin and checkout
aribray May 14, 2019
8b7bc9b
more rentals testing
kanderson38 May 14, 2019
afc9ebe
resolving merge conflicts
kanderson38 May 14, 2019
9c1e9b3
passing controller tests for rentals#checkout
aribray May 14, 2019
d68b4a8
resolved merge conflicts in rentals_controller_test
aribray May 14, 2019
2404ed0
fixed references
kanderson38 May 14, 2019
ff2846b
merge conflict resolution
kanderson38 May 14, 2019
ddfcdab
checkin tests
kanderson38 May 14, 2019
a5af787
created rental seeds
kanderson38 May 14, 2019
211be94
stashing changes to rentalscontroller
aribray May 14, 2019
9a4860d
resolving changes in rentalscontroller
aribray May 14, 2019
da0dfb7
sort customers
kanderson38 May 15, 2019
312ea4b
update gemfile
kanderson38 May 15, 2019
eee9222
Merge branch 'master' of https://github.com/kanderson38/VideoStoreAPI
aribray May 15, 2019
3a333cc
sort, paginate customers
kanderson38 May 15, 2019
04f36f5
Merge branch 'master' of https://github.com/kanderson38/VideoStoreAPI
aribray May 15, 2019
2cbdecd
fixed rental validation test
aribray May 15, 2019
5bbd789
added error checking for invalid params and intitial tests for query …
aribray May 15, 2019
4cb1481
fleshed out controller tests for movie query parameters
aribray May 15, 2019
e289189
more testing in customer
kanderson38 May 15, 2019
1b8e728
added rental model validation and relationship tests
aribray May 17, 2019
85ccd8f
added relationship test to movie model
aribray May 17, 2019
45eecf9
customer model test
kanderson38 May 17, 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
57 changes: 57 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
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 'will_paginate', '~> 3.1.0'
gem 'pry-rails'
end

group :test do
gem 'minitest-rails'
gem 'minitest-reporters'
end
171 changes: 171 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
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)
will_paginate (3.1.7)

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
will_paginate (~> 3.1.0)

RUBY VERSION
ruby 2.5.1p57

BUNDLED WITH
2.0.1
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.
44 changes: 44 additions & 0 deletions app/controllers/customers_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
class CustomersController < ApplicationController
def index
if valid?(params)
customers = Customer.paginate(page: params[:p], per_page: params[:n]).order(params[:sort])

render status: :ok, json: customers.as_json(only: [:id, :name, :registered_at, :postal_code, :phone, :movies_checked_out_count])
else
render status: :bad_request, json: { errors: { "query": ["#{params} not a valid query parameter"] } }
end
end

def show
customer = Customer.find_by(id: params[:id])

if customer
render status: :ok, json: customer.as_json(only: [:id, :name, :registered_at, :postal_code, :phone, :movies_checked_out_count])

Choose a reason for hiding this comment

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

Small style note: not all text editors wrap lines for you. This line is so long that on GitHub I have to scroll horizontally to see all the pieces. You can make this easier to read by putting a newline after any given comma in a statement.

else
render status: :not_found, json: { errors: { "name": ["Customer #{params[:id]} not found"] } }
end
end

private

def valid?(params)
sorts = ["name", "registered_at", "postal_code", nil]
return false unless sorts.include?(params[:sort])

unless params[:p].nil?
begin Integer(params[:p])
rescue ArgumentError
return false
end
end

unless params[:n].nil?
begin Integer(params[:n])
rescue ArgumentError
return false
end
end

true
end
end
64 changes: 64 additions & 0 deletions app/controllers/movies_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# frozen_string_literal: true

class MoviesController < ApplicationController
def zomg
render json: { message: 'it works!' }
end

def index
if valid?(params)
movies = Movie.paginate(page: params[:p], per_page: params[:n]).order(params[:sort])
render json: movies.as_json(only: %i[id title release_date])
else
render json: { ok: false, message: 'Query params not valid' }, status: :not_found
end
end

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

if movie
render json: movie.as_json(only: %i[title overview release_date inventory available_inventory]), status: :ok
else
render json: { ok: false, message: 'Movie not found' }, status: :not_found
end
end

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

if movie.save
render json: movie.as_json(only: %i[title overview release_date inventory id available_inventory]), status: :ok
else
render json: { ok: false, message: movie.errors.messages }, status: :bad_request
end
end

private

def valid?(params)
sorts = ['title', 'release_date', nil]
return false unless sorts.include?(params[:sort])

unless params[:p].nil?
begin Integer(params[:p])
rescue ArgumentError
return false
end
end

unless params[:n].nil?
begin Integer(params[:n])
rescue ArgumentError
return false
end
end

true
end

def movie_params
params.require(:movie).permit(:title, :overview, :release_date, :inventory, :available_inventory)
end
end
Loading