Sha256: 110b1ffb86dcca22bc6bee5f4d5a1b181edb22eb2a519666949eadc867a2d1a8

Contents?: true

Size: 1.31 KB

Versions: 1

Compression:

Stored size: 1.31 KB

Contents

require 'rprogram/extensions/meta'
require 'rprogram/compat'

module RProgram
  module Nameable
    def self.included(base)
      base.metaclass_eval do
        def program_name
          @program_name
        end

        def program_name=(name)
          @program_name = name.to_s
        end

        def program_aliases
          @program_aliases ||= []
        end

        def program_aliases=(aliases)
          @program_aliases = aliases.to_a.map { |name| name.to_s }
        end

        def find_program
          names = self.program_aliases
          names.unshift(self.program_name) if self.program_name

          return Compat.find_program_by_names(*names)
        end
      end
    end

    #
    # Returns the program name of a class.
    #
    def program_name
      self.class.program_name
    end

    #
    # Returns the program aliases.
    #
    def program_aliases
      self.class.program_aliases
    end

    protected

    #
    # Sets the program name for a class to the specified _name_.
    #
    #   name_program 'ls'
    #
    def Object.name_program(name)
      self.program_name = name
    end

    #
    # Sets the program aliases for a class to the specified _aliases_.
    #
    #   name_program 'vim', 'vi'
    #
    def Object.alias_program(*aliases)
      self.program_aliases = aliases
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rprogram-0.0.9 lib/rprogram/nameable.rb