Sha256: 47029cba9638468beb952347aa0dd3bb62bb2cb48b1eb602ad494dca8a242768

Contents?: true

Size: 976 Bytes

Versions: 1

Compression:

Stored size: 976 Bytes

Contents

require "active_support/concern"
module Himekaminize
  module Filterable
    extend ::ActiveSupport::Concern

    def initialize(default_context = {})
      @default_context = default_context
    end

    def call(markdown, context = {})
      @markdown = markdown
      to_lines
      @result ||= Hash.new
      context = default_context.merge(context)

      @result = filters.inject(context: context, output: lines) do |output, filter|
        filter.call(output)
      end

      @result
    end

    def result
      @result
    end

    private

    def filters
      @filters ||= self.class.filter_classes.map(&:new)
    end

    def markdown
      @markdown
    end

    def context
      @context
    end

    def default_context
      @default_context
    end

    def lines
      @lines
    end

    def to_lines
      @lines = markdown.lines
    end

    module ClassMethods
      def filter_classes
        raise ::NotImplementedError
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
himekaminize-0.0.5 lib/himekaminize/filterable.rb