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
fdcccdb
Rails setup
njch5 Nov 5, 2019
8f315df
Created controllers
gracexinran Nov 5, 2019
fd820f6
Created models
gracexinran Nov 5, 2019
998626d
Created schema
gracexinran Nov 5, 2019
7e892cd
Created schema
njch5 Nov 5, 2019
b8373c5
Merge branch 'master' of https://github.com/njch5/video-store-api
njch5 Nov 5, 2019
7a885d1
Added RESTful routes
njch5 Nov 5, 2019
5331c12
Modified index action of customers controller and added tests
njch5 Nov 5, 2019
b8849d0
Refactored index action of CustomersController & tests
njch5 Nov 5, 2019
c4ee679
Added registered_at column to Customers table and ran seed file
njch5 Nov 5, 2019
289aa9c
Added validations on controllers and relationships
njch5 Nov 5, 2019
823e23e
Added foreign keys to Rentals table
njch5 Nov 5, 2019
1d1c8a3
Edited parts of test to remove deprecated minitest
njch5 Nov 5, 2019
67d1e2b
Edited the index action of the Customers controller and test
njch5 Nov 6, 2019
0d4ace1
Created controller actions for Movies and added tests
njch5 Nov 6, 2019
f1f2e51
Changed date format
njch5 Nov 6, 2019
3ba1835
Run migration
gracexinran Nov 6, 2019
eda44ab
Modified indentation
gracexinran Nov 6, 2019
90fb120
Modified movie_params in movies controller and tests to pass smoke test
gracexinran Nov 6, 2019
3f04f31
Added columns to movies and customers
gracexinran Nov 6, 2019
501e9b8
Refactored customers and movies controllers and tests, passed wave-2 …
gracexinran Nov 6, 2019
5c21156
Added model methods to customer and movie
gracexinran Nov 6, 2019
c8c822e
Added decrease_movies_checkout_count method to movie model and modifi…
gracexinran Nov 7, 2019
926980f
Merge pull request #1 from njch5/smoke-test
gracexinran Nov 7, 2019
02df53d
Added tests for movie model custom methods
njch5 Nov 7, 2019
c3e78f6
Refactored rentals controller 'checkin' action
gracexinran Nov 7, 2019
21c2aaa
Merge branch 'master' of https://github.com/njch5/video-store-api
gracexinran Nov 7, 2019
6117123
Added tests for customer model
njch5 Nov 7, 2019
ee0f19b
Refactored the Rentals controller to move business logic to model class
njch5 Nov 7, 2019
22d83f2
Created rental model tests for relationships and custom method
njch5 Nov 7, 2019
4eee460
Added Rentals Controller tests
njch5 Nov 7, 2019
0125d57
Fixed failing tests
njch5 Nov 7, 2019
96b65dd
Added pagination gem and refactored Customers Controller index action
njch5 Nov 8, 2019
af8c57f
Implemented sort and paginate functions to customers controller index…
gracexinran Nov 8, 2019
d7637eb
Added sorting to movies and rentals, added is_overdue column to rentals
gracexinran Nov 8, 2019
292d5a5
Refactored rentals 'overdue' action.
gracexinran Nov 8, 2019
e8b12f5
Added tests for movies 'overdue' action, updated rentals fixture
gracexinran Nov 8, 2019
ba729a5
Updated the rental fixtures and added tests for rental model 'rental_…
gracexinran Nov 8, 2019
0e014db
Refactored movies controller tests
gracexinran Nov 8, 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
Binary file added .DS_Store
Binary file not shown.
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 @@
2.5.5
62 changes: 62 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.5.5'

# 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

## Gemfile for Rails 3+, Sinatra, or Merb
gem 'will_paginate', '~> 3.1.1'

# 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 :development do
gem 'debase', '>= 0.2.4.1'
gem 'ruby-debug-ide', '>= 0.7.0'
end

group :test do
gem 'minitest-rails'
gem 'minitest-reporters'
end
177 changes: 177 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
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.5)
msgpack (~> 1.0)
builder (3.2.3)
byebug (11.0.1)
coderay (1.1.2)
concurrent-ruby (1.1.5)
crass (1.0.5)
debase (0.2.4.1)
debase-ruby_core_source (>= 0.10.2)
debase-ruby_core_source (0.10.6)
erubi (1.9.0)
ffi (1.11.1)
globalid (0.4.2)
activesupport (>= 4.2.0)
i18n (1.7.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.3.1)
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.2)
mini_portile2 (2.4.0)
minitest (5.13.0)
minitest-rails (5.2.0)
minitest (~> 5.10)
railties (~> 5.2.0)
minitest-reporters (1.4.2)
ansi
builder
minitest (>= 5.0)
ruby-progressbar
msgpack (1.3.1)
nio4r (2.5.2)
nokogiri (1.10.5)
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.3.0)
loofah (~> 2.3)
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 (13.0.0)
rb-fsevent (0.10.3)
rb-inotify (0.10.0)
ffi (~> 1.0)
ruby-debug-ide (0.7.0)
rake (>= 0.8.1)
ruby-progressbar (1.10.1)
ruby_dep (1.5.0)
spring (2.1.0)
spring-watcher-listen (2.0.1)
listen (>= 2.7, < 4.0)
spring (>= 1.2, < 3.0)
sprockets (4.0.0)
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.1)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.4)
will_paginate (3.1.8)

PLATFORMS
ruby

DEPENDENCIES
bootsnap (>= 1.1.0)
byebug
debase (>= 0.2.4.1)
listen (>= 3.0.5, < 3.2)
minitest-rails
minitest-reporters
pg (>= 0.18, < 2.0)
pry-rails
puma (~> 3.11)
rails (~> 5.2.3)
ruby-debug-ide (>= 0.7.0)
spring
spring-watcher-listen (~> 2.0.0)
tzinfo-data
will_paginate (~> 3.1.1)

RUBY VERSION
ruby 2.5.5p157

BUNDLED WITH
2.0.2
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.
17 changes: 17 additions & 0 deletions app/controllers/customers_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
class CustomersController < ApplicationController
def index
customers = Customer.all

if params[:sort]
customers = customers.order(params[:sort])
end

if params[:p] || params[:n]
customers = customers.paginate(page: params[:p], per_page: params[:n])
end

find_customers = customers.as_json(only: [:id, :name, :registered_at, :postal_code, :phone, :movies_checked_out_count])
render json: find_customers, status: :ok

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

if params[:sort]
movies = Movie.order(params[:sort])
end

if params[:p] || params[:n]
movies = movies.paginate(page: params[:p], per_page: params[:n])
end

find_movies = movies.as_json(only: [:id, :title, :release_date])
render json: find_movies, status: :ok
end

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

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

def create
movie = Movie.new(movie_params)

if movie.save
movie.set_inventory
render json: movie.as_json(only: [:id]), status: :ok
return
else
render json: { ok: false, errors: movie.errors.messages }, status: :bad_request
return
end
end

private

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