require “factory_bot”

namespace :human_attrs do

desc "Show generated human attributes for ActiveRecord models"
task :show, [:model] => [:environment] do |_t, args|
  FactoryBot.reload
  model_name = args[:model].tableize.singularize
  model = args[:model].classify.constantize

  instance = begin
    FactoryBot.build(model_name)
  rescue
    nil
  end

  if instance
    instance.id = 1 if instance.respond_to?(:id)
    instance.created_at = DateTime.current if instance.respond_to?(:created_at)
    instance.updated_at = DateTime.current if instance.respond_to?(:updated_at)
  end

  result = model.humanizers.map do |m|
    value = begin
      instance.send(m)
    rescue
      nil
    end

    !!value ? "#{m} => #{value}" : m
  end

  puts result.join("\n")
end

end