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
# File lib/olelo/util.rb, line 37 def self.included(base) base.extend(Util) end
Public Instance Methods
# File lib/olelo/util.rb, line 47 def check errors = [] yield(errors) raise MultiError, errors if !errors.empty? end
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
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
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
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 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 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
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
# 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
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
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 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
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
# 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 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
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
# File lib/olelo/util.rb, line 68 def yaml_dump(object) Psych.dump(object) end
# File lib/olelo/util.rb, line 58 def yaml_load(content) Psych.safe_load(content) end
# 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