Class: HammerBuilder::Abstract
- Inherits:
-
Object
- Object
- HammerBuilder::Abstract
- Extended by:
- DynamicClasses
- Defined in:
- lib/hammer_builder/abstract.rb,
lib/hammer_builder/abstract/abstract_tag.rb,
lib/hammer_builder/abstract/abstract_double_tag.rb,
lib/hammer_builder/abstract/abstract_single_tag.rb
Overview
Abstract implementation of Builder
Direct Known Subclasses
Instance Attribute Summary collapse
-
#_current ⇒ Object
(also: #current)
current tag being builded.
Instance Method Summary collapse
-
#cdata(content) ⇒ Object
insersts CDATA with
content
. -
#comment(comment) ⇒ Object
inserts
comment
. -
#flush ⇒ Object
private
flushes open tag.
-
#go_in(*variables, &block) ⇒ Object
(also: #dive)
enables you to evaluate
block
inside the builder withvariables
. -
#html5 ⇒ Object
renders html5 doc type.
-
#initialize ⇒ Abstract
constructor
creates a new builder This is quite expensive, HammerBuilder::Pool should be used.
-
#join(collection, glue = nil) { ... } ⇒ Object
joins and renders
collection
withglue
. -
#js(js, options = { }) ⇒ Object
renders js.
-
#raw(text) ⇒ Object
unescaped
text
to output. -
#render(object, method, *args) { ... } ⇒ Object
(also: #r)
renders
object
withmethod
. -
#reset ⇒ Object
resets the builder to the state after creation - much faster then creating a new one.
-
#set_variables(instance_variables) { ... } ⇒ Object
sets instance variables when block is yielded.
-
#text(text) ⇒ Object
escapes
text
to output. -
#to_html ⇒ String
Output.
Methods included from DynamicClasses
dynamic_classes, extended, inherited
Constructor Details
#initialize ⇒ Abstract
creates a new builder This is quite expensive, HammerBuilder::Pool should be used
57 58 59 60 61 62 63 64 65 |
# File 'lib/hammer_builder/abstract.rb', line 57 def initialize() @_output = "" @_stack = [] @_current = nil # tag classes initialization .each do |klass| instance_variable_set(:"@_#{klass}", self.class.dynamic_classes[klass.camelize.to_sym].new(self)) end end |
Instance Attribute Details
#_current ⇒ Object Also known as: current
current tag being builded
50 51 52 |
# File 'lib/hammer_builder/abstract.rb', line 50 def _current @_current end |
Instance Method Details
#cdata(content) ⇒ Object
insersts CDATA with content
86 87 88 89 |
# File 'lib/hammer_builder/abstract.rb', line 86 def cdata(content) flush @_output << Strings::CDATA_START << content.to_s << Strings::CDATA_END end |
#comment(comment) ⇒ Object
inserts comment
80 81 82 83 |
# File 'lib/hammer_builder/abstract.rb', line 80 def comment(comment) flush @_output << Strings::COMMENT_START << comment.to_s << Strings::COMMENT_END end |
#flush ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
flushes open tag
150 151 152 153 154 155 |
# File 'lib/hammer_builder/abstract.rb', line 150 def flush if @_current @_current.flush @_current = nil end end |
#go_in(*variables, &block) ⇒ Object Also known as: dive
enables you to evaluate block
inside the builder with variables
125 126 127 128 |
# File 'lib/hammer_builder/abstract.rb', line 125 def go_in(*variables, &block) instance_exec *variables, &block self end |
#html5 ⇒ Object
renders html5 doc type
94 95 96 |
# File 'lib/hammer_builder/abstract.rb', line 94 def html5 raw "<!DOCTYPE html>\n" end |
#join(collection, glue = nil) { ... } ⇒ Object
joins and renders collection
with glue
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
# File 'lib/hammer_builder/abstract.rb', line 186 def join(collection, glue = nil, &it) # TODO as helper? two block method call #join(collection, &item).with(&glue) glue_block = case glue when String lambda { text glue } when Proc glue else lambda { } end collection.each_with_index do |obj, i| glue_block.call() if i > 0 obj.is_a?(Proc) ? obj.call : it.call(obj) end end |
#js(js, options = { }) ⇒ Object
renders js
173 174 175 176 |
# File 'lib/hammer_builder/abstract.rb', line 173 def js(js, = { }) use_cdata = .delete(:cdata) || false script({ :type => "text/javascript" }.merge()) { use_cdata ? cdata(js) : text(js) } end |
#raw(text) ⇒ Object
unescaped text
to output
74 75 76 77 |
# File 'lib/hammer_builder/abstract.rb', line 74 def raw(text) flush @_output << text.to_s end |
#render(object, method, *args) { ... } ⇒ Object Also known as: r
renders object
with method
162 163 164 165 |
# File 'lib/hammer_builder/abstract.rb', line 162 def render(object, method, *args, &block) object.__send__ method, self, *args, &block self end |
#reset ⇒ Object
resets the builder to the state after creation - much faster then creating a new one
99 100 101 102 103 104 |
# File 'lib/hammer_builder/abstract.rb', line 99 def reset flush @_output.clear @_stack.clear self end |
#set_variables(instance_variables) { ... } ⇒ Object
sets instance variables when block is yielded
135 136 137 138 139 140 |
# File 'lib/hammer_builder/abstract.rb', line 135 def set_variables(instance_variables) instance_variables.each { |name, value| instance_variable_set("@#{name}", value) } yield(self) instance_variables.each { |name, _| remove_instance_variable("@#{name}") } self end |
#text(text) ⇒ Object
escapes text
to output
68 69 70 71 |
# File 'lib/hammer_builder/abstract.rb', line 68 def text(text) flush @_output << CGI.escapeHTML(text.to_s) end |
#to_html ⇒ String
Returns output.
143 144 145 146 |
# File 'lib/hammer_builder/abstract.rb', line 143 def to_html() flush @_output.clone end |