ModelProbe

Sponsor

Schema introspection for ActiveRecord

Provides a detailed view of the underlying schema that backs an ActiveRecord model.

This functionality can be added to any object that implements ActiveRecord's columns interface.

Installation

Add this line to your application's Gemfile:

gem 'model_probe'

And then execute:

$ bundle

Or install it yourself as:

$ gem install model_probe

Usage

MyModel.extend ModelProbe
MyModel.probe
MyModel.print_fixture
MyModel.print_model

Rails Integration

ModelProbe auto initializes in the Rails development environment. This means your models are implicitly extended with this behavior when developing.

It also ships with these convenient rake tasks.

rails t -T model_probe

# rails model_probe:print_fixture[klass]  # Print fixture
# rails model_probe:print_model[klass]    # Print model
# rails model_probe:probe[klass]          # Probe
rails model_probe:probe[User]

#   confirmation_sent_at datetime..timestamp without time zone NULL
#     confirmation_token string....character varying           NULL
#           confirmed_at datetime..timestamp without time zone NULL
#             created_at datetime..timestamp without time zone
#     current_sign_in_at datetime..timestamp without time zone NULL
#     current_sign_in_ip inet......inet                        NULL
#                  email string....character varying           NULL []
#     encrypted_password string....character varying            []
#        failed_attempts integer...integer                      [0]
#                   * id uuid......uuid
#        last_sign_in_at datetime..timestamp without time zone NULL
#        last_sign_in_ip inet......inet                        NULL
#              locked_at datetime..timestamp without time zone NULL
#       payment_platform string....character varying           NULL
#    payment_platform_id string....character varying           NULL
#        phone_number_id uuid......uuid
#    remember_created_at datetime..timestamp without time zone NULL
# reset_password_sent_at datetime..timestamp without time zone NULL
#   reset_password_token string....character varying           NULL
#          sign_in_count integer...integer                      [0]
#      unconfirmed_email string....character varying           NULL
#           unlock_token string....character varying           NULL
#             updated_at datetime..timestamp without time zone
rails model_probe:print_fixture[User]

# ---
# user:
#   confirmation_sent_at: value
#   confirmation_token: value
#   confirmed_at: value
#   current_sign_in_at: value
#   current_sign_in_ip: value
#   email: ''
#   encrypted_password: ''
#   failed_attempts: '0'
#   last_sign_in_at: value
#   last_sign_in_ip: value
#   locked_at: value
#   payment_platform: value
#   payment_platform_id: value
#   phone_number_id: value
#   reset_password_sent_at: value
#   reset_password_token: value
#   sign_in_count: '0'
#   unconfirmed_email: value
#   unlock_token: value
rails model_probe:print_model[User]

# class User < ApplicationRecord
#   # extends ...................................................................
#   # includes ..................................................................
#
#   # relationships .............................................................
#   belongs_to :payment_platform
#   belongs_to :phone_number
#
#   # validations ...............................................................
#   validates :created_at, presence: true
#   validates :encrypted_password, presence: true
#   validates :failed_attempts, presence: true
#   validates :phone_number_id, presence: true
#   validates :sign_in_count, presence: true
#   validates :updated_at, presence: true
#
#   # callbacks .................................................................
#   # scopes ....................................................................
#   # additional config (i.e. accepts_nested_attribute_for etc...) ..............
#
#   # class methods .............................................................
#   class << self
#   end
#
#   # public instance methods ...................................................
#
#   # protected instance methods ................................................
#   protected
#
#   # private instance methods ..................................................
#   private
# end