Created
March 15, 2021 08:39
-
-
Save clupprich/4e609581f5c39f2fddaaa284b0f9f67d to your computer and use it in GitHub Desktop.
Revisions
-
clupprich created this gist
Mar 15, 2021 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,103 @@ require "bundler/inline" gemfile(true) do source "https://rubygems.org" gem "rails" gem "pg" end require "active_record" require "action_controller/railtie" ActiveRecord::Base.establish_connection(adapter: "postgresql", database: "railstestdb") ActiveRecord::Base.logger = Logger.new(STDOUT) ActiveRecord::Schema.define do create_table :books, force: true do |t| t.string :name t.timestamps end create_table :users, force: true do |t| t.string :name t.timestamps end create_table :readings, force: true do |t| t.references :book t.references :user t.timestamps end end class Book < ActiveRecord::Base has_many :readings has_many :users, through: :readings def self.read_by(*users) includes(:readings).where(readings: { user_id: users }) end end class User < ActiveRecord::Base has_many :readings has_many :books, through: :readings end class Reading < ActiveRecord::Base belongs_to :book belongs_to :user end class LibraryApp < Rails::Application secrets.secret_token = "secret_token" secrets.secret_key_base = "secret_key_base" config.logger = Logger.new($stdout) Rails.logger = config.logger routes.draw do resources :books, only: [:index] end end class BooksController < ActionController::Base def index @books = Book.all render json: @books end end require "minitest" class BookTest < Minitest::Test def test_read_by book1 = Book.create!(name: 'Generation X') book2 = Book.create!(name: 'Microserfs') book3 = Book.create!(name: 'American Polaroids') user1 = User.create!(name: 'Daniel') user2 = User.create!(name: 'Susan') user3 = User.create!(name: 'Todd') Reading.create!(book: book1, user: user1) Reading.create!(book: book2, user: user2) Reading.create!(book: book2, user: user3) books = Book.read_by(user2) assert_equal books, [book2, book3] end end exit_code = Minitest.run exit exit_code unless exit_code require "rails/command" require "rails/commands/server/server_command" options = { app: LibraryApp, Host: '0.0.0.0' } Rails::Server.new(options).start