diff --git a/Gemfile b/Gemfile index a6e0bdd54..54d1f540c 100644 --- a/Gemfile +++ b/Gemfile @@ -24,6 +24,7 @@ gem 'puma', '~> 3.7' # Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible # gem 'rack-cors' +gem "active_model_serializers" group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console diff --git a/Gemfile.lock b/Gemfile.lock index 4a738acb5..7cc8096f2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -24,6 +24,11 @@ GEM erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.3) + active_model_serializers (0.10.6) + actionpack (>= 4.1, < 6) + activemodel (>= 4.1, < 6) + case_transform (>= 0.2) + jsonapi-renderer (>= 0.1.1.beta1, < 0.2) activejob (5.1.4) activesupport (= 5.1.4) globalid (>= 0.3.6) @@ -48,6 +53,8 @@ GEM debug_inspector (>= 0.0.1) builder (3.2.3) byebug (9.1.0) + case_transform (0.2) + activesupport coderay (1.1.2) concurrent-ruby (1.0.5) crass (1.0.2) @@ -61,6 +68,7 @@ GEM jquery-turbolinks (2.1.0) railties (>= 3.1.0) turbolinks + jsonapi-renderer (0.1.3) listen (3.1.5) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) @@ -151,6 +159,7 @@ PLATFORMS ruby DEPENDENCIES + active_model_serializers better_errors binding_of_caller byebug diff --git a/app/controllers/customers_controller.rb b/app/controllers/customers_controller.rb index 456569149..c3919a8f6 100644 --- a/app/controllers/customers_controller.rb +++ b/app/controllers/customers_controller.rb @@ -1,8 +1,9 @@ class CustomersController < ApplicationController def index customers = Customer.all + # render json: customers, status: :ok render( - json: customers.as_json(only: [:id, :name, :registered_at, :address, :city, :state, :postal_code, :phone]) + json: customers.as_json(only: [:id, :name, :registered_at, :address, :city, :state, :postal_code, :phone], methods: [ :movies_checked_out_count]) ) end end diff --git a/app/controllers/movies_controller.rb b/app/controllers/movies_controller.rb index 824101aa6..223fcdfbf 100644 --- a/app/controllers/movies_controller.rb +++ b/app/controllers/movies_controller.rb @@ -1,5 +1,4 @@ class MoviesController < ApplicationController - # protect_from_forgery with: :null_session def index movies = Movie.all diff --git a/app/models/customer.rb b/app/models/customer.rb index d24ae68b0..8f4558692 100644 --- a/app/models/customer.rb +++ b/app/models/customer.rb @@ -1,7 +1,12 @@ class Customer < ApplicationRecord + # include ActiveModel::Serialization + has_many :rentals validates :name, presence: true - + def movies_checked_out_count + self.rentals.where(checked_out: true).count + end # movies_checked_out + end diff --git a/app/serializers/customer_serializer.rb b/app/serializers/customer_serializer.rb new file mode 100644 index 000000000..336c84d80 --- /dev/null +++ b/app/serializers/customer_serializer.rb @@ -0,0 +1,3 @@ +# class CustomerSerializer < ActiveModel::Serializer +# attributes :id, :name, :registered_at, :address, :city, :state, :postal_code, :phone, :movies_checked_out_count +# end diff --git a/db/migrate/20171107181648_add_checked_out.rb b/db/migrate/20171107181648_add_checked_out.rb new file mode 100644 index 000000000..902b8ef27 --- /dev/null +++ b/db/migrate/20171107181648_add_checked_out.rb @@ -0,0 +1,5 @@ +class AddCheckedOut < ActiveRecord::Migration[5.1] + def change + add_column :rentals, :checked_out, :boolean + end +end diff --git a/db/schema.rb b/db/schema.rb index 73c02b67f..6f7142676 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20171106215231) do +ActiveRecord::Schema.define(version: 20171107181648) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -43,6 +43,7 @@ t.date "due_date" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.boolean "checked_out" end end diff --git a/test/fixtures/rentals.yml b/test/fixtures/rentals.yml index b9677884e..fb50b9fe7 100644 --- a/test/fixtures/rentals.yml +++ b/test/fixtures/rentals.yml @@ -5,6 +5,7 @@ one: customer_id: 1 due_date: 2017-11-06 + two: movie_id: 1 customer_id: 1 diff --git a/test/models/customer_test.rb b/test/models/customer_test.rb index e3ce77543..3f077bc1e 100644 --- a/test/models/customer_test.rb +++ b/test/models/customer_test.rb @@ -27,4 +27,15 @@ end end # validations + + # describe "custom methods" do + # describe "movies_checked_out" do + # it "will return a list of the checkout out movies for that customer" do + # get customers_path + # + # body = JSON.parse(response.body) + # body[0][:movies_checked_out].must_equal 0 + # end + # end # movies_checked_out + # end # custom methods end