Module: Pione::Util::ParsletTransformerModule

Overview

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

Class Method Summary collapse

Class Method Details

.included(mod) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# 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