From e8c499e14c7852e19f7eaccc100489ee6f801828 Mon Sep 17 00:00:00 2001 From: Andrew White Date: Sun, 11 Apr 2010 09:27:45 +0100 Subject: [PATCH 1/2] Generate module file for namespaced models --- .../active_record/model/model_generator.rb | 9 +++++++++ .../active_record/model/templates/module.rb | 5 +++++ 2 files changed, 14 insertions(+), 0 deletions(-) create mode 100644 activerecord/lib/rails/generators/active_record/model/templates/module.rb diff --git a/activerecord/lib/rails/generators/active_record/model/model_generator.rb b/activerecord/lib/rails/generators/active_record/model/model_generator.rb index 3e72fbe..4ea8836 100644 --- a/activerecord/lib/rails/generators/active_record/model/model_generator.rb +++ b/activerecord/lib/rails/generators/active_record/model/model_generator.rb @@ -20,6 +20,11 @@ module ActiveRecord template 'model.rb', File.join('app/models', class_path, "#{file_name}.rb") end + def create_module_file + return if (class_path.empty? || File.exist?(File.join('app/models', module_file_name))) + template 'module.rb', File.join('app/models', module_file_name) + end + hook_for :test_framework protected @@ -28,6 +33,10 @@ module ActiveRecord options[:parent] || "ActiveRecord::Base" end + def module_file_name + "#{class_path.join('/')}.rb" + end + end end end diff --git a/activerecord/lib/rails/generators/active_record/model/templates/module.rb b/activerecord/lib/rails/generators/active_record/model/templates/module.rb new file mode 100644 index 0000000..bb4220f --- /dev/null +++ b/activerecord/lib/rails/generators/active_record/model/templates/module.rb @@ -0,0 +1,5 @@ +module <%= class_path.map(&:camelize).join('::') %> + def self.table_name_prefix + '<%= class_path.join('_') %>_' + end +end -- 1.6.4.4 From 5a5c89a18cb544f715bf8d4924073763f71ea918 Mon Sep 17 00:00:00 2001 From: Andrew White Date: Sun, 11 Apr 2010 11:19:59 +0100 Subject: [PATCH 2/2] Add docs and test --- railties/lib/rails/generators/rails/model/USAGE | 15 +++++++++++++++ railties/test/generators/model_generator_test.rb | 8 ++++++++ 2 files changed, 23 insertions(+), 0 deletions(-) diff --git a/railties/lib/rails/generators/rails/model/USAGE b/railties/lib/rails/generators/rails/model/USAGE index d97e9ac..db98a2d 100644 --- a/railties/lib/rails/generators/rails/model/USAGE +++ b/railties/lib/rails/generators/rails/model/USAGE @@ -15,6 +15,10 @@ Description: Finally, if --parent option is given, it's used as superclass of the created model. This allows you create Single Table Inheritance models. + If you pass a namespaced model name (e.g. admin/account or Admin::Account) + then the generator will create a module with a table_name_prefix method + to prefix the model's table name with the module name (e.g. admin_account) + Examples: `rails generate model account` @@ -28,3 +32,14 @@ Examples: `rails generate model post title:string body:text published:boolean` Creates a Post model with a string title, text body, and published flag. + + `rails generate model admin/account` + + For ActiveRecord and TestUnit it creates: + + Module: app/models/admin.rb + Model: app/models/admin/account.rb + Test: test/unit/admin/account_test.rb + Fixtures: test/fixtures/admin_accounts.yml + Migration: db/migrate/XXX_add_admin_accounts.rb + diff --git a/railties/test/generators/model_generator_test.rb b/railties/test/generators/model_generator_test.rb index f5cfd8e..ef415a4 100644 --- a/railties/test/generators/model_generator_test.rb +++ b/railties/test/generators/model_generator_test.rb @@ -27,6 +27,14 @@ class ModelGeneratorTest < Rails::Generators::TestCase assert_file "app/models/account.rb", /class Account < Admin::Account/ end + def test_model_with_namespace + run_generator ["admin/account"] + assert_file "app/models/admin.rb", /module Admin/ + assert_file "app/models/admin.rb", /def self\.table_name_prefix/ + assert_file "app/models/admin.rb", /'admin_'/ + assert_file "app/models/admin/account.rb", /class Admin::Account < ActiveRecord::Base/ + end + def test_migration run_generator assert_migration "db/migrate/create_accounts.rb", /class CreateAccounts < ActiveRecord::Migration/ -- 1.6.4.4