DeclareSchema
Declare your Rails/active_record model schemas and have database migrations generated for you!
Example
Make a model and declare your schema within a fields do ... end block:
class Company < ActiveRecord::Base
fields do
company_name :string, limit: 100
ticker_symbol :string, limit: 4, null: true, index: true, unique: true
employee_count :integer
comments :text
end
belongs_to :industry
end
Then generate the migration:
$ rails generate declare_schema:migration
---------- Up Migration ----------
create_table :companies, id: :bigint do |t|
t.string :company_name, null: false, limit: 100
t.string :ticker_symbol, limit: 4
t.integer :employee_count, null: false
t.text :comments, null: false
t.datetime :created_at
t.datetime :updated_at
t.integer :industry_id, null: false
end
add_index :companies, [:ticker_symbol], unique: true, name: 'on_ticker_symbol'
add_index :companies, [:industry_id], name: 'on_industry_id'
execute "ALTER TABLE companies ADD CONSTRAINT index_companies_on_industry_id FOREIGN KEY index_companies_on_industry_id(industry_id) REFERENCES industries(id) "
----------------------------------
---------- Down Migration --------
drop_table :companies
----------------------------------
What now: [g]enerate migration, generate and [m]igrate now or [c]ancel? g
=> "g"
Migration filename: [<enter>=declare_schema_migration_1|<custom_name>]: add_company_model
Note that the migration generator is interactive -- it can't tell the difference between renaming something vs. adding one thing and removing another, so sometimes it will ask you to clarify.
Installing
Install the DeclareSchema gem directly:
$ gem install declare_schema
or add it to your bundler Gemfile:
gem 'declare_schema'
Testing
To run tests:
rake test:prepare_testapp[force]
rake test:all < test_responses.txt