class Shortcode::Transformer

Public Class Methods

new(configuration) click to toggle source
# File lib/shortcode/transformer.rb, line 3
def initialize(configuration)
  @configuration = configuration
  setup_rules
end

Public Instance Methods

apply(str, options={}) click to toggle source
# File lib/shortcode/transformer.rb, line 8
def apply(str, options={})
  klass_instance.apply(str, options)
end

Private Instance Methods

klass() click to toggle source
# File lib/shortcode/transformer.rb, line 14
def klass
  @klass ||= Class.new(Parslet::Transform)
end
klass_instance() click to toggle source
# File lib/shortcode/transformer.rb, line 18
def klass_instance
  @klass_instance ||= klass.new
end
setup_rules() click to toggle source

rubocop:disable Metrics/AbcSize

# File lib/shortcode/transformer.rb, line 23
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