Class: Forme::Serializer

Inherits:
Object
  • Object
show all
Defined in:
lib/forme.rb

Overview

Default serializer class used by the library. Any other serializer classes that want to produce html should probably subclass this class.

Registered as :default.

Defined Under Namespace

Modules: AmericanTime Classes: PlainText

Constant Summary collapse

ESCAPE_HTML =

Borrowed from Rack::Utils, map of single character strings to html escaped versions.

{"&" => "&amp;", "<" => "&lt;", ">" => "&gt;", "'" => "&#39;", '"' => "&quot;"}
ESCAPE_HTML_PATTERN =

A regexp that matches all html characters requiring escaping.

Regexp.union(*ESCAPE_HTML.keys)
SELF_CLOSING =

Which tags are self closing (such tags ignore children).

[:img, :input]

Instance Method Summary collapse

Instance Method Details

#call(tag) ⇒ Object

Serialize the tag object to an html string. Supports Tag instances, Input instances (recursing into call with the result of formatting the input), arrays (recurses into call for each entry and joins the result), and (html escapes the string version of them, unless they include the Raw module, in which case no escaping is done).



1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
# File 'lib/forme.rb', line 1059

def call(tag)
  case tag
  when Tag
    if SELF_CLOSING.include?(tag.type)
      "<#{tag.type}#{attr_html(tag)}/>"
    else
      "#{serialize_open(tag)}#{call(tag.children)}#{serialize_close(tag)}"
    end
  when Input
    call(tag.format)
  when Array
    tag.map{|x| call(x)}.join
  when DateTime, Time
    format_time(tag)
  when Date
    format_date(tag)
  when Raw
    tag.to_s
  else
    h tag
  end
end

#serialize_close(tag) ⇒ Object

Returns the closing part of the given tag.



1088
1089
1090
# File 'lib/forme.rb', line 1088

def serialize_close(tag)
  "</#{tag.type}>"
end

#serialize_open(tag) ⇒ Object

Returns the opening part of the given tag.



1083
1084
1085
# File 'lib/forme.rb', line 1083

def serialize_open(tag)
  "<#{tag.type}#{attr_html(tag)}>"
end