Sha256: 023f7dc19034b424ccc523239395dbee2a6cd6cb997449d0063dd1a6655a128c

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

# frozen_string_literal: true

require 'factory_bot_generator/version'

module FactoryBotGenerator
  class Base
    QUOTE_AROUND_VALUE_TYPES = %i[string date datetime text].freeze
    EXCLUDE_COLUMNS = %w[created_at updated_at].freeze

    def self.render(record, options = {})
      new(record, options).render
    end

    attr_reader :record, :options

    def initialize(record, options)
      @record = record
      @options = options
    end

    def render
      ActionView::Base.new(File.dirname(__FILE__)).render(
        file: 'factory_generator.erb',
        locals: {
          name:    name,
          columns: columns,
          record:  record,
          indent:  indent
        }
      )
    end

    private

    def name
      options[:name] || record_class.name.underscore
    end

    def columns
      @columns ||= record_class.column_names - exclude_columns
    end

    def indent
      @indent ||= columns.max_by(&:size).size
    end

    def record_class
      record.class
    end

    def exclude_columns
      @exclude_columns ||= (EXCLUDE_COLUMNS + options[:exclude].to_a.map(&:to_s))
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
factory_bot_generator-0.1.0 lib/factory_bot_generator.rb