Sha256: 3dfd04487a0aad690156e1d7eab23056d26b8020f73e8f23ae6627e9998b76c7

Contents?: true

Size: 1.89 KB

Versions: 49

Compression:

Stored size: 1.89 KB

Contents

# frozen_string_literal: true

class PgFormBuilder < SimpleForm::FormBuilder
  include PgAssociable::FormBuilderMethods
  include PgEngine::ErrorHelper

  def default_prefix(attribute_name)
    attribute_name = attribute_name.to_s.sub(/_id\z/, '')
    at_name_human = object.class.human_attribute_name(attribute_name).downcase
    "#{articulo(attribute_name)} #{at_name_human}"
  end

  def articulo(attribute_name)
    gender = I18n.t("gender.#{attribute_name}", default: nil)
    if gender.present?
      gender == 'f' ? 'La' : 'El'
    else
      at_name = object.class.human_attribute_name(attribute_name.to_s).downcase
      at_name.ends_with?('a') ? 'La' : 'El'
    end
  end

  def input(attribute_name, options = {}, &)
    options[:error_prefix] ||= default_prefix(attribute_name)

    super
  end

  def mensajes_de_error
    # TODO: quitar en before-cache?
    title = error_notification(message: mensaje, class: 'text-danger mb-2 error-title') if mensaje

    base_errors = object.errors[:base]
    base_message = (base_errors.map(&:to_s).join('<br>') if base_errors.present?)
    base_tag = error_notification(message: base_message, class: 'alert alert-danger') if base_message

    "#{title}#{base_tag}".html_safe
  end

  def mensaje
    scope = error_message_for(object, associations:)
    return if scope.blank?

    I18n.t("simple_form.error_notification.#{scope}")
  end

  def associations
    return [] unless object.class.respond_to?(:reflect_on_all_associations)

    object.class.reflect_on_all_associations
          .select { |a| a.instance_of? ActiveRecord::Reflection::HasManyReflection }
          .map(&:name)
  end

  map_type :date, to: PgEngine::FechaInput
  # map_type :datetime, to: PgEngine::FechaInput

  def submit_button(*args, &)
    options = args.extract_options!.dup
    options[:class] = ['btn-primary', options[:class]].compact
    args << options
    send(:submit, *args, &)
  end
end

Version data entries

49 entries across 49 versions & 1 rubygems

Version Path
pg_rails-7.6.2 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.6.1 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.6.0 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.5.7 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.5.6 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.5.5 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.5.4 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.5.3 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.5.2 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.5.1 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.5.0 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.4.3 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.4.2 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.4.1 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.4.0 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.3.5 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.3.4 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.3.3 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.3.2 pg_engine/app/lib/pg_form_builder.rb
pg_rails-7.3.1 pg_engine/app/lib/pg_form_builder.rb