Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ampers - Nora and Sara - VideoStoreAPI #14

Open
wants to merge 60 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
475bd3b
created rails app in VideoStoreAPI
CheerOnMars May 7, 2018
bb9d6cb
restores readme file
npeters5 May 7, 2018
83d1c40
create movie, customer, and rental models
CheerOnMars May 7, 2018
adc82a3
adds customer, movie, and rental models with relationships and valida…
npeters5 May 7, 2018
fdeafbf
schema file
npeters5 May 7, 2018
c9ec2e6
adds foreign keys migration to rentals model
npeters5 May 7, 2018
f7c73cb
added fixtures to movie
CheerOnMars May 7, 2018
e8686cf
adds model tests for Customer. edits customer and rental yml fixtures
npeters5 May 7, 2018
a7a1af9
corrected letter case on yml files
CheerOnMars May 7, 2018
bcf0f89
update db schema
CheerOnMars May 7, 2018
686d410
minor add to Customer test
npeters5 May 7, 2018
1e5fc03
adds tests for Rental model
npeters5 May 7, 2018
9cc5fcb
Merge branch 'master' of https://github.com/CheerOnMars/VideoStoreAPI
CheerOnMars May 7, 2018
ec05c56
create movie model test
CheerOnMars May 7, 2018
7e4444d
generates customers, movies and rentals controllers and default routes
npeters5 May 7, 2018
fb2a7bb
adds routes for movies index, show, create, and customer index
npeters5 May 8, 2018
78ac4a6
adds tests for customers#index
npeters5 May 8, 2018
2e69af4
updates customers#index test
npeters5 May 8, 2018
7dac99b
added controller tests
CheerOnMars May 8, 2018
13fba23
Merge branch 'master' of https://github.com/CheerOnMars/VideoStoreAPI
CheerOnMars May 8, 2018
7d6c989
create methods in customer controller
CheerOnMars May 8, 2018
fc5610d
adds index, show, and create methods to Movies controller
npeters5 May 8, 2018
d180a2f
adds test for movies#show. all movies controller tests passing
npeters5 May 8, 2018
066353d
correct movies show path
CheerOnMars May 8, 2018
36fc858
edits movies#create
npeters5 May 8, 2018
92b4e3b
merge conflict resolved
npeters5 May 8, 2018
7ef9181
minor change to json ouput for movies#create
npeters5 May 8, 2018
9f0af19
update routes to include rentals
CheerOnMars May 8, 2018
056182c
minor typo in movies controller
npeters5 May 8, 2018
de880e3
adds more assertions to movies#create tests
npeters5 May 8, 2018
f8f2842
adds rentals controller tests for checkin method
npeters5 May 8, 2018
b89e45a
updates rental fixture data;
npeters5 May 8, 2018
3511b51
add checkin tests for the rentals controller
CheerOnMars May 8, 2018
2a882cd
added checkout method in controller, updated model and test as needed
CheerOnMars May 8, 2018
180aaf8
writes rental#checkin
npeters5 May 9, 2018
e53a93f
adds assertions, refactoring to rentals controller tests
npeters5 May 9, 2018
7beb266
add due dates method
CheerOnMars May 9, 2018
5b802ff
updates inventory method call in rentals controller tests
npeters5 May 9, 2018
7464ba4
creates movie#get_available_inventory
npeters5 May 9, 2018
d83c3d4
updates rentals controller tests
npeters5 May 9, 2018
163b28b
edits movie test assertion;
npeters5 May 9, 2018
2fd0b85
experimenting with strong params and setting defaults in rentals#chec…
npeters5 May 9, 2018
a82f99c
adds as_json to pass in optional response attributes for customer
npeters5 May 9, 2018
253b9d3
adds json options to movie model;
npeters5 May 9, 2018
bf14a69
adds avail inventory to movies controller test output
npeters5 May 9, 2018
fa30da5
experimenting with rental params. test throwing error
npeters5 May 9, 2018
5bf9a9f
fixes assertion in movie test
npeters5 May 9, 2018
220ef9c
adjusts rentals#checkout
npeters5 May 9, 2018
5dd1b6d
idk
npeters5 May 9, 2018
10b82d2
fixes test
npeters5 May 9, 2018
0839776
update checkin method to take in the movie_id and customer_id
CheerOnMars May 10, 2018
b94308e
tweaks rentals#checkin to return status ok upon successful request
npeters5 May 10, 2018
428763b
add query parameters
CheerOnMars May 10, 2018
c35368c
adds to gemfile.lock
npeters5 May 11, 2018
2407230
adds sorting params to movies#index
npeters5 May 11, 2018
926d116
adds rentals#overdue
npeters5 May 11, 2018
5d4c36b
sets default pagination in app controller
npeters5 May 11, 2018
381f856
no changes
npeters5 May 11, 2018
f3dcec4
adds rental model methods for getting checkedout and overdue rentals
npeters5 May 11, 2018
cfa7f70
adds route for overdue rentals
npeters5 May 11, 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
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
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) 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.6'
# Use postgresql as the database for Active Record
gem 'pg', '>= 0.18', '< 2.0'
# 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', '~> 4.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 'jbuilder'
gem 'rabl'
gem 'will_paginate'


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'
gem 'better_errors'
gem 'binding_of_caller'
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
173 changes: 173 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
GEM
remote: https://rubygems.org/
specs:
actioncable (5.1.6)
actionpack (= 5.1.6)
nio4r (~> 2.0)
websocket-driver (~> 0.6.1)
actionmailer (5.1.6)
actionpack (= 5.1.6)
actionview (= 5.1.6)
activejob (= 5.1.6)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
actionpack (5.1.6)
actionview (= 5.1.6)
activesupport (= 5.1.6)
rack (~> 2.0)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (5.1.6)
activesupport (= 5.1.6)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.3)
activejob (5.1.6)
activesupport (= 5.1.6)
globalid (>= 0.3.6)
activemodel (5.1.6)
activesupport (= 5.1.6)
activerecord (5.1.6)
activemodel (= 5.1.6)
activesupport (= 5.1.6)
arel (~> 8.0)
activesupport (5.1.6)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
tzinfo (~> 1.1)
ansi (1.5.0)
arel (8.0.0)
better_errors (2.4.0)
coderay (>= 1.0.0)
erubi (>= 1.0.0)
rack (>= 0.9.0)
binding_of_caller (0.8.0)
debug_inspector (>= 0.0.1)
builder (3.2.3)
byebug (10.0.2)
coderay (1.1.2)
concurrent-ruby (1.0.5)
crass (1.0.4)
debug_inspector (0.0.3)
erubi (1.7.1)
ffi (1.9.23)
globalid (0.4.1)
activesupport (>= 4.2.0)
i18n (1.0.1)
concurrent-ruby (~> 1.0)
jbuilder (2.7.0)
activesupport (>= 4.2.0)
multi_json (>= 1.2)
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.2)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mail (2.7.0)
mini_mime (>= 0.1.1)
method_source (0.9.0)
mini_mime (1.0.0)
mini_portile2 (2.3.0)
minitest (5.11.3)
minitest-rails (3.0.0)
minitest (~> 5.8)
railties (~> 5.0)
minitest-reporters (1.2.0)
ansi
builder
minitest (>= 5.0)
ruby-progressbar
multi_json (1.13.1)
nio4r (2.3.1)
nokogiri (1.8.2)
mini_portile2 (~> 2.3.0)
pg (1.0.0)
pry (0.11.3)
coderay (~> 1.1.0)
method_source (~> 0.9.0)
pry-rails (0.3.6)
pry (>= 0.10.4)
puma (3.11.4)
rabl (0.13.1)
activesupport (>= 2.3.14)
rack (2.0.5)
rack-test (1.0.0)
rack (>= 1.0, < 3)
rails (5.1.6)
actioncable (= 5.1.6)
actionmailer (= 5.1.6)
actionpack (= 5.1.6)
actionview (= 5.1.6)
activejob (= 5.1.6)
activemodel (= 5.1.6)
activerecord (= 5.1.6)
activesupport (= 5.1.6)
bundler (>= 1.3.0)
railties (= 5.1.6)
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.1.6)
actionpack (= 5.1.6)
activesupport (= 5.1.6)
method_source
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
rake (12.3.1)
rb-fsevent (0.10.3)
rb-inotify (0.9.10)
ffi (>= 0.5.0, < 2)
ruby-progressbar (1.9.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.1)
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.6.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.3)
will_paginate (3.1.6)

PLATFORMS
ruby

DEPENDENCIES
better_errors
binding_of_caller
byebug
jbuilder
listen (>= 3.0.5, < 3.2)
minitest-rails
minitest-reporters
pg (>= 0.18, < 2.0)
pry-rails
puma (~> 3.7)
rabl
rails (~> 5.1.6)
spring
spring-watcher-listen (~> 2.0.0)
tzinfo-data
will_paginate

BUNDLED WITH
1.16.1
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.
14 changes: 14 additions & 0 deletions app/controllers/customers_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
class CustomersController < ApplicationController
def index
if params[:sort] == "name"
customers = Customer.all.order(:name).paginate(page: params[:p], per_page: params[:n])
elsif params[:sort] == "registered_at"
customers = Customer.all.order(:registered_at).paginate(page: params[:p], per_page: params[:n])
elsif params[:sort] == "postal_code"
customers = Customer.all.order(:postal_code).paginate(page: params[:p], per_page: params[:n])
else
customers = Customer.all
end
render json: customers.as_json(only: [:id, :name, :registered_at, :postal_code, :phone])
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

def index
if params[:sort] == "title"
movies = Movie.all.order(:title).paginate(page: params[:p], per_page: params[:n])

Choose a reason for hiding this comment

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

Paginate, Nice!

elsif params[:sort] == "release_date"
movies = Movie.all.order(:release_date).paginate(page: params[:p], per_page: params[:n])
else
movies = Movie.all
end
render json: movies.as_json(only: [:id, :title, :release_date])
end


def show
movie = Movie.find_by(id: params[:id])
if movie
render json: movie.as_json(only: [:id, :inventory, :overview, :release_date, :title]), status: :ok
else
render json: { ok: false, errors: "Movie not found" }, status: :not_found
end
end

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

private

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

def checkout
movie = Movie.find_by(id: params[:rental][:movie_id])
customer = Customer.find_by(id: params[:rental][:customer_id])
if movie.nil? || customer.nil?
render json: { ok: false }, status: :bad_request
else
if movie.available_inventory > 0
rental = Rental.create(movie_id: params[:rental][:movie_id], customer_id: params[:rental][:customer_id], returned?: false, checkout_date: Date.today)
if rental
render json: rental.as_json(), status: :ok
else
render json: { ok: false, errors: rental.errors },
status: :bad_request
end
else
render json: { ok: false}, status: :bad_request # Todo: look up to see if better status
end
end
end

def checkin
rental = Rental.where(movie_id: params[:rental][:movie_id], customer_id: params[:rental][:customer_id], returned?: false )
# rental = Rental.find_by(params[:id])
if rental.empty?
render json: { ok: false }, status: :no_content
else
rental.update(returned?: true)
render json: rental.as_json(), status: :ok
end
end

def overdue
rentals = Rental.get_overdue
# if params[:sort] == "title"
# rentals.order(:movie_id.title).paginate(page: params[:p], per_page: params[:n])
# elsif params[:sort] == "name"
# rentals.order(:name).paginate(page: params[:p], per_page: params[:n])
# elsif params[:sort] == "checkout_date"
# rentals.order(:checkout_date).paginate(page: params[:p], per_page: params[:n])
# elsif params[:sort] == "due_date"
# rentals.order(:checkout_date).paginate(page: params[:p], per_page: params[:n])
# else
# rentals
# end
render json: rentals.as_json(), status: :ok
end

private

def rental_params
return params.permit(:customer_id, :movie_id)
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
4 changes: 4 additions & 0 deletions app/models/application_record.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
self.per_page = 200
end
Empty file added app/models/concerns/.keep
Empty file.
Loading