-
Notifications
You must be signed in to change notification settings - Fork 26
Myriam (Ports) and Evelynn (Sockets) #26
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
998a625
737f5fe
5e8b7c6
82bc010
e9579eb
e19ceea
f4449de
68236e3
cf4ebdc
073d026
173e017
034c38b
ac19d58
94a904b
5a83492
8e88d9f
a61f315
e823963
375ec6a
fd01f22
edc3398
c2436da
c682eec
1f374b8
bc76fee
ab8cd50
032d96e
b752132
2332764
119dae5
9791d3c
c0c0d3a
81672a7
d52d497
5c41b97
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,41 @@ | ||
| class CustomerMoviesController < ApplicationController | ||
| def checkout | ||
| customer_movie = CustomerMovie.new(customer_movie_params) | ||
| if customer_movie.save | ||
| checkout_movie = customer_movie.movie.title | ||
| customer_movie.checkout_date = Date.today | ||
| customer_movie.due_date = Date.today.next_week | ||
| customer_movie.movie.inventory -= 1 | ||
|
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 think it would be really cool if all of this work around modifying def checkout
self.checkout_date = Date.today
self.due_date = Date.today.next_week
self.movie.inventory -= 1
end |
||
| customer_movie.save | ||
| customer_movie.movie.save | ||
|
|
||
| render json: {movie: checkout_movie, checkout_date: customer_movie.checkout_date, due_date: customer_movie.due_date}, | ||
| status: :ok | ||
| else | ||
| render json: {ok: false, errors: customer_movie.errors.messages}, | ||
| status: :bad_request | ||
| end | ||
| end | ||
|
|
||
| def checkin | ||
| customer_movie = CustomerMovie.where(customer_id: customer_movie_params[:customer_id], movie_id: customer_movie_params[:movie_id]) | ||
| if customer_movie != [] | ||
| customer_movie[0].movie.inventory += 1 | ||
| customer_movie[0].status = "returned" | ||
|
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. Similar to above: it may be best if these two lines about incrementing inventory and changing status were pulled into an instance method. Even if it's two lines long, it's still helpful! |
||
| customer_movie[0].movie.save | ||
| customer_movie[0].save | ||
|
|
||
| render json: {movie: customer_movie[0].movie.title, checkin_status: customer_movie[0].status}, | ||
| status: :ok | ||
| else | ||
| render json: {ok: false, errors: ["Customer has not checked out this movie"]}, | ||
| status: :bad_request | ||
| end | ||
| end | ||
|
|
||
| private | ||
|
|
||
| def customer_movie_params | ||
| params.require(:customer_movie).permit(:customer_id, :movie_id) | ||
| end | ||
| end | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| 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 | ||
| end |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| 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: movie.as_json(only: [:id, :title, :overview, :release_date, :inventory]), status: :ok | ||
| else | ||
| render json: {ok: false, message: ["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]), | ||
| status: :ok | ||
| else | ||
| render json: {ok: false, errors: movie.errors.messages}, | ||
| status: :bad_request | ||
| end | ||
| end | ||
|
|
||
| private | ||
|
|
||
| def movie_params | ||
| params.require(:movie).permit(:title, :overview, :release_date, :inventory) | ||
|
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. In Rails when we used forms, |
||
| 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,5 @@ | ||
| class Customer < ApplicationRecord | ||
| has_many :customer_movies | ||
| has_many :movies, through: :customer_movies | ||
| validates :name, presence: true | ||
| end |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| class CustomerMovie < ApplicationRecord | ||
| belongs_to :customer | ||
| belongs_to :movie | ||
| end |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| class Movie < ApplicationRecord | ||
| has_many :customer_movies | ||
| has_many :customers, through: :customer_movies | ||
| validates :title, presence: true | ||
| validates :inventory, presence: true, numericality: {greater_than: -1} | ||
| 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.
Should we be setting
checkout_movieto the value of itsmovie'stitle? This doesn't seem to break any tests, but it reads really strangely to me.