class Kumogata2::Plugin::Ruby

Constants

VERSION

Public Class Methods

new(options) click to toggle source
# File lib/kumogata2/plugin/ruby.rb, line 12
def initialize(options)
  @options = options
end

Public Instance Methods

dump(hash) click to toggle source
# File lib/kumogata2/plugin/ruby.rb, line 23
def dump(hash)
  devaluate_template(hash).colorize_as(:ruby)
end
parse(str) click to toggle source
# File lib/kumogata2/plugin/ruby.rb, line 16
def parse(str)
  context = Kumogata2::Plugin::Ruby::Context.new(@options)
  context.instance_eval(str, @options.path_or_url)
  @post = context.instance_variable_get(:@_post) if context.instance_variable_defined? :@_post
  context.instance_variable_get(:@_template) if context.instance_variable_defined? :@_template
end
post(outputs) click to toggle source
# File lib/kumogata2/plugin/ruby.rb, line 27
def post(outputs)
  if @post
    @post.call(outputs)
  end
end

Private Instance Methods

devaluate_template(template) click to toggle source
# File lib/kumogata2/plugin/ruby.rb, line 35
  def devaluate_template(template)
    exclude_key = proc do |k|
      k = k.to_s.
        gsub('::', '__').
        gsub(':', '___').
        gsub('.', '____').
        gsub('-', '_____')
      k !~ /\A[_a-z]\w+\Z/i and k !~ %r|\A/\S*\Z|
    end

    key_conv = proc do |k|
      k = k.to_s

      if k =~ %r|\A/\S*\Z|
        proc do |v, nested|
          if nested
            "_path(#{k.inspect}) #{v}"
          else
            "_path #{k.inspect}, #{v}"
          end
        end
      else
        k.gsub('::', '__').
          gsub(':', '___').
          gsub('.', '____').
          gsub('-', '_____')
      end
    end

    value_conv = proc do |v|
      if v.kind_of?(String) and v =~ /\A(?:0|[1-9]\d*)\Z/
        v.to_i
      else
        v
      end
    end

    dslh_opts = {
      key_conv: key_conv,
      value_conv: value_conv,
      exclude_key: exclude_key,
      initial_depth: 1,
    }

    if ENV['EXPORT_RUBY_USE_BRACES'] == '1'
      dslh_opts[:use_braces_instead_of_do_end] = true
    end

    if ENV['EXPORT_RUBY_OLD_FORMAT'] == '1'
      dslh_opts[:dump_old_hash_array_format] = true
    end

    dsl = Dslh.deval(template, dslh_opts)

    <<-EOS
template do
  #{dsl.strip}
end
    EOS
  end