-
Notifications
You must be signed in to change notification settings - Fork 26
Kasey && Shubha #28
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
base: master
Are you sure you want to change the base?
Kasey && Shubha #28
Changes from all commits
9c96279
f28ecfb
58709f8
da782b2
8a16b20
c8a5cfa
3b7632d
2b7c217
e492328
ed5bf84
c298b19
4322d54
f94b5a7
1967bf7
cec42ca
04b7e7d
97caac1
758cb4e
8ac2555
28177ce
eb64402
8bad08c
864e9ad
bc8431f
d3e1c08
38a5c83
b9c5c20
d6fc271
0ea6449
edd5bd0
f3d7fed
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| 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 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| ruby-2.5.1 |
| 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.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 :test do | ||
| gem 'minitest-rails' | ||
| gem 'minitest-reporters' | ||
| end |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,169 @@ | ||
| 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.4) | ||
| msgpack (~> 1.0) | ||
| builder (3.2.3) | ||
| byebug (11.0.1) | ||
| coderay (1.1.2) | ||
| concurrent-ruby (1.1.5) | ||
| crass (1.0.4) | ||
| erubi (1.8.0) | ||
| ffi (1.10.0) | ||
| globalid (0.4.2) | ||
| activesupport (>= 4.2.0) | ||
| i18n (1.6.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.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.2) | ||
| mimemagic (0.3.3) | ||
| mini_mime (1.0.1) | ||
| mini_portile2 (2.4.0) | ||
| minitest (5.11.3) | ||
| minitest-rails (3.0.0) | ||
| minitest (~> 5.8) | ||
| railties (~> 5.0) | ||
| minitest-reporters (1.3.6) | ||
| ansi | ||
| builder | ||
| minitest (>= 5.0) | ||
| ruby-progressbar | ||
| msgpack (1.2.10) | ||
| nio4r (2.3.1) | ||
| nokogiri (1.10.3) | ||
| 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.0.4) | ||
| loofah (~> 2.2, >= 2.2.2) | ||
| 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 (12.3.2) | ||
| rb-fsevent (0.10.3) | ||
| rb-inotify (0.10.0) | ||
| ffi (~> 1.0) | ||
| 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.3) | ||
| 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.3) | ||
| spring | ||
| spring-watcher-listen (~> 2.0.0) | ||
| tzinfo-data | ||
|
|
||
| RUBY VERSION | ||
| ruby 2.5.1p57 | ||
|
|
||
| BUNDLED WITH | ||
| 2.0.1 |
| 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 |
| 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 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| module ApplicationCable | ||
| class Channel < ActionCable::Channel::Base | ||
| end | ||
| end |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| module ApplicationCable | ||
| class Connection < ActionCable::Connection::Base | ||
| end | ||
| end |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| class ApplicationController < ActionController::API | ||
| end |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| class CustomersController < ApplicationController | ||
| def index | ||
| customers = Customer.all.map { |customer| customer.as_json(only: [:id, :name, :registered_at, :address, :city, :state, :postal_code, :phone]).merge({ "movies_checked_out_count": customer.checked_out_count }) } | ||
| render status: :ok, json: customers.as_json | ||
| end | ||
|
|
||
| private | ||
|
|
||
| def customer_params | ||
| params.permit(:name, :registered_at, :address, :city, :state, :postal_code, :phone) | ||
| end | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't think this method is ever used. |
||
| end | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| class MoviesController < ApplicationController | ||
| def index | ||
| movies = Movie.all | ||
| render status: :ok, json: movies.as_json(only: [:id, :title, :overview, :release_date, :inventory]) | ||
| end | ||
|
|
||
| def show | ||
| movie = Movie.find_by(id: params[:id]) | ||
| if movie | ||
| render status: :ok, json: movie.as_json(only: [:id, :title, :overview, :release_date, :inventory]).merge({"available_inventory": movie.number_available}) | ||
| else | ||
| render status: :not_found, json: {errors: ["id": "The movie you are looking for with id #{params[:id]} was not found"]} | ||
| end | ||
| end | ||
|
|
||
| def create | ||
| movie = Movie.new(movie_params) | ||
| if movie.save | ||
| render status: :ok, json: movie.as_json(only: [:id, :title, :overview, :release_date, :inventory]).merge({"available_inventory": movie.number_available}) | ||
| else | ||
| render status: :bad_request, json: {errors: movie.errors.messages} | ||
| end | ||
| end | ||
|
|
||
| private | ||
|
|
||
| def movie_params | ||
| params.permit(:title, :overview, :release_date, :inventory) | ||
| end | ||
| end |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| class RentalsController < ApplicationController | ||
| def checkout | ||
| rental = Rental.new(movie_id: params[:movie_id], | ||
| customer_id: params[:customer_id], | ||
| checkout: DateTime.now, | ||
| due: DateTime.now + 7.days) | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This code is pretty concise, but it might work even better as a model method, something like: That means you don't need the date logic here in the controller, and that you could include some targeted model testing for it. |
||
|
|
||
| if rental.save | ||
| render status: :ok, json: rental.as_json(only: [:movie_id, :customer_id, :checkout, :due, :returned]) | ||
| else | ||
| render status: :bad_request, json: {errors: rental.errors.messages} | ||
| end | ||
| end | ||
|
|
||
| def checkin | ||
| rental = Rental.find_by(movie_id: params[:movie_id], | ||
| customer_id: params[:customer_id], | ||
| returned: false) | ||
| unless rental | ||
| render status: :not_found, json: {errors: ["The rental you requested was not found"]} | ||
| return | ||
| end | ||
| rental.returned = true | ||
| if rental.save | ||
| render status: :ok, json: rental.as_json(only: [:movie_id, :customer_id, :checkout, :due, :returned]) | ||
| else | ||
| render status: :bad_request, json: {errors: [rental.errors.messages]} | ||
| end | ||
| end | ||
| end | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| class ApplicationJob < ActiveJob::Base | ||
| end |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| class ApplicationMailer < ActionMailer::Base | ||
| default from: 'from@example.com' | ||
| layout 'mailer' | ||
| end |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| class ApplicationRecord < ActiveRecord::Base | ||
| self.abstract_class = true | ||
| end |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| class Customer < ApplicationRecord | ||
| has_many :rentals | ||
| has_many :movies, through: :rentals | ||
|
|
||
| validates :name, presence: true | ||
|
|
||
| def checked_out_count | ||
| return self.rentals.select { |rental| !rental.returned }.count | ||
| end | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I love that you made |
||
| end | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| class Movie < ApplicationRecord | ||
| has_many :rentals | ||
| has_many :customers, through: :rentals | ||
|
|
||
| validates :title, :inventory, presence: true | ||
|
|
||
| def number_available | ||
| checked_out = self.rentals.select { |rental| !rental.returned }.count | ||
|
|
||
| return inventory - checked_out | ||
| end | ||
| end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would definitely encourage you to split line 3 up. Most style guides encourage no more than 80 characters on a line.