Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
e618db2
intial set up for rails new api
snicodimos Nov 5, 2018
f1ac3c8
create new controllers and routes for customers and movies
goeunpark Nov 5, 2018
87f1196
test routes work
goeunpark Nov 5, 2018
32dc5e2
test zomg
goeunpark Nov 5, 2018
045f477
create model for movie and customer
goeunpark Nov 5, 2018
598c0af
add validations in models
goeunpark Nov 5, 2018
e11b1a5
first test in customers controller, fix test helper
goeunpark Nov 5, 2018
c276635
scaffolding for movie controller tests
goeunpark Nov 5, 2018
d42fd3a
add yml files
goeunpark Nov 5, 2018
98a97fa
add validation testing for movie model
goeunpark Nov 5, 2018
a80bd95
customer validations
snicodimos Nov 5, 2018
91c026e
index and helper method for movies controller
snicodimos Nov 5, 2018
c433bbe
index and helper method for customer controller
snicodimos Nov 5, 2018
a4078c9
added show method in movie controller
snicodimos Nov 6, 2018
40c0263
made minor changes in both movie and customer controller of things to…
snicodimos Nov 6, 2018
eba61e4
added create method for movie controller
snicodimos Nov 6, 2018
21785f7
added two migrations to add colums for rental wave
snicodimos Nov 6, 2018
f27fabf
created controller and model for rental
snicodimos Nov 6, 2018
0d2d924
added new non-restful routes and added model validations to rentals
snicodimos Nov 6, 2018
5e16e0c
added another migration to add foreign key and due date col
snicodimos Nov 6, 2018
45cb9d9
added another migration to add status in rental db, and psedo coded r…
snicodimos Nov 6, 2018
44af084
take out _id in yml, validations testing for rental model green
goeunpark Nov 6, 2018
9518052
added relational testing
goeunpark Nov 6, 2018
f66b4c7
added relation tests for movies and customer model testing
snicodimos Nov 6, 2018
e0ecee8
fix rentals yml, refactor using let in test
goeunpark Nov 6, 2018
e3102da
Merge branch 'master' of https://github.com/snicodimos/VideoStoreAPI
snicodimos Nov 6, 2018
7d1e3b3
remove spaces
goeunpark Nov 6, 2018
4b34128
nullify dependent rental in movie model
goeunpark Nov 6, 2018
90459df
add helper method check_response for controller tests
goeunpark Nov 6, 2018
48656b6
tests for index, show, create
goeunpark Nov 6, 2018
c4464bd
customer controller tests
snicodimos Nov 6, 2018
85db49a
Merge branch 'master' of https://github.com/snicodimos/VideoStoreAPI
snicodimos Nov 6, 2018
5e5a375
added helper method in tests that will be used with movie and custome…
snicodimos Nov 6, 2018
8f7ff54
created helper method to set available as inventory at initialization
snicodimos Nov 6, 2018
115ead4
added checked out movie var for customers
snicodimos Nov 6, 2018
81a8f7c
Added movie checked var to the test
snicodimos Nov 6, 2018
0d4ca14
add due_date and checkedout in yml
goeunpark Nov 6, 2018
43f857a
create movie yml with no available inventory
goeunpark Nov 6, 2018
2d7b7da
created route shortcuts
goeunpark Nov 6, 2018
adb36ce
create two tests for checkout in rentals controller
goeunpark Nov 6, 2018
ab4f54d
increments movies checked out, decrements available inventory, tests …
goeunpark Nov 6, 2018
7c3c542
adjustments in routes and controllers to pass smoke tests
goeunpark Nov 6, 2018
92123d6
remove spaces
goeunpark Nov 7, 2018
45928c0
Checkin method in rental controller and checkin test for that method
snicodimos Nov 7, 2018
5e0e5d7
refactor rentals controller test
goeunpark Nov 7, 2018
a350804
test for returning error for rentals that DNE
goeunpark Nov 7, 2018
11c6434
refactor rent_movie and return_movie to model testing
goeunpark Nov 7, 2018
e71b812
spacing
goeunpark Nov 7, 2018
119e095
add sorting by name functionality
goeunpark Nov 7, 2018
1a1bd5b
take out unnecessary line
goeunpark Nov 7, 2018
9ddb611
add will_paginate, create paginate conditional in index customers
goeunpark Nov 7, 2018
7b9a691
added pagination gem
snicodimos Nov 7, 2018
503f2b2
add pagination options to controller
goeunpark Nov 7, 2018
5c440ca
take out spaces
goeunpark Nov 7, 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
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 @@
ruby-2.5.1
58 changes: 58 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.5.1'

gem "will_paginate"

gem 'api-pagination'

# 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'

# 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'
end
173 changes: 173 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
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)
api-pagination (4.8.1)
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)
erubi (1.7.1)
ffi (1.9.25)
globalid (0.4.1)
activesupport (>= 4.2.0)
i18n (1.1.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.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)
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)
will_paginate (3.0.12)

PLATFORMS
ruby

DEPENDENCIES
api-pagination
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)
spring
spring-watcher-listen (~> 2.0.0)
tzinfo-data
will_paginate

RUBY VERSION
ruby 2.5.1p57

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

def render_error(status, errors)
render json: { errors: errors}, status: status

end
end
Empty file added app/controllers/concerns/.keep
Empty file.
21 changes: 21 additions & 0 deletions app/controllers/customers_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
class CustomersController < ApplicationController

def index
customers = Customer.all
# sorting case sensitive, names must be capitalized
if params[:n] && params[:p] && params[:sort]
customers = Customer.paginate(:page => params[:p], :per_page => params[:n]).order(params['sort'])
elsif params[:n] && params[:p]
customers = Customer.paginate(:page => params[:p], :per_page => params[:n])
else params[:sort]
customers = Customer.order(params['sort'])
end
render json: jsonify(customers), status: :ok
end

private

def jsonify(customer_data)
return customer_data.as_json(only: [:id, :name, :registered_at, :postal_code, :phone, :movies_checked_out_count])
end
end
47 changes: 47 additions & 0 deletions app/controllers/movies_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
class MoviesController < ApplicationController

def index
movies = Movie.all
render json: jsonify_index(movies), status: :ok
end

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

if movie
render json: jsonify_show(movie), status: :ok
else
render_error(:not_found, {id: ["Movie with id: #{movie_id} not found"]})
end
end

def create
movie = Movie.new(movie_params)

if movie.save
render json: {id: movie.id}
else
render_error(:bad_request, movie.errors.messages)
end
end

private

def movie_params
# 11 tests are failing and found out that we need to change the params from
# params.require(:movie)
# now 8 tests passed on postman
Copy link

@tildeee tildeee Nov 20, 2018

Choose a reason for hiding this comment

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

What is this comment in reference to so I can address it?

Copy link
Author

Choose a reason for hiding this comment

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

Oh these were our note for ourselves but we forgot to delete it in the final version. All of our tests pass. Sorry for the confusion.


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

def jsonify_index(movie_data)
return movie_data.as_json(only: [:id, :title, :release_date])
end

def jsonify_show(movie_data)
return movie_data.as_json(only: [:title, :overview, :release_date, :inventory, :available_inventory])
end

end
Loading