class SqlView::Generators::ViewGenerator

Public Class Methods

next_migration_number(dir) click to toggle source
# File lib/generators/sql_view/view/view_generator.rb, line 46
def self.next_migration_number(dir)
  ::ActiveRecord::Generators::Base.next_migration_number(dir)
end

Public Instance Methods

activerecord_migration_class() click to toggle source
# File lib/generators/sql_view/view/view_generator.rb, line 75
def activerecord_migration_class
  if ActiveRecord::Migration.respond_to?(:current_version)
    "ActiveRecord::Migration[#{ActiveRecord::Migration.current_version}]"
  else
    "ActiveRecord::Migration"
  end
end
create_everything() click to toggle source
# File lib/generators/sql_view/view/view_generator.rb, line 12
      def create_everything
        create_file "app/sql_views/#{file_name}_view.rb", <<-FILE
class #{class_name}View < SQLView::Model
#{top_code}

  schema ->#{schema_code}

  extend_model_with do
    # sample how you can extend it, similar to regular AR model
    #
    # include SomeConcern
    #
    # belongs_to :user
    # has_many :posts
    #
    # scope :ordered, -> { order(:created_at) }
    # scope :by_role, ->(role) { where(role: role) }
  end
end
FILE

        create_file "db/migrate/#{self.class.next_migration_number("db/migrate")}_create_#{file_name}_view.rb", <<-FILE
class #{migration_class_name} < #{activerecord_migration_class}
  def up
    #{class_name}View.sql_view.up
  end

  def down
    #{class_name}View.sql_view.down
  end
end
FILE
      end
materialized_code() click to toggle source
# File lib/generators/sql_view/view/view_generator.rb, line 59
def materialized_code
  options[:materialized] ? "  materialized" : nil
end
migration_class_name() click to toggle source
# File lib/generators/sql_view/view/view_generator.rb, line 71
def migration_class_name
  "Create#{class_name.tr('.', '')}View"
end
schema_code() click to toggle source
# File lib/generators/sql_view/view/view_generator.rb, line 63
def schema_code
  if args[0].present?
    " { #{args[0]} }"
  else
    " {#{ "\n    # ActiveRecord::Relation or SQL\n    # for example: User.where(active: true)\n  }" }"
  end
end
top_code() click to toggle source
# File lib/generators/sql_view/view/view_generator.rb, line 51
def top_code
  [view_name_code, materialized_code].compact.join("\n\n")
end
view_name_code() click to toggle source
# File lib/generators/sql_view/view/view_generator.rb, line 55
def view_name_code
  options["view-name"] ? "  self.view_name = '#{options["view-name"]}'" : nil
end

Private Instance Methods

file_name() click to toggle source
Calls superclass method
# File lib/generators/sql_view/view/view_generator.rb, line 88
def file_name
  super.tr(".", "_")
end
Also aliased as: singular_name
singular_name()
Alias for: file_name