Module: HOM::Encoding

Defined in:
lib/hom.rb

Class Method Summary collapse

Class Method Details

.encode(object) ⇒ Object



120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/hom.rb', line 120

def self.encode(object)
  if object.is_a?(Array)
    object.map { |item| encode(item) }.join
  elsif object.is_a?(NodeList)
    object.to_a.map { |item| encode(item) }.join
  elsif object.is_a?(Element)
    encode_element(object)
  elsif object.respond_to?(:html_safe?) && object.html_safe?
    object.to_s
  else
    escape(object)
  end
end

.encode_attribute(name, value) ⇒ Object



146
147
148
# File 'lib/hom.rb', line 146

def self.encode_attribute(name, value)
  value == Undefined ? " #{name}" : %( #{name}="#{escape value}")
end

.encode_attributes(element) ⇒ Object



142
143
144
# File 'lib/hom.rb', line 142

def self.encode_attributes(element)
  element.attributes.to_hash.map { |name, value| encode_attribute(name, value) }.join
end

.encode_element(object) ⇒ Object



134
135
136
# File 'lib/hom.rb', line 134

def self.encode_element(object)
  object.content? ? "#{start_tag(object)}#{encode(object.content)}</#{object.tag_name}>" : start_tag(object)
end

.escape(object) ⇒ Object



154
155
156
# File 'lib/hom.rb', line 154

def self.escape(object)
  CGI.escapeHTML(object.to_s)
end

.safe(string) ⇒ Object



150
151
152
# File 'lib/hom.rb', line 150

def self.safe(string)
  string.respond_to?(:html_safe) ? string.html_safe : string
end

.safe_encode(object) ⇒ Object



116
117
118
# File 'lib/hom.rb', line 116

def self.safe_encode(object)
  safe(encode(object))
end

.start_tag(element) ⇒ Object



138
139
140
# File 'lib/hom.rb', line 138

def self.start_tag(element)
  "<#{element.tag_name}#{encode_attributes(element)}>"
end