module Olelo::Util

Constants

JAVASCRIPT_ESCAPE

Hash used by {#escape_javascript} @api private

VALID_XML_CHARS

Used by {#valid_xml_chars?} @api private

Public Class Methods

included(base) click to toggle source
# File lib/olelo/util.rb, line 37
def self.included(base)
  base.extend(Util)
end

Public Instance Methods

check() { |errors| ... } click to toggle source
# File lib/olelo/util.rb, line 47
def check
  errors = []
  yield(errors)
  raise MultiError, errors if !errors.empty?
end
decode64(s) click to toggle source

Decode base64 encoded string

@param [String] Base64 encoded string @return [String] Decoded string

# File lib/olelo/util.rb, line 161
def decode64(s)
  s.unpack('m').first
end
deep_copy(object) click to toggle source

Creates deep copy of object by abusing ‘Marshal` This method is slow and not adequate for huge objects. It can only copy objects which are serializable.

@param [Object] Serializable object @return [Object] Deep copy of object

# File lib/olelo/util.rb, line 153
def deep_copy(object)
  Marshal.load(Marshal.dump(object))
end
encode64(s) click to toggle source

Encode string as base64

@param [String] String @return [String] Base64 encoded string

# File lib/olelo/util.rb, line 169
def encode64(s)
  [s].pack('m').gsub(/\n/, '')
end
escape(s) click to toggle source

Like CGI.escape but escapes space not as +

# File lib/olelo/util.rb, line 73
def escape(s)
  s = s.to_s
  s.gsub(/([^a-zA-Z0-9_.-]+)/) do
    '%' + $1.unpack('H2' * $1.bytesize).join('%').upcase
  end
end
escape_html(s) click to toggle source

Escape html entities in string

@param [String] s String @return [String] Escaped string

# File lib/olelo/util.rb, line 100
def escape_html(s)
  CGI.escapeHTML(s.to_s).html_safe
end
escape_javascript(s) click to toggle source

Escape javascript code for embedding in html

@param [String] s String @return [String] Escaped string

# File lib/olelo/util.rb, line 121
def escape_javascript(s)
  s.to_s.gsub(/[&><]/) { |x| JAVASCRIPT_ESCAPE[x] }
end
md5(s) click to toggle source

Compute md5 hash of string

@param [String] String @return [String] md5 hash of string

# File lib/olelo/util.rb, line 130
def md5(s)
  s = Digest::MD5.hexdigest(s)
  s.force_encoding(Encoding::ASCII)
  s
end
no_cache?(env = @env) click to toggle source
# File lib/olelo/util.rb, line 43
def no_cache?(env = @env)
  env['HTTP_PRAGMA'] == 'no-cache' || env['HTTP_CACHE_CONTROL'].to_s.include?('no-cache')
end
sha256(s) click to toggle source

Compute sha256 hash of string

@param [String] String @return [String] sha256 hash of string

# File lib/olelo/util.rb, line 141
def sha256(s)
  s = Digest::SHA256.hexdigest(s)
  s.force_encoding(Encoding::ASCII)
  s
end
titlecase(s) click to toggle source

Capitalizes all the words to create a nicer looking title

@param [String] lowercase_string_with_underscore @return [String] Lowercase String With Underscore

# File lib/olelo/util.rb, line 192
def titlecase(s)
  s.to_s.tr('_', ' ').split(/\s+/).map(&:capitalize).join(' ')
end
truncate(s, max, omission = '...') click to toggle source

Truncate string if it is too long and add omission

@param [String] String to truncate @param [Integer] Maximum length @param [String] Omission string, e.g. ellipsis @return [String] Truncated string

# File lib/olelo/util.rb, line 179
def truncate(s, max, omission = '...')
  s = s.to_s
  if s.length > max
    s[0...max] + omission
  else
    s
  end
end
unescape(s) click to toggle source

Like CGI.unescape but does not unescape +

# File lib/olelo/util.rb, line 81
def unescape(s)
  s = s.to_s
  enc = s.encoding
  s.gsub(/((?:%[0-9a-fA-F]{2})+)/) do
    [$1.delete('%')].pack('H*').force_encoding(enc)
  end
end
unescape_backslash(s) click to toggle source
# File lib/olelo/util.rb, line 89
def unescape_backslash(s)
  s = s.to_s
  enc = s.encoding
  s.gsub(/\\([0-7]{3})/) { $1.to_i(8).chr.force_encoding(enc) }.
    gsub(/\\x([\da-f]{2})/i) { $1.to_i(16).chr.force_encoding(enc) }
end
unescape_html(s) click to toggle source

Unescape html entities in string

@param [String] s String with escaped html entities @return [String] Unescaped string

# File lib/olelo/util.rb, line 108
def unescape_html(s)
  CGI.unescapeHTML(s.to_s)
end
valid_xml_chars?(s) click to toggle source

Check if string contains only characters which are valid in XML

@see www.w3.org/TR/REC-xml/#charsets XML charset @param [String] s @return [Boolean]

# File lib/olelo/util.rb, line 212
def valid_xml_chars?(s)
  s = s.to_s
  if s.encoding == Encoding::UTF_8
    return false if !s.valid_encoding?
  else
    s = s.dup if s.frozen?
    return false if s.try_encoding(Encoding::UTF_8).encoding != Encoding::UTF_8
  end
  s.codepoints do |n|
    return false if !VALID_XML_CHARS.any? {|v| v === n }
  end
  true
end
yaml_dump(object) click to toggle source
# File lib/olelo/util.rb, line 68
def yaml_dump(object)
  Psych.dump(object)
end
yaml_load(content) click to toggle source
# File lib/olelo/util.rb, line 58
def yaml_load(content)
  Psych.safe_load(content)
end
yaml_load_file(file) click to toggle source
# File lib/olelo/util.rb, line 53
def yaml_load_file(file)
  File.open(file, 'r:bom|utf-8') {|f| yaml_load(f.read) }
end