Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
7cbbeaa
start new rails api project, generate controller, model, routes
kaganon Nov 5, 2018
5e2a85c
add customers movies join table
kaganon Nov 5, 2018
2efc3a8
add model tests for movie validations and relations
kaganon Nov 5, 2018
a697752
customer model testing
griffifam Nov 5, 2018
af1919a
ran red green test
griffifam Nov 5, 2018
d3bd619
update model test for movies
kaganon Nov 5, 2018
9fce65b
update customers controller actions
kaganon Nov 5, 2018
9750916
update movies controller with methods
griffifam Nov 5, 2018
e8cda1c
fixed merge conflict in application.html
griffifam Nov 5, 2018
a916837
fix merge conflicts
kaganon Nov 5, 2018
c80e7ff
fixed merge conflict
griffifam Nov 5, 2018
f0b25e8
update the yml files
kaganon Nov 6, 2018
cad5ff3
update tests for customers
kaganon Nov 6, 2018
1c0ae72
updated model test movies
griffifam Nov 6, 2018
d1064b9
update movie controller
kaganon Nov 6, 2018
a1017ff
wrote preliminary controller test for movies, updated test_helper
griffifam Nov 6, 2018
e8c016e
Merge branch 'customers' of https://github.com/kaganon/VideoStoreAPI …
griffifam Nov 6, 2018
21d2cee
add model for rentals
kaganon Nov 6, 2018
205c389
updated movie controller tests for api testing
griffifam Nov 6, 2018
5ef4e32
updated controller test with api testing edge case
griffifam Nov 6, 2018
e080dff
add customers controller tests
kaganon Nov 6, 2018
dbc8c35
Merge branch 'customers' of https://github.com/kaganon/VideoStoreAPI …
griffifam Nov 6, 2018
5f2549e
Merge branch 'movies' of https://github.com/kaganon/VideoStoreAPI int…
kaganon Nov 6, 2018
76ae834
created migrations to add dates to rental model and updated rental co…
griffifam Nov 7, 2018
106b92b
add rental controller
kaganon Nov 7, 2018
49c9cb7
fix merge conflicts:
kaganon Nov 7, 2018
2c42061
update rentals controller for checkout and checkin method
kaganon Nov 7, 2018
c0baaa3
add checkin method for rentals controller
kaganon Nov 7, 2018
36b1066
made additions to checkin and checkout rental methods
griffifam Nov 7, 2018
36067a7
fix merge conflicts
griffifam Nov 7, 2018
d9d04fa
updated customer test for data returned on index
griffifam Nov 7, 2018
e9867cf
updated customer/movie model dependent destroy and rental model tests
griffifam Nov 7, 2018
b7f6c85
creating rentals controller tests
griffifam Nov 7, 2018
a9eb18d
update rental controller and model helper methods
kaganon Nov 7, 2018
a8b2f31
resolved merge conflicts and working on failed rental controller test
griffifam Nov 7, 2018
04914cf
update controller tests, yml; wrote method helper tests
griffifam Nov 8, 2018
d372e66
update movie and customer model methods
kaganon Nov 8, 2018
14fb408
updated merge conflict
griffifam Nov 8, 2018
99bc0ba
fix merge conflicts
kaganon Nov 8, 2018
7f439a4
update customer find_movie method
kaganon Nov 8, 2018
df91b2b
updated movie and customer controllers
griffifam Nov 9, 2018
f4d5bdb
update checkout controller tests
kaganon Nov 9, 2018
e58a2e6
update checkin controller tests
kaganon Nov 9, 2018
d75e7ba
fix merge conflicts
kaganon Nov 9, 2018
a52809e
update rentals controller tests
kaganon Nov 9, 2018
23c0d71
updated movie test
griffifam Nov 10, 2018
3eebe3f
Merge branch 'movies' of https://github.com/kaganon/VideoStoreAPI
kaganon Nov 10, 2018
09e4086
update fixture and tests
kaganon Nov 11, 2018
0c0d3b0
update model and controller tests
kaganon Nov 13, 2018
a90b489
updated customer
griffifam Nov 13, 2018
d5a656c
update controller and model tests with more cases
kaganon Nov 13, 2018
d98e397
fix merge conflicts
kaganon Nov 13, 2018
d053947
resolve conflicts on master
kaganon Nov 13, 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
54 changes: 54 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
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'

# 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
169 changes: 169 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
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)
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)

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

RUBY VERSION
ruby 2.5.1p57

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

def index
customers = Customer.all

render json: get_json(customers), status: :ok
end

def show
customer = Customer.find_by(id: params[:id])

if customer
render json: get_json(customer), status: :ok
else
render_error(:not_found, {customer_id: ["Customer does not exist"] } )
end
end


private

def get_json(customer_data)
return customer_data.as_json(except: [:address, :city, :state, :created_at, :updated_at], methods: :movies_checked_out_count)
end



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

def index
movies = Movie.all

render json: get_json(movies), status: :ok
end

def show
movie = Movie.find_by(id: params[:id] )
if movie
render json: get_json(movie), status: :ok
else
render_error(:not_found, { movie_id: ["No such movie exists"] })
end
end

def create
movie = Movie.new(movie_params)

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

private

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


def get_json(movie_data)
return movie_data.as_json(only: [:id, :title, :overview, :release_date, :inventory], methods: :available_inventory)
end
end
Loading