Sha256: e05ee42a7d5c8d7723963cc775f7c85aa05f2820328dc8052094cd9d0a30e86e

Contents?: true

Size: 1.04 KB

Versions: 1

Compression:

Stored size: 1.04 KB

Contents

require 'grokdown'

module Grokdown
  module Creating

    def self.extended(base)
      base.send(:include,InstanceMethods)
    end

    mod = self
    define_method(:recurse) { mod }

    def create(&block)
      @create = block
    end

    def build(node)
      if @create
        args = begin
          @create.call(node)
        rescue NoMethodError => e
          raise Error, "cannot find #{e.name} from #{node.to_commonmark.inspect} at #{node.sourcepos[:start_line]}"
        end

        case args
        when Hash
          if self < Hash
            new.merge!(args)
          else
            new(**args)
          end
        when Array
          if self < Array
            new(args)
          else
            new(*args)
          end
        else
          new(*args)
        end
      else
        new
      end.tap do |i| i.node=node end
    end

    module InstanceMethods
      def sourcepos
        @node&.sourcepos || {}
      end

      def node=(node)
        @node = node
      end

      def node
        @node
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
grokdown-0.1.1 lib/grokdown/creating.rb