module Terjira::OptionSupportable

For support CLI options.

Constants

OPTION_TO_SELECTOR

Public Class Methods

included(klass) click to toggle source
# File lib/terjira/option_supportable.rb, line 8
def self.included(klass)
  klass.class_eval do
    extend SharedOptions
    include OptionSelector
  end
end

Public Instance Methods

resource_store() click to toggle source
# File lib/terjira/option_supportable.rb, line 102
def resource_store
  ResourceStore.instance
end
suggest_options(opts = {}) click to toggle source

Transforming and cleaning options and suggest list of option values

# File lib/terjira/option_supportable.rb, line 33
def suggest_options(opts = {})
  origin = options.dup
  self.with_editor = origin.delete(:editor)

  if opts[:required].is_a? Array
    opts[:required].inject(origin) do |memo, opt|
      memo[opt] ||= opt.to_s
      memo
    end
  end

  # Store assigned options
  origin.reject { |k, v| k.to_s.casecmp(v.to_s).zero? }.each do |k, v|
    resource_store.set(k.to_sym, v)
  end

  # Store given options from arguments
  (opts[:resources] || {}).each do |k, v|
    resource_store.set(k.to_sym, v)
  end

  # Select options that are not assigned value from user
  default_value_options = origin.select do |k, v|
    k.to_s.casecmp(v.to_s).zero?
  end

  # Sort order for suggest option values
  default_value_options = default_value_options.sort do |hash|
    OPTION_TO_SELECTOR.keys.index(hash[0].to_sym) || 999
  end
  default_value_options = Hash[default_value_options]

  # Suggest option values and save to resource store
  default_value_options.each_key do |k, _v|
    selector_method = OPTION_TO_SELECTOR[k.to_sym]
    send(selector_method) if selector_method
  end

  # Fetch selected values from resource store
  default_value_options.each_key do |k, _v|
    default_value_options[k] = resource_store.get(k)
  end

  origin.merge! default_value_options
end