Sha256: 29d2b5683484de514be539547590a4ee2dc6646982aecb43a48f66bfffab5d28

Contents?: true

Size: 1.5 KB

Versions: 1

Compression:

Stored size: 1.5 KB

Contents

require 'cgi'
require 'uri'

module Wikilink
  class Converter
    module ArgumentExtractor
      def extract_arguments(*args)
        options = {}
        options = args.pop if args.last.is_a?(Hash)
        name = args.shift

        if name.nil? || name.is_a?(String) || name.is_a?(Symbol)
          name = name.to_s
          converter = args.shift
        else
          converter = name
          name = nil
        end

        throw ArgumentError, "too many arguments" unless args.empty?

        [name, converter, options]
      end
    end

    module LinkHelper
      def link_to(name, url, attributes = {})
        attributes[:class] = Array(attributes[:class]).flatten.join(' ').split.uniq.join(' ')
        attributes.delete(:class) if attributes[:class].empty?
        attributes = attributes.inject('') do |memo, (key, value)|
          memo + key.to_s + '="' + CGI.escape_html(value) + '" '
        end
        url, fragment = url.split('#', 2)
        if fragment
          url << '#' + URI.encode(fragment, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
        end

        %Q{<a #{attributes}href="#{url}">#{CGI.escape_html name}</a>}
      end
    end

    module HTMLAttributes
      def html_class(extra_classes = nil)
        classes = []
        if respond_to? :options
          classes << options[:class]
          classes << 'external' if options[:external]
        end

        classes << extra_classes if extra_classes

        classes.flatten.join(' ').split.uniq.join(' ')
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
wikilink-converter-0.2.4 lib/wikilink/converter/utils.rb