Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
3363513
created Rails API
unkcodesquick Nov 5, 2018
c5a102e
Set up DB and join table
danimetz Nov 5, 2018
65a5ee2
Created a migration for renaming created at to registered at
danimetz Nov 5, 2018
b26a205
Added the registered at column to customers instead of movies
danimetz Nov 5, 2018
d82d78d
added Rental model and updated references
unkcodesquick Nov 5, 2018
cba7d5f
added customer fixtures
unkcodesquick Nov 5, 2018
b79d47b
customer_Test'
unkcodesquick Nov 5, 2018
57b74fd
Updated relationships in the movies,customers,rentals model
danimetz Nov 5, 2018
6ce7c95
Added model tests for movies
danimetz Nov 5, 2018
cedac59
Updated more movie tests
danimetz Nov 5, 2018
e4b10e3
Fixed yml files to have relationships
danimetz Nov 5, 2018
39b94ea
Updated the destroy_all in the customers test to have and ! to save a…
danimetz Nov 5, 2018
0e790d1
added rentals test
unkcodesquick Nov 5, 2018
2ba65bd
Merge branch 'master' of https://github.com/amandaungco/VideoStoreAPI
unkcodesquick Nov 5, 2018
b19967a
all tests pass
unkcodesquick Nov 5, 2018
edd80b5
binding.pry
unkcodesquick Nov 5, 2018
c82840a
added movie show and index tests/customers index test
danimetz Nov 5, 2018
aea0966
Added movie validations
danimetz Nov 5, 2018
e4066bc
updated Movie model test for validations
danimetz Nov 5, 2018
e02f475
Tested movie controller to return certain keys
danimetz Nov 6, 2018
e812560
Added Customer Controller Tests for index
danimetz Nov 6, 2018
0059b6e
Added SimpleCov- 100% covered
danimetz Nov 6, 2018
bac0c4f
pseudo code in rentals controller for check-in/check-out
unkcodesquick Nov 6, 2018
e17b166
updated db
unkcodesquick Nov 6, 2018
ddea75d
added routes for checkin/checkout for rentals controller
unkcodesquick Nov 6, 2018
9a78d30
added/tested checkout method for rental controller
unkcodesquick Nov 6, 2018
de8cc03
updated movie model to set available inventory default value
unkcodesquick Nov 6, 2018
826997b
Updated routes for checkin and checkout to have the '-'
danimetz Nov 6, 2018
928a1aa
Updated the rentals controller to return json
danimetz Nov 6, 2018
4dcf11f
updated rental controller tests
unkcodesquick Nov 6, 2018
c765375
Merge branch 'master' of https://github.com/amandaungco/VideoStoreAPI
unkcodesquick Nov 6, 2018
fb2d765
added check_in/checkout method to customer class
unkcodesquick Nov 6, 2018
d4da576
upated customer model and tests for custom methods
unkcodesquick Nov 6, 2018
ee85167
updated movie tests
unkcodesquick Nov 7, 2018
87e28de
replaced columns in movies and customers with custom methods
unkcodesquick Nov 7, 2018
cba73c4
added sorting function
unkcodesquick Nov 7, 2018
dddb191
Added sorting tests for movies and customers
danimetz Nov 7, 2018
e0d2628
updated sorting and checkin date to 0
danimetz Nov 7, 2018
6c04f20
added sorting for movies, overdue rentals and customers
danimetz Nov 7, 2018
a669c14
Refactored and added the sort method to the application controller an…
danimetz Nov 8, 2018
d2106b0
Added the title and name methods to the rentals so that the overdue c…
danimetz Nov 9, 2018
eb68b40
Added a .send(params) so we could order our JSON by movie title and c…
danimetz Nov 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
24 changes: 24 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# 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
coverage
1 change: 1 addition & 0 deletions .ruby-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ruby-2.5.1
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) { |repo| "https://github.com/#{repo}.git" }

ruby '2.5.1'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.2.1'
# 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'
gem 'simplecov'
# 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

# 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'
gem 'simplecov', require: false
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.1)
actionpack (= 5.2.1)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
actionmailer (5.2.1)
actionpack (= 5.2.1)
actionview (= 5.2.1)
activejob (= 5.2.1)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
actionpack (5.2.1)
actionview (= 5.2.1)
activesupport (= 5.2.1)
rack (~> 2.0)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (5.2.1)
activesupport (= 5.2.1)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.3)
activejob (5.2.1)
activesupport (= 5.2.1)
globalid (>= 0.3.6)
activemodel (5.2.1)
activesupport (= 5.2.1)
activerecord (5.2.1)
activemodel (= 5.2.1)
activesupport (= 5.2.1)
arel (>= 9.0)
activestorage (5.2.1)
actionpack (= 5.2.1)
activerecord (= 5.2.1)
marcel (~> 0.3.1)
activesupport (5.2.1)
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.3.2)
msgpack (~> 1.0)
builder (3.2.3)
byebug (10.0.2)
coderay (1.1.2)
concurrent-ruby (1.1.1)
crass (1.0.4)
docile (1.3.1)
erubi (1.7.1)
ffi (1.9.25)
globalid (0.4.1)
activesupport (>= 4.2.0)
i18n (1.1.1)
concurrent-ruby (~> 1.0)
json (2.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.3)
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.1)
mimemagic (0.3.2)
mini_mime (1.0.1)
mini_portile2 (2.3.0)
minitest (5.11.3)
minitest-rails (3.0.0)
minitest (~> 5.8)
railties (~> 5.0)
minitest-reporters (1.3.5)
ansi
builder
minitest (>= 5.0)
ruby-progressbar
msgpack (1.2.4)
nio4r (2.3.1)
nokogiri (1.8.5)
mini_portile2 (~> 2.3.0)
pg (1.1.3)
pry (0.12.0)
coderay (~> 1.1.0)
method_source (~> 0.9.0)
pry-rails (0.3.6)
pry (>= 0.10.4)
puma (3.12.0)
rack (2.0.5)
rack-test (1.1.0)
rack (>= 1.0, < 3)
rails (5.2.1)
actioncable (= 5.2.1)
actionmailer (= 5.2.1)
actionpack (= 5.2.1)
actionview (= 5.2.1)
activejob (= 5.2.1)
activemodel (= 5.2.1)
activerecord (= 5.2.1)
activestorage (= 5.2.1)
activesupport (= 5.2.1)
bundler (>= 1.3.0)
railties (= 5.2.1)
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.2.1)
actionpack (= 5.2.1)
activesupport (= 5.2.1)
method_source
rake (>= 0.8.7)
thor (>= 0.19.0, < 2.0)
rake (12.3.1)
rb-fsevent (0.10.3)
rb-inotify (0.9.10)
ffi (>= 0.5.0, < 2)
ruby-progressbar (1.10.0)
ruby_dep (1.5.0)
simplecov (0.16.1)
docile (~> 1.1)
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.2)
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.2)
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.7.0)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.3)

PLATFORMS
ruby

DEPENDENCIES
bootsnap (>= 1.1.0)
byebug
listen (>= 3.0.5, < 3.2)
minitest-rails
minitest-reporters
pg (>= 0.18, < 2.0)
pry-rails
puma (~> 3.11)
rails (~> 5.2.1)
simplecov
spring
spring-watcher-listen (~> 2.0.0)
tzinfo-data

RUBY VERSION
ruby 2.5.1p57

BUNDLED WITH
1.16.5
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
25 changes: 25 additions & 0 deletions app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
class ApplicationController < ActionController::API

def sort(list, params, sort_params, fields, method: nil)

Choose a reason for hiding this comment

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

Good use of the ApplicationController. Should it be private?

# if :method

if params

if sort_params.include?(params)
#list = list.order(params)
list = list.sort_by{ |unit| unit.send(params) }
render json: list.as_json( only: fields , methods: method)

else
render json: { errors: {
title: ["#{list.first.class}s cannot be sorted by #{params}"]
}
},
status: :bad_request
end
else
render json: list.as_json( only: fields, methods: method)
end
# else
end
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
@@fields = [:id, :name, :register, :postal_code, :phone, :registered_at]
@@method = :movies_checked_out_count
@@sort_params = ['name', 'registered_at', 'postal_code']

Choose a reason for hiding this comment

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

In general don't make class variables in Rails controllers. It's a bad practice. Constants are fine


def index
customers = Customer.all
sort(customers, customer_params[:sort], @@sort_params, @@fields, method: @@method)
end

private

def customer_params
params.permit(:sort, :n, :p)
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
@@fields = [:id, :title, :release_date]
@@method = :available_inventory
@@sort_params = ['title', 'release_date']

def index
movies = Movie.all
sort(movies, movie_params[:sort], @@sort_params, @@fields)
end

def show
@movie = Movie.find_by(id: params[:id])
if @movie.nil?
render json: { errors: {
title: ["Movie #{params[:id]} not found"]
}
},
status: :not_found
else
render json: @movie.as_json(methods: :available_inventory, except: [:created_at, :updated_at])

end
end

def create
movie = Movie.new(movie_params)

if movie.save
render json: { id: movie.id }, status: :ok
else
render json: {
errors: {
title: ["Could not create '#{movie_params[:title]}' Movie"]
},
message: movie.errors.messages
}, status: :bad_request
end
end

private

def movie_params
params.permit(:title, :overview, :inventory, :release_date, :sort, :n, :p)
end

end
Loading