Sha256: 3c761f757a5a61918479e91a5248c9f44bfa87ca0150c7d2cdd6ca60b97c0be0

Contents?: true

Size: 1.54 KB

Versions: 3

Compression:

Stored size: 1.54 KB

Contents

# frozen_string_literal: true

require 'rails/generators/migration'

module SeoOptimizer
  class ModelsGenerator < Rails::Generators::NamedBase
    source_root File.expand_path('templates', __dir__)
    include Rails::Generators::Migration
    desc 'Generates migration for models'

    argument :desired_fields, type: :array, default: [], banner: "field field"

    def self.orm
      Rails::Generators.options[:rails][:orm]
    end

    def self.orm_has_migration?
      [:active_record].include? orm
    end

    def self.next_migration_number(_path)
      Time.now.utc.strftime('%Y%m%d%H%M%S')
    end

    def create_migration_file
      return unless self.class.orm_has_migration?

      migration_template 'model_template.erb',
                         "db/migrate/add_#{model_name}_seo_slug_migration.rb",
                         migration_version: migration_version,
                         model_name: model_name,
                         model_table: model_table,
                         desired_fields_reference: desired_fields_reference

    end

    private

    def model
      name
    end

    def model_name
      model.downcase
    end

    def model_table
      model_name.pluralize(2)
    end

    def desired_fields_reference
      desired_fields.delete('seo_slug')
      desired_fields.join(', ')
    end

    def migration_version
      if rails5?
        '[4.2]'
      elsif rails6?
        '[6.0]'
      end
    end

    def rails5?
      Rails.version.start_with? '5'
    end

    def rails6?
      Rails.version.start_with? '6'
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
seo_optimizer-0.1.2 lib/generators/seo_optimizer/models/models_generator.rb
seo_optimizer-0.1.1 lib/generators/seo_optimizer/models/models_generator.rb
seo_optimizer-0.1.0 lib/generators/seo_optimizer/models/models_generator.rb