Sha256: f9f971649f9f5cd5cab73797c1018bbb5a808b22141227dad169eae15093ba97

Contents?: true

Size: 912 Bytes

Versions: 1

Compression:

Stored size: 912 Bytes

Contents

require 'delegate'

module Interactive
  class Options < SimpleDelegator
    include Interactive
    attr_accessor :options

    def initialize(options)
      flatten_ranges(options)
      wrap_each_option
      super(@options)
    end

    def shortcuts_string
      "[#{first_chars_without_last_slash(first_chars)}]"
    end

    def shortcuts_meanings
      options.inject("") { |accum, opt| "#{accum}  #{opt.shortcut_value} -- #{opt}\n"}
    end

    private

    def flatten_ranges(options)
      @options = options.inject([]) {|accum, opt| opt.respond_to?(:to_a) ? accum | opt.to_a : accum << opt}
    end

    def wrap_each_option
      @options.map! {|option| Option(option) }
    end

    def first_chars
      options.inject("") { |accum, opt| "#{accum}#{ opt.shortcut_value}/" }
    end

    def first_chars_without_last_slash(first_chars)
      first_chars[0..first_chars.length-2]
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
interactive-0.1.0 lib/interactive/options.rb