Sha256: be4d10644b4632da329dd4cf3964ed21717ce3421f199bf8f537d1b786d82c69

Contents?: true

Size: 1.05 KB

Versions: 2

Compression:

Stored size: 1.05 KB

Contents

class Shortcode::Transformer
  def initialize(configuration)
    @configuration = configuration
    setup_rules
  end

  def apply(str, options = {})
    klass_instance.apply(str, options)
  end

  private

  def klass
    @klass ||= Class.new(Parslet::Transform)
  end

  def klass_instance
    @klass_instance ||= klass.new
  end

  def setup_rules
    shortcode_configuration = @configuration

    klass.rule(text: klass.send(:simple, :text)) { String(text) }
    klass.rule(
      open:     klass.send(:simple, :name),
      options:  klass.send(:subtree, :options),
      inner:    klass.send(:sequence, :inner),
      close:    klass.send(:simple, :name)
    ) { Shortcode::Tag.new(name.to_s, shortcode_configuration, options, inner.join, additional_attributes).render }
    klass.rule(
      open_close: klass.send(:simple, :name),
      options:    klass.send(:subtree, :options)
    ) { Shortcode::Tag.new(name.to_s, shortcode_configuration, options, '', additional_attributes).render }

    klass.rule(body: klass.send(:sequence, :strings)) { strings.join }
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
shortcode-1.2.1 lib/shortcode/transformer.rb
shortcode-1.2.0 lib/shortcode/transformer.rb