-
Notifications
You must be signed in to change notification settings - Fork 26
Maria and Shamira #31
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?
Changes from all commits
0cf7170
f638c22
930d788
1d66f70
343bfd9
49a5460
d3c3cf6
b04a886
2500df4
2495d9b
0be9948
9398ef5
4b4291b
25e4326
954c0d4
3ee08df
5036899
5461cf1
4076896
a3f9a16
fedf02f
a896322
7e0e75b
04ccc50
2f4a042
eedb681
1516a8b
b9344c8
2d0a617
73840d9
093779c
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 | ||
| 1.17.3 |
| 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,21 @@ | ||
| 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 show | ||
| customer = Customer.find_by(id: params[:id]) | ||
| if customer | ||
| render status: :ok, json: customer.as_json(only: [:id, :name, :registered_at, :adress, :city, :state, :postal_code, :phone, :movies_checked_out_count]), status: :ok | ||
| else | ||
| render status: :not_found, json: { ok: false, messages: "Movie was not found!" } | ||
|
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 is a customer... Copy pasta is dangerous! |
||
| end | ||
| end | ||
|
|
||
| private | ||
|
|
||
| def customer_params | ||
| params.require(:customer).permit(:name, :registered_at, :postal_code, :phone, :movies_checked_out_count) | ||
| end | ||
| end | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| class MoviesController < ApplicationController | ||
| def index | ||
| movies = Movie.all | ||
| render json: movies.as_json(only: [:id, :available_inventory, :inventory, :overview, :release_date, :title]), status: :ok | ||
| end | ||
|
|
||
| def show | ||
| movie = Movie.find_by(id: params[:id]) | ||
|
|
||
| if !movie.nil? | ||
| render json: movie.as_json(only: [:title, :overview, :release_date, :inventory, :available_inventory]), | ||
| status: :ok | ||
| else | ||
| render json: {ok: false, errors: ["Movie not found"]}, | ||
| status: :not_found | ||
| end | ||
| end | ||
|
|
||
| def create | ||
| movie = Movie.new(movie_params) | ||
|
|
||
| if movie.save | ||
| render json: movie.as_json(only: [:id, :title, :overview, :release_date, :inventory, :available_inventory]), | ||
| status: :ok | ||
| else | ||
| render json: {ok: false, errors: movie.errors.messages}, | ||
| status: :bad_request | ||
| end | ||
| end | ||
|
|
||
| private | ||
|
|
||
| def movie_params | ||
| params.permit(:title, :overview, :release_date, :inventory, :available_inventory) | ||
| end | ||
| end |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,51 @@ | ||
| require "date" | ||
|
|
||
| class RentalsController < ApplicationController | ||
| def check_out | ||
| rental = Rental.new(rental_params) | ||
| customer = Customer.find_by(id: rental.customer_id) | ||
| movie = Movie.find_by(id: rental.movie_id) | ||
|
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. You have a bunch of business logic here! Would it be possible to encapsulate this in a model method? Something like might be a good interface. That would make this logic easier to test as well. |
||
|
|
||
| if movie.available_inventory == 0 | ||
| render status: :not_found, json: { ok: false, mesages: "Movie not found" } | ||
| end | ||
|
|
||
| rental.check_out = Date.today | ||
| rental.due_date = rental.check_out + 7 | ||
|
|
||
| if rental.save | ||
| render status: :ok, json: { id: rental.id } | ||
| customer_movie_count = customer.movies_checked_out_count | ||
| customer.update(movies_checked_out_count: customer_movie_count + 1) | ||
|
|
||
| movie_inventory = movie.available_inventory | ||
| movie.update(available_inventory: movie_inventory - 1) | ||
| else | ||
| render status: :bad_request, json: { ok: false, errors: rental.errors } | ||
| end | ||
| end | ||
|
|
||
| def check_in | ||
| rental = Rental.where(["movie_id = ? and customer_id = ?", params[:rental][:movie_id], params[:rental][:customer_id]]).first | ||
| rental.check_in = Date.today | ||
| customer = Customer.find_by(id: rental.customer_id) | ||
| movie = Movie.find_by(id: rental.movie_id) | ||
|
|
||
| if rental.save | ||
| render json: { id: rental.id }, status: :ok | ||
| customer_movie_count = customer.movies_checked_out_count | ||
| customer.update(movies_checked_out_count: customer_movie_count - 1) | ||
|
|
||
| movie_inventory = movie.available_inventory | ||
| movie.update(available_inventory: movie_inventory + 1) | ||
| else | ||
| render status: :not_found, json: { ok: false, mesages: "Movie not found" } | ||
| end | ||
| end | ||
|
|
||
| private | ||
|
|
||
| def rental_params | ||
| params.permit(:movie_id, :customer_id) | ||
| end | ||
| end | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| class ApplicationJob < ActiveJob::Base | ||
| 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.
Small style note: not all text editors wrap lines for you. This line is so long that on GitHub I have to scroll horizontally to see all the pieces. You can make this easier to read by putting a newline after any given comma in a statement.