Class: ActiveForm::Element::Builder

Inherits:
Object
  • Object
show all
Includes:
Mixins::CommonMethods, Mixins::ElementMethods
Defined in:
lib/active_form/elements/builder.rb

Constant Summary collapse

NIL_LAMBDA =
lambda { |elem| }
DEFAULT_HTML_BUILDER =
lambda { |builder, elem| builder.div('') }

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Mixins::ElementMethods

#contained?, #default_value, #define_formatting_filter, #define_freeze_filter, #description, #disabled?, #element_attributes, #element_binding, #element_binding_key, #element_name, #element_type, #export_value, #fallback_value, #fallback_value=, #format_value, #formatted_value, #freeze_element, #freeze_value, #frozen?, #frozen_value, #frozen_value=, #hidden?, #hide_element, #identifier, included, #label, #labelled?, #localize, #localized?, #readonly?, #register_container, #required=, #required?, #reset_formatting_filter, #reset_freeze_filter, #revert_value, #title, #update_options_and_attributes

Class Method Details

.create(definition_name, &block) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/active_form/elements/builder.rb', line 79

def create(definition_name, &block)
  class_name = type_classname(definition_name)
  if !ActiveForm::Element.const_defined?(class_name)
    ActiveForm::Element.const_set(class_name, Class.new(self))
    if klass = ActiveForm::Element.const_get(class_name)
      klass.html_builder_proc = block if block_given?
      ActiveForm::Element::register(klass)
      return klass
    end
  end
  nil
end

.element_typeObject



68
69
70
# File 'lib/active_form/elements/builder.rb', line 68

def self.element_type
  :builder
end

.html_builder(prc = nil, &block) ⇒ Object Also known as: html_builder_proc=



92
93
94
# File 'lib/active_form/elements/builder.rb', line 92

def html_builder(prc = nil, &block)
  define_singleton_method(:html_builder_proc, &(block_given? ? block : prc))
end

.inherited(derivative) ⇒ Object



72
73
74
75
# File 'lib/active_form/elements/builder.rb', line 72

def self.inherited(derivative)
  ActiveForm::Element::register(derivative) if derivative.kind_of?(ActiveForm::Element::Base)
  super
end

.reset_html_builderObject



97
98
99
# File 'lib/active_form/elements/builder.rb', line 97

def reset_html_builder
  undefine_singleton_method(:html_builder_proc) rescue nil
end

Instance Method Details

#accept_block(&block) ⇒ Object



16
17
18
# File 'lib/active_form/elements/builder.rb', line 16

def accept_block(&block)
  define_html_builder(&block) if block_given?
end

#define_html_builder(prc = nil, &block) ⇒ Object Also known as: html, html_builder=



40
41
42
# File 'lib/active_form/elements/builder.rb', line 40

def define_html_builder(prc = nil, &block)
  @html_builder = (block_given? ? block : prc)
end

#element_value(export = false) ⇒ Object Also known as: values, value



20
21
22
# File 'lib/active_form/elements/builder.rb', line 20

def element_value(export = false)
  @element_value ||= default_value  
end

#element_value=(value) ⇒ Object Also known as: initial_value=, values=, value=, binding=, bind_to, html=



26
27
28
# File 'lib/active_form/elements/builder.rb', line 26

def element_value=(value)
  @element_value = value    
end

#html_builderObject



36
37
38
# File 'lib/active_form/elements/builder.rb', line 36

def html_builder
  @html_builder ||= self.class.respond_to?(:html_builder_proc) ? self.class.method_to_proc(:html_builder_proc) : nil
end

#initialize_element(*args, &block) ⇒ Object



11
12
13
14
# File 'lib/active_form/elements/builder.rb', line 11

def initialize_element(*args, &block)
  super(*args, &NIL_LAMBDA)
  define_html_builder(&block) if block_given?
end

#render_element(builder = create_builder) ⇒ Object



58
59
60
61
62
63
64
65
66
# File 'lib/active_form/elements/builder.rb', line 58

def render_element(builder = create_builder)
  if html_builder.respond_to?(:call)
    html_builder.call(builder, self)
  elsif !element_value.blank?
    builder << "#{element_value}\n"
  else
    DEFAULT_HTML_BUILDER.call(builder, self)
  end
end

#render_frozen(builder = create_builder) ⇒ Object



54
55
56
# File 'lib/active_form/elements/builder.rb', line 54

def render_frozen(builder = create_builder)
  render_element(builder)
end

#render_label(builder = create_builder) ⇒ Object



50
51
52
# File 'lib/active_form/elements/builder.rb', line 50

def render_label(builder = create_builder)
  element_name
end

#reset_html_builderObject



46
47
48
# File 'lib/active_form/elements/builder.rb', line 46

def reset_html_builder
  @html_builder = nil
end