class Scenic::Generators::ViewGenerator

@api private

Public Class Methods

next_migration_number(dir) click to toggle source
# File lib/generators/scenic/view/view_generator.rb, line 41
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/scenic/view/view_generator.rb, line 65
def activerecord_migration_class
  if ActiveRecord::Migration.respond_to?(:current_version)
    "ActiveRecord::Migration[#{ActiveRecord::Migration.current_version}]"
  else
    "ActiveRecord::Migration"
  end
end
create_migration_file() click to toggle source
# File lib/generators/scenic/view/view_generator.rb, line 27
def create_migration_file
  if creating_new_view? || destroying_initial_view?
    migration_template(
      "db/migrate/create_view.erb",
      "db/migrate/create_#{plural_file_name}.rb"
    )
  else
    migration_template(
      "db/migrate/update_view.erb",
      "db/migrate/update_#{plural_file_name}_to_version_#{version}.rb"
    )
  end
end
create_view_definition() click to toggle source
# File lib/generators/scenic/view/view_generator.rb, line 19
def create_view_definition
  if creating_new_view?
    create_file definition.path
  else
    copy_file previous_definition.full_path, definition.full_path
  end
end
create_views_directory() click to toggle source
# File lib/generators/scenic/view/view_generator.rb, line 13
def create_views_directory
  unless views_directory_path.exist?
    empty_directory(views_directory_path)
  end
end
migration_class_name() click to toggle source
# File lib/generators/scenic/view/view_generator.rb, line 57
def migration_class_name
  if creating_new_view?
    "Create#{class_name.tr(".", "").pluralize}"
  else
    "Update#{class_name.pluralize}ToVersion#{version}"
  end
end
previous_version() click to toggle source
# File lib/generators/scenic/view/view_generator.rb, line 46
def previous_version
  @previous_version ||=
    Dir.entries(views_directory_path)
      .map { |name| version_regex.match(name).try(:[], "version").to_i }
      .max
end
version() click to toggle source
# File lib/generators/scenic/view/view_generator.rb, line 53
def version
  @version ||= destroying? ? previous_version : previous_version.next
end

Private Instance Methods

create_view_options() click to toggle source
# File lib/generators/scenic/view/view_generator.rb, line 114
def create_view_options
  if materialized?
    ", materialized: #{no_data? ? "{ no_data: true }" : true}"
  else
    ""
  end
end
creating_new_view?() click to toggle source
# File lib/generators/scenic/view/view_generator.rb, line 90
def creating_new_view?
  previous_version.zero?
end
definition() click to toggle source
# File lib/generators/scenic/view/view_generator.rb, line 94
def definition
  Scenic::Definition.new(plural_file_name, version)
end
destroying?() click to toggle source
# File lib/generators/scenic/view/view_generator.rb, line 102
def destroying?
  behavior == :revoke
end
destroying_initial_view?() click to toggle source
# File lib/generators/scenic/view/view_generator.rb, line 122
def destroying_initial_view?
  destroying? && version == 1
end
file_name() click to toggle source
Calls superclass method
# File lib/generators/scenic/view/view_generator.rb, line 78
def file_name
  super.tr(".", "_")
end
Also aliased as: singular_name
formatted_plural_name() click to toggle source
# File lib/generators/scenic/view/view_generator.rb, line 106
def formatted_plural_name
  if plural_name.include?(".")
    "\"#{plural_name}\""
  else
    ":#{plural_name}"
  end
end
previous_definition() click to toggle source
# File lib/generators/scenic/view/view_generator.rb, line 98
def previous_definition
  Scenic::Definition.new(plural_file_name, previous_version)
end
singular_name()
Alias for: file_name
version_regex() click to toggle source
# File lib/generators/scenic/view/view_generator.rb, line 86
def version_regex
  /\A#{plural_file_name}_v(?<version>\d+)\.sql\z/
end
views_directory_path() click to toggle source
# File lib/generators/scenic/view/view_generator.rb, line 82
def views_directory_path
  @views_directory_path ||= Rails.root.join("db", "views")
end