ConventionalModels¶ ↑
Generate ActiveRecord models automatically with basic relationships based on conventions.
Install¶ ↑
gem install conventional_models
Example¶ ↑
We have a table called Page and another called ContentItems (not following ActiveRecord conventions).
# point active_record to a database require 'rubygems' require 'active_record' ActiveRecord::Base.establish_connection(:database => 'db.sqlite', :adapter => 'sqlite3') require 'conventional_models' ConventionalModels.configure do primary_key_name "Id" end # use the models page = Page.create :Name => 'test' page.content_items.create :Name => 'content1' # have a look at the generated code puts Page.model_code puts ContentItem.model_code
Output:
class ::Page < ::ActiveRecord::Base set_primary_key "Id" set_table_name "Page" has_many :content_items, :class_name => 'ContentItem', :primary_key => 'Id', :foreign_key => 'Page_id' end class ::ContentItem < ::ActiveRecord::Base set_primary_key "Id" set_table_name "ContentItem" belongs_to :page, :class_name => 'Page' end
Default conventions¶ ↑
ConventionalModels.configure do belongs_to_matcher {|column| column.name.end_with? "_id"} belongs_to_name {|column| column.name.gsub(/_id$/, "")} primary_key_name "id" class_name {|table_name| table_name.singularize.camelize} ignore_tables "schema_migrations", "sqlite_sequence", "sysdiagrams" end
cmconsole command¶ ↑
Starts an IRB session and configures activerecord for you based on what is in config/database.yml.
Usage ¶ ↑
cmconsole [options] For help use: cmconsole -h
Options¶ ↑
-h, --help Displays help message -v, --version Display the version, then exit -e, --environment Specify the database env to use, default to development -c, --config Where database.yml lives -s, --skip-configure Don't configure ConventionalModels automatically -V, --verbose Verbose
Rake¶ ↑
You can use this from rake as follows:
# Confiigure active_record as you would normally task :console do require 'conventional_models' ConventionalModels.configure do primary_key_name "Id" end puts ConventionalModels.model_code IRB.start end
Multiple databases¶ ↑
Given a table called pages in both development.sqlite and test.sqlite:
require 'rubygems' require 'active_record' require 'conventional_models' config = { "development" => { "database" => 'development.sqlite', "adapter" => 'sqlite3' }, "test" => { "database" => 'test.sqlite', "adapter" => 'sqlite3' } } ConventionalModels.configure do connection config["development"] module_name "Development" end ConventionalModels.configure do connection config["test"] module_name "Test" end puts ConventionalModels.model_code # => class ::Development::Page < Development::Base # => # => end # => class ::Test::Page < Test::Base # => # => end Development::Page.create! Development::Page.create! Test::Page.create! puts "Number of development records: #{Development::Page.count}" # => 2 puts "Number of production records: #{Test::Page.count}" # => 1
Note on Patches/Pull Requests¶ ↑
-
Fork the project.
-
Make your feature addition or bug fix.
-
Add tests for it. This is important so I don’t break it in a future version unintentionally.
-
Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
-
Send me a pull request. Bonus points for topic branches.
Copyright¶ ↑
Copyright © 2011 Steve Hodgkiss. See LICENSE for details.