ActiveRecordSchemaScrapper
This gem gives a simple API for ActiveRecord model meta data, including attributes and associations.
Installation
Add this line to your application's Gemfile:
gem 'active_record_schema_scrapper'
And then execute:
$ bundle
Or install it yourself as:
$ gem install active_record_schema_scrapper
Usage
Attributes
ActiveRecordSchemaScrapper::Attributes.new(model: User).map(&:to_h)
#=>[{ name: "id", type: Fixnum },
{ name: "name", type: String },
{ name: "email", type: String, default: "" },
{ name: "credits", type: BigDecimal, precision: 19, scale: 6 },
{ name: "created_at", type: DateTime },
{ name: "updated_at", type: DateTime },
{ name: "password_digest", type: String },
{ name: "remember_token", type: Axiom::Types::Boolean, default: true },
{ name: "admin", type: Axiom::Types::Boolean, default: false }]
ActiveRecordSchemaScrapper::Attributes.new(model: User).errors
#=> []
Registering Types
This gem does not include all the mappings from any DB type to a Ruby type. (most common types are included) So any arbitrary type can be registered.
Postgres Array Type
# schema.rb
#...
t.string :tags, array: true, default: []
#...
# initilizers/active_mocker.rb
ActiveRecordSchemaScrapper::Attributes.register_type(
name: :string,
klass: Array[String],
cast_type: -> (c) { c.class.name.include?("Array") }
)
ActiveRecordSchemaScrapper::Attributes.register_default(
default: "{}",
replacement_default: [],
cast_type: -> (c) { c.class.name.include?("Array") }
)
ActiveRecordSchemaScrapper::Attributes.new(model: User).map(&:to_h)
#=>[{ name: "tags", type: Array[String], default: [] }]
Associations
ActiveRecordSchemaScrapper::Associations.new(model: User).map(&:to_h)
#=>[{ name: :account, class_name: :Account, type: :has_one, through: nil, source: nil, foreign_key: :user_id, join_table: nil, dependent: nil },
{ name: :microposts, class_name: :Micropost, type: :has_many, through: nil, source: nil, foreign_key: :user_id, join_table: nil, dependent: nil },
{ name: :relationships, class_name: :Relationship, type: :has_many, through: nil, source: nil, foreign_key: :follower_id, join_table: nil, dependent: :destroy },
{ name: :followed_users, class_name: :User, type: :has_many, through: :relationships, source: :followed, foreign_key: :followed_id, join_table: nil, dependent: nil },
{ name: :reverse_relationships, class_name: :Relationship, type: :has_many, through: nil, source: nil, foreign_key: :followed_id, join_table: nil, dependent: :destroy },
{ name: :followers, :class_name => :User, :type => :has_many, :through => :reverse_relationships, :source => :follower, :foreign_key => :follower_id, :join_table => nil, :dependent => nil }]
ActiveRecordSchemaScrapper::Attributes.new(model: User).errors.map(&:message)
#=> ["'Missing model Account for association User.belongs_to :account')"]
Supported versions of ActiveRecord: 4.0 - 4.2
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
to create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Contributing
- Fork it ( https://github.com/[my-github-username]/active_record_schema_scrapper/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request