Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
2947d16
created API
AngelaPoland May 7, 2018
a02b0d2
models created
brownav May 7, 2018
b1e69ca
adds references/foreign keys to rental model
AngelaPoland May 7, 2018
4c42e2f
adds relationships and validations to models
AngelaPoland May 7, 2018
64b062d
changed rental validation of checkout_date to a date instead of a Dat…
AngelaPoland May 7, 2018
1e85322
basic model testing for customer, movie, rental
brownav May 7, 2018
ac4c575
adds routes and controllers for customers, movies, and rentals
AngelaPoland May 7, 2018
8716b21
adds index and show actions to movie controller
AngelaPoland May 7, 2018
01b821b
adds index and show actions to movie controller
AngelaPoland May 7, 2018
b800b31
index and show methods for customers controller
brownav May 7, 2018
c613947
Merge branch 'cust_cont'
brownav May 7, 2018
bea5ffa
adds index and show actions to rental controller
AngelaPoland May 7, 2018
bd79942
refactors controllers methods and routes
brownav May 7, 2018
e602544
adds checkin date column migration to rentals
AngelaPoland May 7, 2018
62f9163
customers controller testing
brownav May 7, 2018
fd983f5
adds index and show controller tests -passing- for movies controller
AngelaPoland May 7, 2018
b1abb0e
rentals controller basic tests index show
brownav May 7, 2018
de55664
create methods in movie and rental controller
brownav May 8, 2018
83ea66b
rentals update attempt
brownav May 8, 2018
5cf1333
adds test for movie create controller action
AngelaPoland May 8, 2018
7160f61
adds tests for rental create controller action
AngelaPoland May 8, 2018
54c03cc
rental update
brownav May 8, 2018
8fb0427
two migrations added
brownav May 8, 2018
055f706
renders movies to get smoke tests to pass
AngelaPoland May 8, 2018
8d24e4b
changed rental_params
AngelaPoland May 8, 2018
b09fa48
create rental works?
brownav May 9, 2018
d81c228
route for checkin and checkout
brownav May 9, 2018
465caf9
changed rental update action to find rental by customer_id and movie_…
AngelaPoland May 9, 2018
b8b1daf
rental controller tests pass, still need to write rental#update tests
brownav May 9, 2018
2d78c5b
Merge branch 'master' of https://github.com/AngelaPoland/VideoStoreAPI
brownav May 9, 2018
d0f3d7e
model tests pass
brownav May 9, 2018
c04933d
works on rental update controller tests but its not passing tests yet.
AngelaPoland May 9, 2018
3324074
update controller tests still not working
AngelaPoland May 9, 2018
54e9834
bad rentals cont
brownav May 9, 2018
5c6e1e9
merge conflict fix
brownav May 9, 2018
284deae
updated rental controller tests finally pass
AngelaPoland May 9, 2018
be15aff
made changes
AngelaPoland May 9, 2018
b9c545b
updated movie and rental paths/routes
AngelaPoland May 9, 2018
771220c
spacing
brownav May 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
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
50 changes: 50 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
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'

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
154 changes: 154 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
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)
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
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)
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
listen (>= 3.0.5, < 3.2)
minitest-rails
minitest-reporters
pg (>= 0.18, < 2.0)
pry-rails
puma (~> 3.7)
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.
8 changes: 8 additions & 0 deletions app/controllers/customers_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class CustomersController < ApplicationController

def index
customers = Customer.all
render json: customers.as_json(only: [:id, :name, :registered_at, :address, :city, :state, :postal_code, :phone, :movies_checked_out_count])
end

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

def index
movies = Movie.all
render json: movies.as_json(only: [:id, :title, :release_date, :inventory, :overview, :available_inventory])
end

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

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

def create
movie = Movie.create(movie_params)

if movie.valid?
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(:id, :title, :release_date, :inventory, :overview, :available_inventory)
end
end
48 changes: 48 additions & 0 deletions app/controllers/rentals_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
class RentalsController < ApplicationController

def index
rentals = Rental.all
render json: rentals.as_json(only: [:customer_id, :movie_id, :checkin_date, :checkout_date])
end

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

if rental
render json: rental.as_json(only: [:customer_id, :movie_id, :checkout_date, :checkin_date]), status: :ok
else
render json: {ok: false, errors: "Rental not found"}, status: :not_found
end
end

def create
rental = Rental.new(rental_params)
rental.checkout_date = Date.today
rental.save

if rental.valid?
render json: { id: rental.id }, status: :ok
else
render json: { ok: false, errors: rental.errors }, status: :bad_request
end
end

def update
rental = Rental.find_by(customer_id: params[:customer_id], movie_id: params[:movie_id])

if rental.checkin_date != nil
render json: {ok: false, errors: "Rental already checked in."}, status: :bad_request
else
rental.checkin_date = Date.today
rental.save

render json: rental.as_json(only: [:customer_id, :movie_id, :checkout_date, :checkin_date]), status: :ok
end
end

private
def rental_params
return params.permit(:customer_id, :movie_id, :checkout_date, :checkin_date)
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.
5 changes: 5 additions & 0 deletions app/models/customer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class Customer < ApplicationRecord
has_many :rentals

validates :name, presence: true
end
6 changes: 6 additions & 0 deletions app/models/movie.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class Movie < ApplicationRecord
has_many :rentals

validates :title, presence: true
validates_numericality_of :inventory, presence: true, greater_than_or_equal_to: 0
end
7 changes: 7 additions & 0 deletions app/models/rental.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
class Rental < ApplicationRecord
belongs_to :customer
belongs_to :movie

validates :checkout_date, presence: true

end
13 changes: 13 additions & 0 deletions app/views/layouts/mailer.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
/* Email styles need to be inline */
</style>
</head>

<body>
<%= yield %>
</body>
</html>
1 change: 1 addition & 0 deletions app/views/layouts/mailer.text.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<%= yield %>
3 changes: 3 additions & 0 deletions bin/bundle
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/usr/bin/env ruby
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
load Gem.bin_path('bundler', 'bundle')
9 changes: 9 additions & 0 deletions bin/rails
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/usr/bin/env ruby
begin
load File.expand_path('../spring', __FILE__)
rescue LoadError => e
raise unless e.message.include?('spring')
end
APP_PATH = File.expand_path('../config/application', __dir__)
require_relative '../config/boot'
require 'rails/commands'
Loading