Sha256: c0be91c60fdaeb49653b53b28d394c01913fd9a15e1bb54eed5a9725bef1e5aa

Contents?: true

Size: 1.78 KB

Versions: 3

Compression:

Stored size: 1.78 KB

Contents

module Pione
  module Option
    # OptionInterface provides basic methods for option modules. All option
    # modules should be extended by this.
    module OptionInterface
      # Make an array of definitions.
      #
      # @api private
      def self.extended(obj)
        obj.instance_variable_set(:@definitions, [])
        obj.instance_variable_set(:@default_table, {})
        obj.instance_variable_set(:@validators, [])
      end

      attr_reader :definitions
      attr_reader :default_table
      attr_reader :validators

      # Define default value of the option data set.
      #
      # @param name [Symbol]
      #   option data key
      # @param value [Object]
      #   option data value
      # @return [void]
      def default(name, value)
        @default_table[name] = value
      end

      # Define a new option for the command.
      #
      # @param args [Array]
      #   OptionParser arguments
      # @param b [Proc]
      #   option action
      # @return [void]
      def option(*args, &b)
        @definitions << [args, b]
      end

      # Remove the option.
      #
      # @param b [Proc]
      #   remove options that match proc's result
      # @return [void]
      def remove_option(&b)
        @definitions.select! do |definition|
          not(b.call(definition))
        end
      end

      # Install the option module.
      #
      # @param mod [Module]
      #   PIONE's option set modules
      # @return [void]
      def use(mod)
        @definitions += mod.definitions
        @default_table.merge!(mod.default_table)
        @validators += mod.validators
      end

      # Define validation of the option set.
      #
      # @param b [Proc]
      #   validation content
      # @return [void]
      def validate(&b)
        @validators << b
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
pione-0.2.0 lib/pione/option/option-interface.rb
pione-0.1.4 lib/pione/option/option-interface.rb
pione-0.1.3 lib/pione/option/option-interface.rb