Skip to content
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
b0297ae
First commit new rails app
raisahv Nov 5, 2019
e94f179
Added Customer & Movie models
kelsk Nov 5, 2019
61c64b9
Merge pull request #1 from rvesteinsdottir/model-migrations
kelsk Nov 5, 2019
46602cb
Movies#index controller action and tests
raisahv Nov 5, 2019
c633d0d
Added Customers controller & tests
kelsk Nov 5, 2019
208d8ce
Merge pull request #2 from rvesteinsdottir/customers-controller
kelsk Nov 5, 2019
1408e23
Merge from master
raisahv Nov 5, 2019
25a7e5b
Movies#show action controller method and tests
raisahv Nov 5, 2019
d35da4c
Added Movies#create controller action and tests
raisahv Nov 5, 2019
660fc80
Updated Movie model tests
raisahv Nov 5, 2019
8b875b0
Merge pull request #3 from rvesteinsdottir/rav/movies
raisahv Nov 5, 2019
ccc6990
Added Rental model and tests for relationship with Customer & Movie
kelsk Nov 5, 2019
f9eb3ab
Added validation and relationship model tests to Rental
kelsk Nov 5, 2019
ac0e0a0
Added Rental controller and tests
kelsk Nov 5, 2019
e17f928
Merge pull request #4 from rvesteinsdottir/rental-model
kelsk Nov 5, 2019
f682d3f
Updates to Customer model and Movie seed
raisahv Nov 5, 2019
f6a4590
Custom method tests for check out rental method
raisahv Nov 5, 2019
7bd59a4
Updated rentals controller tests with updates to create method
raisahv Nov 5, 2019
4e29070
Updated Rentals#create
raisahv Nov 5, 2019
3de205d
Merge pull request #5 from rvesteinsdottir/rav/rentals
raisahv Nov 5, 2019
b01994b
Added Checkin method, tests passing
kelsk Nov 6, 2019
14b64fc
Corrected Rental controller update params
kelsk Nov 6, 2019
c061201
Merge pull request #6 from rvesteinsdottir/customers-controller
raisahv Nov 6, 2019
ede2c9d
Updates to Rentals controller tests with new params
raisahv Nov 6, 2019
bdfd359
Refactored Rentals controller test code
raisahv Nov 6, 2019
1f0bc2e
Refactored rental model tests
raisahv Nov 6, 2019
4d28a33
Added validation for Movie inventory
raisahv Nov 6, 2019
e730af8
Status changes for postman
raisahv Nov 6, 2019
60bee0f
Merge pull request #7 from rvesteinsdottir/rav/rentals
raisahv Nov 6, 2019
7023034
Added params to Customers Controller
raisahv Nov 6, 2019
5d53dcb
Merge pull request #8 from rvesteinsdottir/rav/rentals
raisahv Nov 6, 2019
201ba7c
Refactored Customer controller & model sort methods
kelsk Nov 6, 2019
fc71b3e
Merge pull request #9 from rvesteinsdottir/customers-tests
kelsk Nov 6, 2019
06bc8b8
Added tests for custom Customer model methods
raisahv Nov 6, 2019
095f9e2
Added test helper method to check response for json
kelsk Nov 7, 2019
28b0c83
Impletmented check_response helper in Movies, Customers, and Rentals …
kelsk Nov 7, 2019
f5c683f
Merge pull request #10 from rvesteinsdottir/rentals-tests
kelsk Nov 7, 2019
7ce2c2a
Added tests for custom model methods for Customer model
raisahv Nov 7, 2019
74c6bba
Merge branch 'master' into rav/customers
raisahv Nov 7, 2019
c19ee60
Merge pull request #11 from rvesteinsdottir/rav/customers
raisahv Nov 7, 2019
24f68ed
Specious Customer code added
kelsk Nov 7, 2019
5d6a62f
Added returned column to rentals model
raisahv Nov 7, 2019
dbf0aad
Added code & tests to handle sort param exceptions
kelsk Nov 7, 2019
36a9ba8
Updated model methods for Rentals, Customer, Movie
raisahv Nov 7, 2019
ca929a4
Merge branch 'master' into rav/rentals
raisahv Nov 7, 2019
72bbf95
Merge pull request #12 from rvesteinsdottir/rav/rentals
raisahv Nov 7, 2019
1706dcd
Working Customer code added, 'group by n' code refactored
kelsk Nov 7, 2019
0f295cf
Added negative tests to Rentals controller
raisahv Nov 7, 2019
f1081c5
Merge pull request #13 from rvesteinsdottir/customers-tests
kelsk Nov 7, 2019
3b152ba
Merge branch 'master' into rav/rentals
raisahv Nov 7, 2019
f3fbf6b
Merge pull request #14 from rvesteinsdottir/rav/rentals
raisahv Nov 7, 2019
0ee20e2
Made tests for overdue rentals
kelsk Nov 8, 2019
7f3ad87
Added code for overdue rentals, excluding customer- & movie-specific …
kelsk Nov 8, 2019
bb4f728
Refactored all controller tests
raisahv Nov 8, 2019
48d11e3
Refactored all model tests
raisahv Nov 8, 2019
6bf189a
Merge branch 'master' into rav/rentals
raisahv Nov 8, 2019
3af909b
Small refactors to customers model method
raisahv Nov 8, 2019
301e07d
Merge pull request #15 from rvesteinsdottir/rav/rentals
raisahv Nov 8, 2019
97be81b
Working code for overdue methods implemented
kelsk Nov 8, 2019
58209bf
Merged with master
kelsk Nov 8, 2019
ba4a257
Updated rentals controller tests
raisahv Nov 8, 2019
b6da163
Added sort categories to customers controller
raisahv Nov 8, 2019
5ec50ab
Updated rentals controller tests
raisahv Nov 8, 2019
77ecb69
Updated rental model tests
raisahv Nov 8, 2019
455457e
Updated Controller to include error responses for bad requests
kelsk Nov 8, 2019
6b5662f
Final cleaning up code
kelsk Nov 8, 2019
de017df
Merge pull request #17 from rvesteinsdottir/inventory-mgmt
kelsk Nov 8, 2019
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 @@
2.5.5
59 changes: 59 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.5.5'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.2.3'
# 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 :development do
gem 'debase', '>= 0.2.4.1'
gem 'ruby-debug-ide', '>= 0.7.0'
end

group :test do
gem 'minitest-rails'
gem 'minitest-reporters'
end
175 changes: 175 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
GEM
remote: https://rubygems.org/
specs:
actioncable (5.2.3)
actionpack (= 5.2.3)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
actionmailer (5.2.3)
actionpack (= 5.2.3)
actionview (= 5.2.3)
activejob (= 5.2.3)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
actionpack (5.2.3)
actionview (= 5.2.3)
activesupport (= 5.2.3)
rack (~> 2.0)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (5.2.3)
activesupport (= 5.2.3)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.3)
activejob (5.2.3)
activesupport (= 5.2.3)
globalid (>= 0.3.6)
activemodel (5.2.3)
activesupport (= 5.2.3)
activerecord (5.2.3)
activemodel (= 5.2.3)
activesupport (= 5.2.3)
arel (>= 9.0)
activestorage (5.2.3)
actionpack (= 5.2.3)
activerecord (= 5.2.3)
marcel (~> 0.3.1)
activesupport (5.2.3)
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.4.5)
msgpack (~> 1.0)
builder (3.2.3)
byebug (11.0.1)
coderay (1.1.2)
concurrent-ruby (1.1.5)
crass (1.0.5)
debase (0.2.4.1)
debase-ruby_core_source (>= 0.10.2)
debase-ruby_core_source (0.10.6)
erubi (1.9.0)
ffi (1.11.1)
globalid (0.4.2)
activesupport (>= 4.2.0)
i18n (1.7.0)
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.3.1)
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.2)
mimemagic (0.3.3)
mini_mime (1.0.2)
mini_portile2 (2.4.0)
minitest (5.13.0)
minitest-rails (5.2.0)
minitest (~> 5.10)
railties (~> 5.2.0)
minitest-reporters (1.4.2)
ansi
builder
minitest (>= 5.0)
ruby-progressbar
msgpack (1.3.1)
nio4r (2.5.2)
nokogiri (1.10.5)
mini_portile2 (~> 2.4.0)
pg (1.1.4)
pry (0.12.2)
coderay (~> 1.1.0)
method_source (~> 0.9.0)
pry-rails (0.3.9)
pry (>= 0.10.4)
puma (3.12.1)
rack (2.0.7)
rack-test (1.1.0)
rack (>= 1.0, < 3)
rails (5.2.3)
actioncable (= 5.2.3)
actionmailer (= 5.2.3)
actionpack (= 5.2.3)
actionview (= 5.2.3)
activejob (= 5.2.3)
activemodel (= 5.2.3)
activerecord (= 5.2.3)
activestorage (= 5.2.3)
activesupport (= 5.2.3)
bundler (>= 1.3.0)
railties (= 5.2.3)
sprockets-rails (>= 2.0.0)
rails-dom-testing (2.0.3)
activesupport (>= 4.2.0)
nokogiri (>= 1.6)
rails-html-sanitizer (1.3.0)
loofah (~> 2.3)
railties (5.2.3)
actionpack (= 5.2.3)
activesupport (= 5.2.3)
method_source
rake (>= 0.8.7)
thor (>= 0.19.0, < 2.0)
rake (13.0.0)
rb-fsevent (0.10.3)
rb-inotify (0.10.0)
ffi (~> 1.0)
ruby-debug-ide (0.7.0)
rake (>= 0.8.1)
ruby-progressbar (1.10.1)
ruby_dep (1.5.0)
spring (2.1.0)
spring-watcher-listen (2.0.1)
listen (>= 2.7, < 4.0)
spring (>= 1.2, < 3.0)
sprockets (4.0.0)
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.3)
thread_safe (0.3.6)
tzinfo (1.2.5)
thread_safe (~> 0.1)
websocket-driver (0.7.1)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.4)

PLATFORMS
ruby

DEPENDENCIES
bootsnap (>= 1.1.0)
byebug
debase (>= 0.2.4.1)
listen (>= 3.0.5, < 3.2)
minitest-rails
minitest-reporters
pg (>= 0.18, < 2.0)
pry-rails
puma (~> 3.11)
rails (~> 5.2.3)
ruby-debug-ide (>= 0.7.0)
spring
spring-watcher-listen (~> 2.0.0)
tzinfo-data

RUBY VERSION
ruby 2.5.5p157

BUNDLED WITH
2.0.2
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
2 changes: 2 additions & 0 deletions app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class ApplicationController < ActionController::API
end
Empty file added app/controllers/concerns/.keep
Empty file.
31 changes: 31 additions & 0 deletions app/controllers/customers_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
class CustomersController < ApplicationController
SORT_CATEGORIES = ["name", "registered_at", "postal_code"]

def index
if params[:sort] && SORT_CATEGORIES.include?(params[:sort]) == false
render json: {ok: false, "errors" => ["invalid sort category"]}, status: :bad_request
return
end

if params[:sort] || params[:n] || params[:p]
if !params[:n].nil? && params[:n].to_i <= 0
render json: {ok: false, "errors" => ["unable to group customers"]}, status: :bad_request
return
elsif !params[:p].nil? && params[:p].to_i <= 0
render json: {ok: false, "errors" => ["unable to group customers"]}, status: :bad_request
return
else
customers = Customer.group_by_n(params[:sort], params[:n], params[:p])
end
if customers == nil
render json: {ok: false, "errors" => ["not found"]}, status: :not_found
return
end
else
customers = Customer.all
end

render json: customers.as_json(only: [:id, :name, :registered_at, :postal_code, :phone, :movies_checked_out_count]), status: :ok
return
end
end
41 changes: 41 additions & 0 deletions app/controllers/movies_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
KEYS = [:id, :title, :overview, :release_date]

class MoviesController < ApplicationController
def index
movies = Movie.all

render json: movies.as_json(only: KEYS), status: :ok
return
end

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

if movie
render json: movie.as_json(only: [:id, :title, :release_date, :overview, :inventory, :available_inventory]), status: :ok
return
else
render json: { ok: false, "errors" => ["not found"] }, status: :not_found
return
end
end

def create
movie = Movie.new(movie_params)
movie.available_inventory = movie.inventory

if movie.save
render json: movie.as_json(only: [:id]), status: :ok
return
else
render json: { ok: false, "errors" => ["unable to create movie"] }, status: :bad_request
return
end
end

private

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