module Pione::Util::ParsletTransformerModule

ParsletTransformerModule enables parslet’s transforms to be defined by multiple modules.

Public Class Methods

included(mod) click to toggle source

@api private

# File lib/pione/util/parslet-extension.rb, line 119
def included(mod)
  singleton = class << mod; self; end
  create_pair_by(Parslet, Parslet::Transform).each do |name, orig|
    singleton.__send__(:define_method, name) do |*args, &b|
      orig.__send__(name, *args, &b)
    end
  end

  class << mod
    def included(klass)
      name = :@__transform_rules
      klass_rules = klass.instance_variable_get(name)
      klass_rules = klass_rules ? klass_rules + rules : rules
      klass.instance_variable_set(name, klass_rules)
    end
  end
end

Private Class Methods

create_pair_by(*mods) click to toggle source

Create module and the methods pair by modules.

@api private

# File lib/pione/util/parslet-extension.rb, line 142
def create_pair_by(*mods)
  mods.inject([]) do |list, mod|
    list + (mod.methods.sort - Object.methods.sort).map{|m| [m, mod]}
  end
end