Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Autogenerate ActiveRecord models
Ruby
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
bin
features
lib
spec
.document
.gitignore
.rspec
Gemfile
Gemfile.lock
LICENSE
README.rdoc
Rakefile
conventional_models.gemspec

README.rdoc

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.

Something went wrong with that request. Please try again.