Sha256: 037fb6496704355bd4466932f0d59462369d1a748cdcffa0a4da43e39c42d11c

Contents?: true

Size: 1.07 KB

Versions: 2

Compression:

Stored size: 1.07 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

  # rubocop:disable Metrics/AbcSize
  def setup_rules
    config = @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, config, 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, config, options, "", additional_attributes).render }

    klass.rule(body: klass.send(:sequence, :strings)) { strings.join }
  end
  # rubocop:enable Metrics/AbcSize

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
shortcode-2.0.0 lib/shortcode/transformer.rb
shortcode-2.0.0.pre lib/shortcode/transformer.rb