Created
March 15, 2021 08:39
-
-
Save clupprich/4e609581f5c39f2fddaaa284b0f9f67d to your computer and use it in GitHub Desktop.
A single file Rails application setting up the DB, a few models, running minitest and finally starting up a Rails server
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 characters
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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment