Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
ad9148a
new rails setup
mmlamkin May 7, 2018
fea2e0a
creates models for movie and customer, migrations, seeds db
mmlamkin May 7, 2018
af64e6f
adds validations model test for customer
mmlamkin May 7, 2018
3d13004
adds validation model testing for movie
mmlamkin May 7, 2018
748a5f3
adds movies and customers controllers and routes
mmlamkin May 7, 2018
c4a833c
adds customer index controller test DIDN'T DO MOVIES CHECKOUT COUNT
mmlamkin May 7, 2018
09105d3
modifies movies cont test
mmlamkin May 7, 2018
f0d80b6
adds movie index controller test
mmlamkin May 7, 2018
12450df
adds movie show cont tests
mmlamkin May 7, 2018
3bf2174
adds create controller tests for movie
mmlamkin May 7, 2018
fa38618
changes create to .new plus save
mmlamkin May 7, 2018
a23c7e9
Fix controller test for movie create
2020dream May 7, 2018
8a6b2ca
adds rental join table and model and relationships with customer and …
mmlamkin May 8, 2018
9eec28e
adds relationship model tests for movie
mmlamkin May 8, 2018
1127257
adds relationship test for customer model
mmlamkin May 8, 2018
da2e5b3
adds model tests for rentals
mmlamkin May 8, 2018
881787a
adds routes and controller for rentals
mmlamkin May 8, 2018
6a3d02e
adds checkout controller tests/not actions for rentals
mmlamkin May 8, 2018
d243293
Add RentalsController tests for check_out
2020dream May 8, 2018
01297b6
adds controller tests for rentals-pass tests
mmlamkin May 8, 2018
72d6cb0
Fix Movies#controller show test for 404
2020dream May 8, 2018
f1414ae
Add missing nodes in request body
2020dream May 8, 2018
731e2f3
Comment out validation for phone in Customer
2020dream May 9, 2018
a5cbd85
Add missing fields for customer index and movie show using rabl
2020dream May 9, 2018
e156ab6
Fix customer controller index test by adding missing field
2020dream May 9, 2018
218b506
decreases movie inventory method and test works
mmlamkin May 9, 2018
a54d38d
negative test for availeble inventory in rental controller tests passes
mmlamkin May 9, 2018
26694b7
customer checkout count test in rental model passes
mmlamkin May 9, 2018
2876416
Merge branch 'master' into model-methods
2020dream May 9, 2018
10d6ecf
Pass Wave 3 smoke tests
2020dream May 9, 2018
1324d9e
Refactor model tests
2020dream May 9, 2018
2bc4e90
removes unneeded instance variables in controllers
mmlamkin May 9, 2018
a38ad1e
Refactor controller tests and add more edge cases
2020dream May 9, 2018
766327f
Implement new tests
2020dream May 9, 2018
691d6b0
specifies error messages
mmlamkin May 9, 2018
30ba857
Merge branch 'master' of https://github.com/mmlamkin/VideoStoreAPI
mmlamkin May 9, 2018
909c959
fixes some unknown problem and all tests pass
mmlamkin May 9, 2018
4601486
adds movie model tests for available inventory
mmlamkin May 11, 2018
f8a1041
Implement model method tests
2020dream May 11, 2018
69c9a59
Merge branch 'master' of https://github.com/mmlamkin/VideoStoreAPI
2020dream 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
55 changes: 55 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
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'
# Gemfile
gem 'rabl'
# Also add either `oj` or `yajl-ruby` as the JSON parser
gem 'oj'
gem 'jbuilder', '~> 2.5'

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
164 changes: 164 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
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)
builder (3.2.3)
byebug (10.0.2)
coderay (1.1.2)
concurrent-ruby (1.0.5)
crass (1.0.4)
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)
oj (3.6.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)

PLATFORMS
ruby

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

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.
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

end
end
33 changes: 33 additions & 0 deletions app/controllers/movies_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
class MoviesController < ApplicationController
def index
@movies = Movie.all
end

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

if @movie.nil?
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: {id: movie.id}, status: :ok
else
render json: {ok: false, errors: movie.errors}, status: :bad_request
end

end

private

def movie_params
return params.permit(:title, :overview, :release_date , :inventory)
end

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 check_out

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


if movie.available_inventory > 0

checkout = Date.today.to_s
due = (Date.today + 7.days).to_s

rental = Rental.create(
checkout_date: checkout,
due_date: due,
customer_id: params[:customer_id],
movie_id: params[:movie_id],
status: 'checked_out'
)

if rental.save
render json: {customer_id: rental.customer_id, movie_id: rental.movie_id}, status: :ok

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

end

else

render json: {ok: false, errors: "No copies available"}, status: :bad_request
end
end

def check_in

rental = Rental.find_by(
customer_id: params[:customer_id],
movie_id: params[:movie_id],
status: 'checked_out')

if rental.nil?
render json: {ok: false, errors: "Rental does not exist"}, status: :bad_request
else
rental.update(status: 'returned')
render json: { customer_id: rental.customer_id, movie_id: rental.movie_id, status: rental.status }, status: :ok
end
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: 'from@example.com'
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.
13 changes: 13 additions & 0 deletions app/models/customer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class Customer < ApplicationRecord
has_many :rentals

validates :name, :address, :city, :state, :postal_code, :phone, presence: true

validates :postal_code, length: { is: 5 }

def movies_checked_out_count
movies = self.rentals.select{ |rental| rental.status == 'checked_out' }

return movies.count
end
end
Loading