Class: ExpressTemplates::Components::Base
- Inherits:
-
Arbre::Component
- Object
- Arbre::Component
- ExpressTemplates::Components::Base
- Defined in:
- lib/express_templates/components/base.rb
Overview
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).
Direct Known Subclasses
Constant Summary collapse
- MAP =
{}
Class Method Summary collapse
- .abstract_component(value = true) ⇒ Object
- .abstract_component? ⇒ Boolean
- .before_build(proc_or_symbol = nil, exclusive: false, &block) ⇒ Object
- .builder_method(name) ⇒ Object
-
.builder_method_and_class(method_name, klass) ⇒ Object
Defines an instance method using Arbre's BuilderMethods.
- .contains(proc = nil, &block) ⇒ Object
- .descendants ⇒ Object
-
.has_attributes(attribs) ⇒ Object
Provide default attributes for the enclosing tag of the component.
- .inherited(subclass) ⇒ Object
- .require_parent(component) ⇒ Object
- .required_parent ⇒ Object
-
.tag(tag) ⇒ Object
Override the tag_name method for other than
.Instance Method Summary collapse
- #build(*args, &block) ⇒ Object
-
#initialize ⇒ Base
constructor
A new instance of Base.
Constructor Details
#initialize ⇒ Base
Returns a new instance of Base.
66 67 68 69 70 71 72
# 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
Class Method Details
.abstract_component(value = true) ⇒ Object
29 30 31
# File 'lib/express_templates/components/base.rb', line 29 def self.abstract_component(value = true) @is_abstract = value end
.abstract_component? ⇒ Boolean
33 34 35
# 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) ⇒ Object
90 91 92 93 94 95 96 97 98 99 100
# 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) ⇒ Object
115 116 117
# 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) ⇒ Object
Defines an instance method using Arbre's BuilderMethods
56 57 58 59 60 61 62 63 64
# 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 " def \#{method_name}(*args, &block) # def checkbox(*args, &block)\n insert_tag ::\#{klass.name}, *args, &block # insert_tag ::Checkbox, *args, &block\n end # end\n EOF\n self.builder_method_name = method_name\nend\n", __FILE__, __LINE__
.contains(proc = nil, &block) ⇒ Object
74 75 76
# File 'lib/express_templates/components/base.rb', line 74 def self.contains(proc = nil, &block) define_method(:_build_body, &(proc || block)) end
.descendants ⇒ Object
119 120 121
# File 'lib/express_templates/components/base.rb', line 119 def self.descendants ObjectSpace.each_object(Class).select { |klass| klass < self } end
.has_attributes(attribs) ⇒ Object
Provide default attributes for the enclosing tag of the component
85 86 87 88
# 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) ⇒ Object
110 111 112 113
# 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
.require_parent(component) ⇒ Object
42 43 44 45
# 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 ⇒ Object
47 48 49
# File 'lib/express_templates/components/base.rb', line 47 def self.required_parent @parent_component end
.tag(tag) ⇒ Object
Override the tag_name method for other than
79 80 81
# File 'lib/express_templates/components/base.rb', line 79 def self.tag(tag) define_method(:tag_name) { tag } end
Instance Method Details
#build(*args, &block) ⇒ Object
102 103 104 105 106 107 108
# 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