Sha256: f7391abea3d6b169bcfc68887c7b4dd6d7c0ccb73ced32fed6621c978edeff4d

Contents?: true

Size: 1000 Bytes

Versions: 2

Compression:

Stored size: 1000 Bytes

Contents

module Pione
  module Transformer
    module TransformerModule
      class << self
        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

        def create_pair_by(*mods)
          mods.inject([]) do |list, mod|
            list += create_pair(mod)
          end
        end

        def create_pair(mod)
          (mod.methods.sort - Object.methods.sort).map{|m| [m, mod]}
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pione-0.1.1 lib/pione/transformer/transformer-module.rb
pione-0.1.0 lib/pione/transformer/transformer-module.rb