Sha256: e82ab719ce533695e8c1df41a60b3e2eec8d80a58a1c8f66bf4c308e1018e81f

Contents?: true

Size: 1.06 KB

Versions: 6

Compression:

Stored size: 1.06 KB

Contents

module Ownlan
  class Application

    attr_reader :raw_options, :config_options, :config

    def initialize(options)
      @raw_options = options

      @config = ::Ownlan.config.dup

      @config_options = raw_options.reject{ |k, v| k.to_s.match('_given') || !v }

      set_options
    end

    def call
      action = config.modes.find do |type, modes|
        modes.find { |mode| process(type, mode) }
      end

      show_menu unless action
    end

    private

    def show_menu
      Trollop.educate
    rescue ArgumentError
      raise ::Ownlan::MissingArgumentError, 'Missing or Invalid parameter.'
    end

    def set_options
      config_options.each { |k, v| config.send("#{k}=", v) }
    end

    def process(type, mode)
      return unless good_args?(type, mode)
      "Ownlan::#{type.capitalize}::#{mode.capitalize}".constantize.new(config).process
    rescue ::NoMethodError
      show_menu
    end

    def good_args?(type, mode)
      raw_options[type] == mode.to_s || config_options.keys.to_set.intersect?(config.manual_sub_modes.to_set)
    end

  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
ownlan-0.4.6 lib/ownlan/application.rb
ownlan-0.4.4 lib/ownlan/application.rb
ownlan-0.4.3 lib/ownlan/application.rb
ownlan-0.4.2 lib/ownlan/application.rb
ownlan-0.4.1 lib/ownlan/application.rb
ownlan-0.4.0 lib/ownlan/application.rb