No commit activity in last 3 years
No release in over 3 years
A supporting library for active_mocker and wrapper around an active_record model.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

>= 4.2, <= 6.9
~> 1.0
 Project Readme

ActiveRecordSchemaScrapper

Build Status Code Climate Test Coverage

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

  1. Fork it ( https://github.com/[my-github-username]/active_record_schema_scrapper/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request