Sha256: c249118669ca268dd04c4c17c98220591d1d974141ab2dc4d5024fba2034412c

Contents?: true

Size: 1.07 KB

Versions: 7

Compression:

Stored size: 1.07 KB

Contents

require 'cgi'

module PrettyDiff
  class AbstractGenerator

    def self.[](tgt)
      new(tgt)
    end

    def initialize(tgt)
      target_name = class_to_target_name(tgt.class)
      instance_variable_set("@#{target_name}", tgt)
      self.class.class_eval do
        attr_accessor(target_name)
      end
    end

    def generate
      raise 'Not implemented!'
    end

  protected

    def tag(name, options=nil, open=false)
      "<#{name}#{tag_options(options) if options}#{open ? ">" : " />"}"
    end

    def content_tag(name, options=nil, &block)
      "<#{name}#{tag_options(options) if options}>#{block.call}</#{name}>"
    end

    def tag_options(options)
      return if options.empty?
      attrs = []
      options.each_pair do |key, value|
        unless value.nil?
          attrs << %(#{key}="#{h(value)}")
        end
      end
      " #{attrs.sort * ' '}" unless attrs.empty?
    end

    def h(t)
      CGI.escapeHTML(t)
    end

    def class_to_target_name(c)
      c.to_s.split('::').last.gsub(/Gen(erator)?\z/, '').gsub(/(.)([A-Z])/,'\1_\2').downcase
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
pretty_diff-2.1.4 lib/pretty_diff/abstract_generator.rb
pretty_diff-2.1.3 lib/pretty_diff/abstract_generator.rb
pretty_diff-2.1.2 lib/pretty_diff/abstract_generator.rb
pretty_diff-2.1.1 lib/pretty_diff/abstract_generator.rb
pretty_diff-2.1.0 lib/pretty_diff/abstract_generator.rb
pretty_diff-2.0.1 lib/pretty_diff/abstract_generator.rb
pretty_diff-2.0.0 lib/pretty_diff/abstract_generator.rb