class Argument

Public Class Methods

new(argument={}) click to toggle source
# File lib/aml/Argument.rb, line 2
def initialize(argument={})
        @item = {}
        @item_key = {}
        argument.each do |argument|
                initialize_add(argument)
        end
end

Public Instance Methods

define(name,value,usage,required=false) click to toggle source
# File lib/aml/Argument.rb, line 26
def define(name,value,usage,required=false)
        regex = /\[(?<key>\w)\]/
        keys = []
        name = name.gsub(regex).each do |match|
                match = match.match(regex)[:key]
                keys << match
                match
        end
        @item[name.to_sym] = {
                :value => value,
                :usage => usage,
                :require => required
        }
        @item_key[keys.join.to_sym] = name.to_sym if keys.count > 0
end
get(name) click to toggle source
# File lib/aml/Argument.rb, line 47
def get(name)
        begin
                @item[_name(name)][:value].to_s
        rescue
        end
end
has_requirements?() click to toggle source
# File lib/aml/Argument.rb, line 67
def has_requirements?
        @item.select{|k,v| v[:require] == true and v[:value] == nil}.count == 0 ? true : false
end
items() click to toggle source
# File lib/aml/Argument.rb, line 53
def items
        @item
end
parse(argument) click to toggle source
# File lib/aml/Argument.rb, line 9
def parse(argument)
        arguments = argument.split('--')
        if arguments.count == 1
                arguments = []
                io = argument.split(' ')
                arguments << "build " + io[0] #input file
                if io.count == 2
                        arguments << "path " + File.dirname(io[1]) #output path
                        arguments << "name " + File.basename(io[1],'.*') #output name
                        arguments << "extension " + File.extname(io[1])[1..-1] if io[1].split('.').count > 1 #output extension
                end
        end
        arguments.each do |argument|
                string = argument.split(' ')
                set(string[0], string[1..string.count].join(' ').to_s) if argument.strip.length > 0
        end
end
set(name, value=nil) click to toggle source
# File lib/aml/Argument.rb, line 41
def set(name, value=nil)
        begin
                @item[_name(name)][:value] = value.to_s
        rescue
        end
end
show_help() click to toggle source
# File lib/aml/Argument.rb, line 59
def show_help
        pad = _pad(@item)
        @item.each do |name,data|
                value = data[:value].to_s
                value = nil.to_s if name == :help
                puts "--#{name.to_s.ljust(pad[:name]+1)}\t#{value.ljust(pad[:value]+1)}\t#{data[:usage].ljust(pad[:usage])}"
        end
end
show_help?() click to toggle source
# File lib/aml/Argument.rb, line 56
def show_help?
        @item.select{|k,v| k == :help and v[:value] != false}.count == 0 ? false : true
end
show_required() click to toggle source
# File lib/aml/Argument.rb, line 70
def show_required
        required = @item.select{|k,v| v[:require] == true and v[:value] == nil}
        if required.count == 1
                puts "Please define the --#{required.first.first} argument; #{required.first.last[:usage]}"
        else
                pad = _pad(required)
                required.each do |name,data|
                        value = data[:value].to_s
                        value = nil.to_s if name == :help
                        puts "--#{name.to_s.ljust(pad[:name]+1)}\t#{value.ljust(pad[:value]+1)}\t#{data[:usage].ljust(pad[:usage])}"
                end
        end
end

Private Instance Methods

_name(name) click to toggle source
# File lib/aml/Argument.rb, line 84
def _name(name)
        if @item.select{|k|k == name.to_sym}.count == 0
                name = @item_key[name.to_sym]
        else
                name = name.to_sym
        end
end
_pad(items) click to toggle source
# File lib/aml/Argument.rb, line 91
def _pad(items)
        pad = {:name=>0,:value=>0,:usage=>0}
        items.each do |name,data|
                pad[:name] = name.to_s.length if name.to_s.length > pad[:name]
                pad[:value] = data[:value].to_s.length if data[:value].to_s.length > pad[:value]
                pad[:usage] = data[:usage].to_s.length if data[:usage].to_s.length > pad[:usage]
        end
        pad
end