Sha256: 4341ce5ad018a39b7978a46ded952bac8cf7368645da6bd05a1376819408540e

Contents?: true

Size: 1.68 KB

Versions: 1

Compression:

Stored size: 1.68 KB

Contents

require 'diecut/errors'
require 'diecut/ui-config'
require 'diecut/ui-applier'
require 'diecut/context-handler'

module Diecut
  class Mediator
    def initialize
      @plugins = []
      @activated = {}
    end
    attr_reader :plugins

    def add_plugin(plug)
      @activated[plug.name] = plug.default_activated
      @plugins << plug
    end

    def activated?(plug_name)
      @activated[plug_name]
    end

    def activate(plug_name)
      @activated[plug_name] = true
    end

    def deactivate(plug_name)
      @activated[plug_name] = false
    end

    def activated_plugins
      @plugins.find_all do |plugin|
        @activated[plugin.name]
      end
    end

    # Set up context default settings
    # set up ui settings from context
    #
    # < User gets involved >
    #
    def build_example_ui
      ui_class = UIConfig.build_subclass("Example UI")

      handler = ContextHandler.new
      handler.context_class = Configurable.build_subclass("dummy context")
      handler.ui_class = ui_class
      handler.plugins = @plugins

      handler.backfill_options_to_context
      handler.apply_to_ui

      handler.ui_class
    end

    def build_ui_class(context_class)
      ui_class = UIConfig.build_subclass("User Interface")

      handler = ContextHandler.new
      handler.context_class = context_class
      handler.ui_class = ui_class
      handler.plugins = activated_plugins

      handler.apply_simple_defaults
      handler.apply_to_ui

      handler.ui_class
    end

    def apply_user_input(ui, context_class)
      applier = UIApplier.new
      applier.plugins = activated_plugins
      applier.ui = ui
      applier.context = context_class.new
      applier.apply

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

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