lib/string_tools.rb in string_tools-0.2.0 vs lib/string_tools.rb in string_tools-0.3.0

- old
+ new

@@ -4,10 +4,12 @@ require 'sanitize' require 'active_support/core_ext/string' require 'string_tools/core_ext/string' module StringTools + autoload :HTML, 'string_tools/html' + module CharDet # Возвращает true если строка содержит допустимую # последовательность байтов для кодировки utf8 и false в обратном случае # см. http://en.wikipedia.org/wiki/UTF-8 def valid_utf8? string @@ -106,15 +108,14 @@ end extend Sanitizing module Sanitizer class Base - TAGS_WITH_ATTRIBUTES = { 'p' => %w(align style), 'div' => %w(align style), - 'span' => %w(align style), + 'span' => %w(align style), 'td' => %w(align width valign colspan rowspan style), 'th' => %w(align width valign colspan rowspan style), 'a' => %w(href target name style), 'table' => %w(cellpadding cellspacing width border align style), 'img' => %w(src width height style) @@ -133,18 +134,43 @@ # Мерджим добавочные теги и атрибуты attributes.merge!(attr) elements = attributes.keys | TAGS_WITHOUT_ATTRIBUTES - Sanitize.fragment(str, + Sanitize.fragment( + str, :attributes => attributes, :elements => elements, :css => {:properties => Sanitize::Config::RELAXED[:css][:properties]}, :remove_contents => %w(style javascript), - :allow_comments => false + :allow_comments => false, + :transformers => [LINK_NORMALIZER] ) end end + + # приводит ссылки согласно стандарту, не корёжит + # http://www.фермаежей.рф => http://www.xn--80ajbaetq5a8a.xn--p1ai + class LinkNormalizer + def call(env) + node = env[:node] + case node.name + when 'a'.freeze + normalize_link node, 'href'.freeze + when 'img'.freeze + normalize_link node, 'src'.freeze + end + end + + private + + def normalize_link(node, attr_name) + return unless node[attr_name] + node[attr_name] = Addressable::URI.parse(node[attr_name]).normalize.to_s + end + end + + LINK_NORMALIZER = LinkNormalizer.new end module SumInWords # Сумма в рублях прописью. Кол-во копеек выводится всегда. Первая буква заглавная def rublej_propisju(amount)