class MongoidForm::FormBuilder

Constants

SKIP_WRAP_FOR

Public Instance Methods

any_errors?() click to toggle source
# File lib/mongoid_form/form_builder.rb, line 43
def any_errors?
  @object && @object.respond_to?(:errors) && @object.errors.present?
end
error_message_for(name) click to toggle source
# File lib/mongoid_form/form_builder.rb, line 33
def error_message_for(name)
  if any_errors? && has_error?(name)
    alert { get_error(name) }
  end
end
error_notification() click to toggle source
# File lib/mongoid_form/form_builder.rb, line 27
def error_notification
  if any_errors? && wrapper.main_error_i18n_key.present?
    alert { I18n::t(*wrapper.main_error_i18n_key, model: @object.class.model_name.human, count: @object.errors.size) }
  end
end
has_error?(name) click to toggle source
# File lib/mongoid_form/form_builder.rb, line 47
def has_error?(name)
  return false unless any_errors?
  @object.errors.messages[name].present?
end
localized_field(type, attribute, options = {}) click to toggle source
# File lib/mongoid_form/form_builder.rb, line 14
def localized_field(type, attribute, options = {})
  @type = type
  attribute, options = value_field(attribute, options)
  case type
  when :text
    text_field(attribute, options)
  when :text_area
    text_area(attribute, options)
  else
    ""
  end
end
localized_fields(field, options = {}, &block) click to toggle source
# File lib/mongoid_form/form_builder.rb, line 6
def localized_fields(field, options = {}, &block)
  field_name = "#{field}_translations"
  object = @object.send(field_name).try(:empty?) ? nil : @object.send(field_name)
  name = "#{object_name}[#{field_name}]"

  @template.fields_for(name, object, &block)
end
required?(method) click to toggle source
# File lib/mongoid_form/form_builder.rb, line 39
def required?(method)
  @object && @object.class.validators_on(method).map(&:class).include?(Mongoid::Validations::PresenceValidator)
end

Private Instance Methods

alert() { || ... } click to toggle source
# File lib/mongoid_form/form_builder.rb, line 161
def alert(&block)
  inner = yield.html_safe
  wrap inner, wrapper.alert_error_wrapper
end
asterisk(name) click to toggle source
# File lib/mongoid_form/form_builder.rb, line 118
def asterisk(name)
  required?(name) && wrapper.add_if_required.present? ? @template.content_tag(*wrapper.add_if_required) + ' ' : ''
end
error(name) click to toggle source
# File lib/mongoid_form/form_builder.rb, line 122
def error(name)
  if has_error?(name)
    wrapper.error_block.present? ? wrap(get_error(name), wrapper.error_block) : get_error(name)
  else
    ''
  end
end
factory(type, name, options = {}) click to toggle source
# File lib/mongoid_form/form_builder.rb, line 54
def factory(type, name, options = {})
  @type = type
  input = case type
    when :text
      text_field name, options
    when :password
      password_field name, options
    when :select
      options[:collection] ||= []
      select name, options[:collection], options
    when :number
      number_field name, options
    when :text_area
      text_area name, options
    when :check_box
      check_box name, options
    when :hidden
      hidden_field name, options
    when :file
      file_field name, options
    end
  (SKIP_WRAP_FOR.include?(type) || wrapper.nil?) ? input : wrap_field(input, name)
end
get_error(name) click to toggle source
# File lib/mongoid_form/form_builder.rb, line 130
def get_error(name)
  error = get_errors(name)
  error = error.first if error.is_a?(Array)
  error
end
get_errors(name) click to toggle source
# File lib/mongoid_form/form_builder.rb, line 136
def get_errors(name)
  @object.errors.messages[name]
end
input_wrapped(input, name) click to toggle source
# File lib/mongoid_form/form_builder.rb, line 140
def input_wrapped(input, name)
  wrapper.input_wrapper.present? ? wrap((input + error(name)), wrapper.input_wrapper) : (input + error(name))
end
value_field(attribute, options) click to toggle source
# File lib/mongoid_form/form_builder.rb, line 166
def value_field(attribute, options)
  value = @object ? @object[attribute.to_s] : nil
  options = options.merge(value: value)
  return attribute, options
end
wrap(content, options) click to toggle source
# File lib/mongoid_form/form_builder.rb, line 112
def wrap(content, options)
  @template.content_tag *options do
    content
  end
end
wrap_field(input, name) click to toggle source
# File lib/mongoid_form/form_builder.rb, line 78
def wrap_field(input, name)
  label_options = wrapper.label_options.dup
  extracted = label_options.extract_options!
  extracted_class = extracted[:class] ? extracted[:class] + ' ' : ''
  options = extracted.merge(class: extracted_class + @type.to_s)
  label_options << options
  
  label = label(name, *label_options) do
    asterisk(name) + @object.class.human_attribute_name(name)
  end

  wrap_group(input, name, label)
end
wrap_group(input, name, label) click to toggle source
# File lib/mongoid_form/form_builder.rb, line 144
def wrap_group(input, name, label)
  if wrapper.group_wrapper.present?      
    group_wrapper = wrapper.group_wrapper.dup
    
    if has_error?(name) && wrapper.group_error_class
      extracted = group_wrapper.extract_options!
      extracted_class = extracted[:class] ? extracted[:class] + ' ' : ''
      options = extracted.merge(class: extracted_class + wrapper.group_error_class.first)
      group_wrapper << options
    end

    wrap (label + input_wrapped(input, name)), group_wrapper
  else
    label + input_wrapped(input, name)
  end
end
wrap_localized_fields(builder, type, options) click to toggle source
# File lib/mongoid_form/form_builder.rb, line 92
def wrap_localized_fields(builder, type, options)
  name = builder.object_name.scan(/\[(.*)_translations\]/).join.to_sym
  result = ''
  I18n.available_locales.each do |locale|
    field = builder.object_name.scan(/(.*)\[(.*)_translations\]/).join('.')
    flag = wrapper.flag_for_localized.first ? wrap('', [:div, class: "flag flags-#{locale.to_s}"]) : ''
    label = builder.label locale.to_sym, *wrapper.label_options do
      asterisk(name).html_safe + I18n::t("mongoid.attributes.#{field}") + flag
    end
    input = builder.localized_field type, locale.to_sym, options

    result << wrap_group(input, name, label)
  end
  result.html_safe
end
wrapper() click to toggle source
# File lib/mongoid_form/form_builder.rb, line 108
def wrapper
  @options[:wrapper] ? MongoidForm.wrappers(@options[:wrapper]) : nil
end