Sha256: 04b4b60f7b2c9273e6f2f3d57567aa04429dcd95108bfd5566e9ef4addfadf8f

Contents?: true

Size: 1.43 KB

Versions: 5

Compression:

Stored size: 1.43 KB

Contents

module Diecut
  class UIApplier
    attr_accessor :plugins, :ui, :context

    # setup default values on ui
    # setup dynamic defaults on context
    # copy ui settings to context
    # resolve context config
    # confirm required
    def apply
      check_ui
      basic_defaults
      dynamic_defaults
      copy_to_context
      resolve_context
      confirm_required
    end

    def check_ui
      ui.check_required
    end

    def basic_defaults
      context.setup_defaults
    end

    def dynamic_defaults
      plugins.each do |plugin|
        plugin.context_defaults.each do |default|
          apply_dynamic_default(default)
        end
      end
    end

    def copy_to_context
      plugins.each do |plugin|
        plugin.options.each do |option|
          copy_option(option)
        end
      end
    end

    def resolve_context
      plugins.each do |plugin|
        unless plugin.resolve_block.nil?
          plugin.apply_resolve(ui, context)
        end
      end
    end

    def confirm_required
      context.check_required
    end

    def apply_dynamic_default(default)
      return if default.simple?

      segment = context.walk_path(default.context_path).last

      segment.value = default.compute_value(context)
    end

    def copy_option(option)
      return unless option.has_context_path?

      segment = context.walk_path(option.context_path).last

      segment.value = ui.get_value(option.name.to_sym)
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
diecut-0.0.5 lib/diecut/ui-applier.rb
diecut-0.0.4 lib/diecut/ui-applier.rb
diecut-0.0.3 lib/diecut/ui-applier.rb
diecut-0.0.2 lib/diecut/ui-applier.rb
diecut-0.0.1 lib/diecut/ui-applier.rb