Sha256: bd58450569f3e8bce658658f2d0293fad3245da96aa6f6012ed7a8c89ef451c9

Contents?: true

Size: 1.46 KB

Versions: 1

Compression:

Stored size: 1.46 KB

Contents

require 'valise'
require 'diecut'
require 'diecut/errors'
require 'diecut/template-set'

module Diecut
  class Mill
    def initialize(kind)
      @kind = kind
    end
    attr_reader :kind
    attr_writer :valise, :mediator, :templates, :issue_handler

    def mediator
      @mediator ||= Diecut.mediator(kind)
    end

    def templates
      @templates ||= TemplateSet.new
    end

    def activate_plugins
      mediator.plugins.map(&:name).each do |name|
        if yield(name)
          mediator.activate(name)
        else
          mediator.deactivate(name)
        end
      end
    end

    def valise
      @valise ||=
        begin
          stems = mediator.activated_plugins.map do |plugin|
            plugin.stem_for(kind)
          end
          Valise::Set.define do
            stems.each do |stem|
              ro stem.template_dir
            end
          end
        end
    end

    def load_files
      valise.filter('**', %i[extended dotmatch]).files do |file|
        templates.add(file.rel_path.to_s, file.contents)
      end
    end

    def context_class
      templates.context_class
    end

    def ui_class
      mediator.build_ui_class(context_class)
    end

    def user_interface
      load_files
      templates.prepare

      ui_class.new
    end

    def churn(ui)
      templates.context = mediator.apply_user_input(ui, templates.context_class)
      templates.results do |path, contents|
        yield(path, contents)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
diecut-0.0.3 lib/diecut/mill.rb