Sha256: 5ef8f355dfc14e64b6d5d00d7dc0720f384bb803830f4fac29622b649f89eaf7

Contents?: true

Size: 1.38 KB

Versions: 2

Compression:

Stored size: 1.38 KB

Contents

require 'rails/generators/active_record'
require 'active_support/core_ext'

module ActiveRecord
  module Generators
    class RolifyGenerator < ActiveRecord::Generators::Base
      source_root File.expand_path("../templates", __FILE__)

      argument :user_cname, :type => :string, :default => "User", :banner => "User"

      def generate_model
        invoke "active_record:model", [ name ], :migration => false
      end

      def inject_role_class
        inject_into_class(model_path, class_name, model_content)
      end

      def copy_rolify_migration
        migration_template "migration.rb", "db/migrate/rolify_create_#{table_name}.rb"
      end

      def join_table
        user_cname.constantize.table_name + "_" + table_name
      end

      def user_reference
        user_cname.demodulize.underscore
      end

      def role_reference
        class_name.demodulize.underscore
      end

      def model_path
        File.join("app", "models", "#{file_path}.rb")
      end

      def model_content
        content = <<RUBY
  has_and_belongs_to_many :%{user_cname}, :join_table => :%{join_table}
  belongs_to :resource, :polymorphic => true

  validates :resource_type, :inclusion => { :in => Rolify.resource_types }

  scopify
RUBY
        content % { :user_cname => user_cname.constantize.table_name, :join_table => "#{user_cname.constantize.table_name}_#{table_name}"}
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rolify-3.5.1 lib/generators/active_record/rolify_generator.rb
rolify-3.5.0 lib/generators/active_record/rolify_generator.rb