Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
7c408f6
set up new rails api project
kangazoom Nov 5, 2018
3f506eb
Set up controllers
sdbenezra Nov 5, 2018
e6a6490
Merge pull request #2 from kangazoom/controller-setup
kangazoom Nov 5, 2018
1bd5efc
Generate models
sdbenezra Nov 5, 2018
5aa37fa
Merge branch 'master' into model-setup
sdbenezra Nov 5, 2018
3717b42
Schema created
sdbenezra Nov 5, 2018
33c7dfa
Add models, foreign key migration, validations to movies
sdbenezra Nov 5, 2018
694de93
Correct validation, add scope to uniqueness
sdbenezra Nov 5, 2018
4d60060
Merge pull request #3 from kangazoom/model-setup
kangazoom Nov 5, 2018
33b76bd
Add test for customer relation to rentals. Fix line in test_helper
sdbenezra Nov 5, 2018
4f0fb98
Add tests, methods, routes for customer controller.
sdbenezra Nov 6, 2018
fdb89ad
Merge pull request #4 from kangazoom/customer-testing
kangazoom Nov 6, 2018
0a0326c
prelim model (validations+relations) + controller tests for movie
kangazoom Nov 6, 2018
ae1f162
Merge pull request #5 from kangazoom/mc-testing-movies
sdbenezra Nov 6, 2018
2dd5c77
Add new movies_checked_out column for customers. Add json formatting …
sdbenezra Nov 6, 2018
edbf03c
set up movies routes + controller for index and show; create still un…
kangazoom Nov 6, 2018
3522803
Merge pull request #6 from kangazoom/customer-testing
kangazoom Nov 6, 2018
8568507
Merge pull request #7 from kangazoom/mc-movies-controller
sdbenezra Nov 6, 2018
57ad4cf
updated movies index and show actions to show proper json entries + a…
kangazoom Nov 6, 2018
6e81c21
added methods to calculate available_inventory for movies
kangazoom Nov 6, 2018
4b99c3c
Merge pull request #8 from kangazoom/mc-movies-controller
sdbenezra Nov 6, 2018
eba15f8
Add controller tests and controller route.
sdbenezra Nov 6, 2018
264444c
Change rentals check_in column name to due_date.
sdbenezra Nov 6, 2018
9ad40f5
got Movies#create working
kangazoom Nov 6, 2018
e35ef3f
updated movie available_inventory method
kangazoom Nov 6, 2018
b4e5b3e
yay movies available_inventory method works yay
kangazoom Nov 6, 2018
1d3f775
Merge pull request #9 from kangazoom/mc-movies-controller
sdbenezra Nov 7, 2018
561b966
Working on rental controller checkout method and testing.
sdbenezra Nov 7, 2018
bc0586c
Merge branch 'master' into rentals
sdbenezra Nov 7, 2018
22a6f8a
Merge pull request #10 from kangazoom/rentals
kangazoom Nov 7, 2018
f8a6c45
tried to get checkout working - see notes in pr
kangazoom Nov 7, 2018
af34d5b
spacing
kangazoom Nov 7, 2018
9e17d5d
Merge pull request #11 from kangazoom/mc-rentals-checkin-checkout
sdbenezra Nov 7, 2018
dc00864
controller tests for movie: #index + #show
kangazoom Nov 7, 2018
bcba2c6
Rentals controller is now working for checkin method and tests are pa…
sdbenezra Nov 7, 2018
ad95cda
Add checked out column to rentals table
sdbenezra Nov 7, 2018
936d78e
wrote tests for custom model movie methods
kangazoom Nov 7, 2018
7f5950d
Added default value to movies available inventory column
sdbenezra Nov 7, 2018
0589583
Merge pull request #12 from kangazoom/rentals
kangazoom Nov 7, 2018
b0f24fd
Merge branch 'master' into rentals
sdbenezra Nov 7, 2018
6dd3db3
Merge pull request #13 from kangazoom/rentals
kangazoom Nov 7, 2018
953baa0
broke movies model methods into smaller pieces, including one to calc…
kangazoom Nov 7, 2018
6b79f25
tests passing - but not for pos cases?
kangazoom Nov 7, 2018
1559426
model tests for calculating a movies checked out rentals
kangazoom Nov 7, 2018
7aeb35b
merged conflicts in rental.rb
kangazoom Nov 7, 2018
ea90e6f
got checked_out? method tests passing for rental model
kangazoom Nov 7, 2018
2625167
can correctly calculate number of checked out rentals for movies
kangazoom Nov 7, 2018
4afb6af
fixed model methods for caclcuate+s available inventory in movies
kangazoom Nov 7, 2018
8c052b6
Rework checkin method to use post. Tests passing for all but inventor…
sdbenezra Nov 7, 2018
6490f58
Merge pull request #14 from kangazoom/rentals
kangazoom Nov 7, 2018
4a18528
began controller testing for Movies#create, but still a work in progress
kangazoom Nov 7, 2018
dd20ded
Merge branch 'master' into mc-testing-movies
sdbenezra Nov 8, 2018
4102c58
Merge pull request #15 from kangazoom/mc-testing-movies
sdbenezra Nov 8, 2018
e6269c4
Rework rentals controller and test to account for changed movie inven…
sdbenezra Nov 8, 2018
4a4fd0f
Add change to customer movies checked out total in rental checkout an…
sdbenezra Nov 8, 2018
97373b4
Merge pull request #16 from kangazoom/rentals
kangazoom Nov 8, 2018
9797f86
added null:false to movies inventory column
kangazoom Nov 8, 2018
bde8611
Merge pull request #17 from kangazoom/mc-db
sdbenezra Nov 8, 2018
6abbd70
changed inventory presence to true (allow nil didn't work); wrote mod…
kangazoom Nov 9, 2018
d429ff6
finished controller tests for Movies#creates; all passing
kangazoom Nov 9, 2018
74064d7
added presence validation + testing for Movies release_date column
kangazoom Nov 9, 2018
b4b2e1c
added some validations for release_date + testing
kangazoom Nov 9, 2018
ef3216a
added strong params to movies controller + adjusted a test for movie …
kangazoom Nov 9, 2018
fb913fb
Merge pull request #18 from kangazoom/mc-testing-movies
sdbenezra 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
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.4.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.4.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.4.1p111

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

def index
customer = Customer.all
render json: jsonify(customer)
end

private

def jsonify(customer_data)
return customer_data.as_json( only: [:id, :name, :registered_at, :address, :city, :state, :postal_code, :phone, :movies_checked_out_count])
end
Copy link

Choose a reason for hiding this comment

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

Nice

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

def index
movies = Movie.all
render json: movies.as_json(only: [:id, :title, :release_date]), status: :ok
end

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

if movie
avail = movie.calculate_available_inventory
result = movie.save_available_inventory(avail)
Copy link

Choose a reason for hiding this comment

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

You end up assigning the result of movie.save_available_inventory(avail) into the variable result, but you don't use result anywhere... you probably don't need to assign this variable to anything


render json: movie.as_json(except: [:created_at, :updated_at]), status: :ok
else
render_error(:not_found, {movie_id: ["no such movie"]})
end
end

def create
movie = Movie.new(movie_params)

result = movie.save
if result
movie_id = movie.id
Copy link

Choose a reason for hiding this comment

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

Same as above: No need to make the movie_id variable here

render json: movie.as_json(only: :id), status: :ok
else
render_error(:bad_request, movie.errors.messages)
end
end

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

end
Loading