class ExpressTemplates::Components::Base
ExpressTemplates::Components::Base
is the base class for ExpressTemplates
view components.
Subclasses can attach hooks.
An ET
component may adopt other capabilities (e.g. support RESTful options).
Constants
- MAP
Public Class Methods
abstract_component(value = true)
click to toggle source
# File lib/express_templates/components/base.rb, line 29 def self.abstract_component(value = true) @is_abstract = value end
abstract_component?()
click to toggle source
# File lib/express_templates/components/base.rb, line 33 def self.abstract_component? @is_abstract end
before_build(proc_or_symbol = nil, exclusive: false, &block)
click to toggle source
# File lib/express_templates/components/base.rb, line 90 def self.before_build(proc_or_symbol = nil, exclusive: false, &block) hook = (proc_or_symbol || block) unless hook.kind_of?(Symbol) or hook.respond_to?(:call) raise "before_build requires symbol (method_name), proc or block" end if exclusive self.before_build_hooks = [hook] else self.before_build_hooks += [hook] end end
builder_method(name)
click to toggle source
# File lib/express_templates/components/base.rb, line 115 def self.builder_method(name) builder_method_and_class name, self end
builder_method_and_class(method_name, klass)
click to toggle source
Defines an instance method using Arbre's BuilderMethods
@param String
method_name (component)
@param Class klass
# File lib/express_templates/components/base.rb, line 56 def self.builder_method_and_class(method_name, klass) ExpressTemplates::Components::Registry[method_name] = klass Arbre::Element::BuilderMethods.class_eval <<-EOF, __FILE__, __LINE__ def #{method_name}(*args, &block) # def checkbox(*args, &block) insert_tag ::#{klass.name}, *args, &block # insert_tag ::Checkbox, *args, &block end # end EOF self.builder_method_name = method_name end
contains(proc = nil, &block)
click to toggle source
# File lib/express_templates/components/base.rb, line 74 def self.contains(proc = nil, &block) define_method(:_build_body, &(proc || block)) end
descendants()
click to toggle source
# File lib/express_templates/components/base.rb, line 119 def self.descendants ObjectSpace.each_object(Class).select { |klass| klass < self } end
has_attributes(attribs)
click to toggle source
Provide default attributes for the enclosing tag of the component
# File lib/express_templates/components/base.rb, line 85 def self.has_attributes(attribs) self._default_classes = attribs.delete(:class) _default_attributes.merge!(attribs) end
inherited(subclass)
click to toggle source
# File lib/express_templates/components/base.rb, line 110 def self.inherited(subclass) method_name = subclass.to_s.demodulize.underscore subclass.builder_method_and_class(method_name, subclass) end
new(*)
click to toggle source
Calls superclass method
# File lib/express_templates/components/base.rb, line 66 def initialize(*) super _default_attributes.each do |name, value| set_attribute(name, value) end add_class _default_classes end
require_parent(component)
click to toggle source
# File lib/express_templates/components/base.rb, line 42 def self.require_parent(component) raise "must pass a sublcass of ExpressTemplates::Components::Base" if !component.kind_of? ExpressTemplates::Components::Base @parent_component = component end
required_parent()
click to toggle source
# File lib/express_templates/components/base.rb, line 47 def self.required_parent @parent_component end
tag(tag)
click to toggle source
Override the tag_name method for other than <div>
# File lib/express_templates/components/base.rb, line 79 def self.tag(tag) define_method(:tag_name) { tag } end
Private Class Methods
_default_attributes()
click to toggle source
# File lib/express_templates/components/base.rb, line 144 def self._default_attributes @default_attributes ||= {} end
_default_classes()
click to toggle source
# File lib/express_templates/components/base.rb, line 150 def self._default_classes @default_classes ||= '' end
_default_classes=(classes)
click to toggle source
# File lib/express_templates/components/base.rb, line 153 def self._default_classes=(classes) @default_classes = classes end
Public Instance Methods
build(*args, &block)
click to toggle source
Calls superclass method
# File lib/express_templates/components/base.rb, line 102 def build(*args, &block) _extract_class!(args) _run_before_build_hooks super(*args) { _build_body(&block) if respond_to?(:_build_body) } end
Protected Instance Methods
default_class_name()
click to toggle source
# File lib/express_templates/components/base.rb, line 124 def default_class_name self.class.name.demodulize.underscore.dasherize end
Private Instance Methods
_default_attributes()
click to toggle source
# File lib/express_templates/components/base.rb, line 141 def _default_attributes self.class._default_attributes end
_default_classes()
click to toggle source
# File lib/express_templates/components/base.rb, line 147 def _default_classes self.class._default_classes end
_extract_class!(args)
click to toggle source
# File lib/express_templates/components/base.rb, line 138 def _extract_class!(args) add_class args.last.delete(:class) if args.last.try(:kind_of?, Hash) end
_run_before_build_hooks()
click to toggle source
# File lib/express_templates/components/base.rb, line 129 def _run_before_build_hooks before_build_hooks.each do |hook| if hook.kind_of?(Symbol) self.send(hook) else instance_exec(&hook) end end end