Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Kirsten and Victoria - Ampers - Video Store API #18

Open
wants to merge 67 commits into
base: master
Choose a base branch
from
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
b0d8baa
initial rails project created with special API template.
Lasiorhine May 7, 2018
e94fc6d
added zomg
kschumy May 7, 2018
1c5fed6
added zong to app contoller
kschumy May 7, 2018
0a21018
generated movie model
kschumy May 7, 2018
9d45357
started model for movie
kschumy May 7, 2018
a5ff987
generate customer model
kschumy May 8, 2018
ff83391
made customer yml
kschumy May 8, 2018
c52f9c2
added general validation tests for customer
kschumy May 8, 2018
d51b5ce
added customer validation tests for name
kschumy May 8, 2018
112eca3
added registered_at tests for customer model
kschumy May 8, 2018
a003bb3
added validation to city and address
kschumy May 8, 2018
d30c7fc
added basic validation tests for customer model
kschumy May 8, 2018
a3a315a
minor changes to customer model tests
kschumy May 8, 2018
912ac16
added customer show route
kschumy May 8, 2018
8e27903
...and by customer show I mean customer index
kschumy May 8, 2018
b6231e3
made index in customer controller
kschumy May 8, 2018
a67da50
The things I did on Monday afternoon that were not borked, namely, th…
Lasiorhine May 8, 2018
08bd883
Merging changes after mad migration by VEG
Lasiorhine May 8, 2018
bd85785
committing what wasn't broken after bad migration
Lasiorhine May 8, 2018
40c9768
rebuilt rental-related database stuff after bad migration-a-gogo.
Lasiorhine May 8, 2018
e9c7c40
first round of movie model tests passing after some fails. Want to m…
Lasiorhine May 8, 2018
430a806
added a comment to failing, draft test to make its status clear.
Lasiorhine May 8, 2018
4e89020
added route for customers index
kschumy May 8, 2018
2281e18
Basic controller files for movies created.
Lasiorhine May 8, 2018
04fa87b
created test for customer index
kschumy May 8, 2018
5f536ba
Merge branch 'making-customer-controller'
kschumy May 8, 2018
98cf0b8
snapshot of master before changing rental model logic completely
kschumy May 8, 2018
41f1c25
removed columns from rental model
kschumy May 8, 2018
03f5ecc
modified yml for rental model and laid out some model logic
kschumy May 8, 2018
1e90053
added initial validiation test and relationship test for rental model
kschumy May 8, 2018
4c1fa04
added relationship tests to rental model
kschumy May 8, 2018
52bbbad
cleaned up date validation for rental model
kschumy May 8, 2018
e6c6ca1
undid all the changes I made in an effort to get the output of the av…
Lasiorhine May 8, 2018
51f8390
rental model date validates and tears
kschumy May 8, 2018
0d7974c
tidied up
kschumy May 8, 2018
7a58880
created rentals controller and updated routes
kschumy May 8, 2018
874e678
added rental controller checkout logic
kschumy May 8, 2018
6b70980
I think I resolved a tiny merge conflict. I think.
Lasiorhine May 8, 2018
e0d66de
fix some problems I definitely caused
kschumy May 8, 2018
8aeb2ad
roughed out the controller for Movie.
Lasiorhine May 8, 2018
49a1820
resolved tiny merge conflict in rental model
Lasiorhine May 8, 2018
fa3dfca
this holds a teensy, teensy change to the schema that was produced by…
Lasiorhine May 8, 2018
cfd24b7
timezones broke test so set time
kschumy May 9, 2018
4b6d489
additional date methods for rental
kschumy May 9, 2018
acb445a
Full set of movie controller tests are written and passing, after app…
Lasiorhine May 9, 2018
4f1dde0
Okay, so there was one fail in the Movies controller test. But I fix…
Lasiorhine May 9, 2018
9cbbc9e
cleaned up rental model and rental model tests
kschumy May 9, 2018
a0a88a9
Movie model and controller tests are now finalized, except for tests …
Lasiorhine May 9, 2018
051faa9
Merging from master because that's what you do.
Lasiorhine May 9, 2018
e2fc23e
First relationship test for Movie model is passing, after appropriate…
Lasiorhine May 9, 2018
43b73d4
all tests for Movie model relationships now completed.
Lasiorhine May 9, 2018
709c204
refactored Movie model test with mixed succes.
Lasiorhine May 9, 2018
e7386b5
tests for movies model method available_inventory are written, and fa…
Lasiorhine May 9, 2018
c1b5c04
all the the tests for the Movie model method 'available_inventory' ar…
Lasiorhine May 9, 2018
1271dd6
initial return rental model testing
kschumy May 9, 2018
35b08ae
Merge branch 'master' of https://github.com/Lasiorhine/VideoStoreAPI
kschumy May 9, 2018
f66a218
added controller stuff
kschumy May 10, 2018
a2e4e6b
cleaned out old code
kschumy May 10, 2018
d0126a9
fixed rentals controller errors found with smoke tests
kschumy May 10, 2018
b671058
Changed the movie model's strong params to make everything work.
Lasiorhine May 10, 2018
90ae540
Merging is life.
Lasiorhine May 10, 2018
28db912
fixed bug in rental model
kschumy May 10, 2018
67ccb66
Merge branch 'master' of https://github.com/Lasiorhine/VideoStoreAPI
kschumy May 10, 2018
daadb8f
fixed the strong params in Movie so the JSON would be properly formed.
Lasiorhine May 11, 2018
31c19a3
Fixed movie controller tests to comport with change to the movie stro…
Lasiorhine May 11, 2018
af9c883
controller tests for customer's index method and model tests for cust…
Lasiorhine May 11, 2018
572e9c8
all tests for the customers controller and model are now passing, aft…
Lasiorhine 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
Binary file added .DS_Store
Binary file not shown.
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
154 changes: 154 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
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)
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
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
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
4 changes: 4 additions & 0 deletions app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
class ApplicationController < ActionController::API
def zomg
end
end
Empty file added app/controllers/concerns/.keep
Empty file.
24 changes: 24 additions & 0 deletions app/controllers/customers_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
class CustomersController < ApplicationController

# def index
# customers = Customer.all
# render json: customers.as_json(only: [:id, :name, :registered_at, :postal_code, :phone, :movies_checked_out_count]), status: :ok
# end

def index
customer_info_array = []
customers = Customer.all
customers.each do |customer|
customer_hash = {
id: customer.id,
name: customer.name,
registered_at: customer.registered_at,
postal_code: customer.postal_code,
phone: customer.phone,
movies_checked_out_count: customer.movies_checked_out_count}
customer_info_array << customer_hash
end
render json: customer_info_array.as_json, 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
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 => {
id: movie.id,
title: movie.title,
overview: movie.overview,
release_date: movie.release_date,
inventory: movie.inventory,
available_inventory: movie.available_inventory,
ok: true
}
else
render json: {ok: false}, status: :not_found
end
end

def create
movie = Movie.create(movie_params)
if movie.valid?
render json: {
id: movie.id,
ok: true }, status: :ok
else
render json: {
errors: movie.errors.messages,
ok: false
}, status: :bad_request
end
end

private

def movie_params
params.permit(:title, :overview, :release_date, :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

def checkout
rental = Rental.create(rental_params)
if rental.valid?
render json: {
id: rental.id,
due_date: rental.get_due_date,
checked_out?: rental.is_checked_out?,
overdue?: rental.is_overdue?
}, status: :ok
else
render json: { errors: rental.errors.messages },
status: :bad_request
end
end

def checkin
rental = Rental.find_by(customer_id: params["customer_id"], movie_id: params["movie_id"])
if rental
rental.return_rental
if rental.save
render json: {id: rental.id}, status: :ok
else
render json: { errors: rental.errors.messages },
status: :bad_request
end
else
render json: {ok: false, errors: "Rental not found"}, status: :not_found
end
end

private
def rental_params
params.require(:rental).permit(:id, :check_in_date, :movie_id, :customer_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: '[email protected]'
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.
Loading