Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
ceecee5
initial rails app
arrriiii May 7, 2018
e3d1824
Generation of models for movie, rental and customer. Also controllers…
brendarios May 7, 2018
e18a839
new routes and controller actions for movies and customer
arrriiii May 7, 2018
3c2ff31
fixed routes for customer and movies
arrriiii May 7, 2018
c1c091f
Seeded customer and movie data
arrriiii May 7, 2018
b6021a4
Added index method to customers and movies controllers.
brendarios May 7, 2018
2519d2c
Tests for customers index passing.
brendarios May 7, 2018
60bf620
Test for movies index passing.
brendarios May 7, 2018
b9b4255
new fixture data for customer and movies
arrriiii May 8, 2018
6cdce70
added test for customer model
arrriiii May 8, 2018
ce74ffb
Tests for models movie and rental. Also some work in controllers.
brendarios May 8, 2018
a379e15
added reference to rental model
arrriiii May 8, 2018
abd2c90
updated rental table
arrriiii May 8, 2018
5a7dd3a
new test for customer rental relationship
arrriiii May 8, 2018
9e23773
Added tests for relations for movie and rental.
brendarios May 8, 2018
8f9625b
Merge branch 'master' of https://github.com/Ari-1/VideoStoreAPI
brendarios May 8, 2018
29ac852
changed data type of release date to string
arrriiii May 8, 2018
2270aa2
Added create action to movies controller.
brendarios May 8, 2018
7bc7d21
Merge branch 'master' of https://github.com/Ari-1/VideoStoreAPI
brendarios May 8, 2018
ce86b8c
added column to customer and movies
arrriiii May 8, 2018
f50ee68
Added column available inventory to seed file of movies.
brendarios May 8, 2018
ea19f4f
updated default values
arrriiii May 8, 2018
66d3e3d
Merge branch 'master' of https://github.com/Ari-1/VideoStoreAPI
brendarios May 8, 2018
4acb1f3
fixed null value for movies available inventory
arrriiii May 8, 2018
47f4092
updated checkout method for rentals
arrriiii May 8, 2018
e27d93b
working on movies controller.
brendarios May 8, 2018
ff842f3
Merge branch 'master' of https://github.com/Ari-1/VideoStoreAPI
brendarios May 8, 2018
da78dcb
Checkout action for the rentals controller.
brendarios May 8, 2018
cef122b
merging rental changes
arrriiii May 8, 2018
305f72f
Added checkout to schema and change type of due date
brendarios May 8, 2018
5d5086a
merging errors
arrriiii May 8, 2018
0de055c
updated merging errors
arrriiii May 8, 2018
7b34d91
Refactored rentals controller checkout action .
brendarios May 8, 2018
dd371a1
Solving merge conflicts.
brendarios May 8, 2018
1ffa445
working on checkin and checkout for rentals
arrriiii May 9, 2018
b70e754
Removed required(movie) from params.
brendarios May 9, 2018
7557e73
Solving conflicts
brendarios May 9, 2018
6abcb56
updated attributes for movie inventory
arrriiii May 9, 2018
2a34970
Rental checkin method, added find by customer id and movie id
arrriiii May 9, 2018
5323a71
Working on rentals/checkin controller.
brendarios May 9, 2018
867c922
Solving merge conflicts
brendarios May 9, 2018
2d55f74
Added method to movies check out count in rentals controller.
brendarios May 9, 2018
31da2bc
removed pry/passing smoke tests for wave 3
arrriiii May 9, 2018
3373c27
working on test for controllers
arrriiii May 9, 2018
e01cf0a
Added tests for create action of movies controller, still one failure.
brendarios May 9, 2018
bea3901
Solving merge conflicts.
brendarios May 9, 2018
437d4b4
passing movie controller test
arrriiii May 9, 2018
68ff1cc
Refactoring movies controller.
brendarios May 9, 2018
9948b01
Solving merging conflicts on movies controller test.
brendarios May 9, 2018
1775c5f
added checked out column to rentals
arrriiii May 9, 2018
9104395
new rental checked_out boolean value
arrriiii May 9, 2018
304b9af
added helper methods to rental controller
arrriiii May 9, 2018
07c70aa
new test for rental model
arrriiii May 10, 2018
4345cde
refactored testing for rental model
arrriiii May 11, 2018
660c297
updated default value for rental status
arrriiii May 11, 2018
84c74a9
new default settings for movie and customer
arrriiii May 11, 2018
4e086ca
removing pry
arrriiii May 11, 2018
937a8f1
Added couple of test for customers and movies controllers.
brendarios May 11, 2018
67dafec
Working on rentals controller.
brendarios May 11, 2018
d9e6fc3
Solving merge conflicts
brendarios May 11, 2018
9593838
updating test for rentals
arrriiii May 11, 2018
022176e
update rentals
arrriiii May 11, 2018
d9bd22f
Working on the rentals controller tests.
brendarios May 11, 2018
072504d
solving merge conflicts
brendarios May 11, 2018
96ab595
Tests and rentals controller worked.
brendarios May 11, 2018
a9d9832
updated rental controller with instance variable
arrriiii May 11, 2018
491125e
Added comment to do in rentals controller.
brendarios 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
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
159 changes: 159 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
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)
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
jbuilder (~> 2.5)
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
3 changes: 3 additions & 0 deletions app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
class ApplicationController < ActionController::API
# protect_from_forgery with: :null_session
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
render(json: customers.as_json(only: [:id, :name, :registered_at, :postal_code, :phone, :movies_checked_out_count]), status: :ok)
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
movies = Movie.all
# render :json => movies
render(json: movies.as_json(only: [:id, :title, :release_date]), status: :ok)
end

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

if movie.nil?
render json: {
"errors": {
"id": ["No movie with id #{params[:id]}"]
}
}, status: :not_found
else
render(json: movie.as_json(only: [:title, :overview, :release_date, :inventory, :available_inventory]), status: :ok)
end
end

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

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

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

# TODO: To make this happen automatically
def checkout
@rental = Rental.new(rental_params)

Choose a reason for hiding this comment

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

Since you're not rendering views, you shouldn't need instance variables in your controllers.

@rental.check_date

if @rental.save
@rental.build_rental
render json: rental_params, status: :ok
else
#failure
render json: {errors: @rental.errors.messages }, status: :bad_request
end
end


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

if @rental.nil?
render json: {
"errors": {
"id": ["No rental with id #{params[:id]}"]
}
}, status: :not_found
else
@rental.build_return
render(json: @rental.as_json(only: [:customer_id, :movie_id]), status: :ok)
end
end

private
def rental_params
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.
14 changes: 14 additions & 0 deletions app/models/customer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
class Customer < ApplicationRecord

has_many :rentals
has_many :movies, :through => :rentals

validates :name, presence: true

after_initialize :default_movie_count

private
def default_movie_count
self.movies_checked_out_count ||= self.movies_checked_out_count = 0
end
end
14 changes: 14 additions & 0 deletions app/models/movie.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
class Movie < ApplicationRecord
has_many :rentals
has_many :customers, :through => :rentals

validates :title, presence: true

after_initialize :default_inventory


private
def default_inventory
self.available_inventory ||= self.inventory
end
end
Loading