Parent

Main::Parameter

Constants

Types

Public Class Methods

class_for(type) click to toggle source
# File lib/main/parameter.rb, line 41
def class_for(type)
  sym = type.to_s.downcase.to_sym
  c = Types.detect{|t| t.sym == sym}
  raise ArgumentError, type.inspect unless c
  c
end
create(type, main, *a, &b) click to toggle source
# File lib/main/parameter.rb, line 48
def create(type, main, *a, &b)
  c = class_for(type)
  obj = c.allocate
  obj.type = c.sym
  obj.main = main
  obj.instance_eval{ initialize(*a, &b) }
  obj
end
inherited(other) click to toggle source
# File lib/main/parameter.rb, line 33
def inherited other
  Types << other
end
new(name, *names, &block) click to toggle source
# File lib/main/parameter.rb, line 79
def initialize(name, *names, &block)
  @names = Cast.list_of_string(name, *names)

  @names.map! do |name|
    if name =~ /^-+/
      name.gsub! /^-+/, ''
    end

    if name =~ /=.*$/
      argument( name =~ /=\s*\[.*$/ ? :optional : :required )
      name.gsub! /=.*$/, ''
    end

    name
  end
  @names = @names.sort_by{|name| name.size}.reverse
  @names[1..-1].each do |name|
    raise ArgumentError, "only one long name allowed (#{ @names.inspect })" if
      name.size > 1
  end

  DSL.evaluate(self, &block) if block
  sanity_check!
end
sym() click to toggle source
# File lib/main/parameter.rb, line 37
def sym
  @sym ||= name.split(/::/).last.downcase.to_sym
end
wrap_errors() click to toggle source
# File lib/main/parameter.rb, line 24
def wrap_errors
  begin
    yield
  rescue => e
    raise wrapped_error(e)
  end
end
wrapped_error(w) click to toggle source
# File lib/main/parameter.rb, line 17
def wrapped_error w
  e = Error.new "(#{ w.message } (#{ w.class }))"
  e.wrapped = w
  e.set_backtrace(w.backtrace || [])
  e
end

Public Instance Methods

add_handlers(e) click to toggle source
# File lib/main/parameter.rb, line 222
def add_handlers e
  esc = 
    class << e
      self
    end

  this = self

  ] before instead after ].each do |which|
    getter = "error_handler_#{ which }"
    query = "error_handler_#{ which }?"
    if send(query)
      handler = send getter 
      esc.module_eval do
        define_method(getter) do |main|
          main.instance_eval_block self, &handler
        end
      end
    end
  end
end
add_value(value) click to toggle source
# File lib/main/parameter.rb, line 121
def add_value value
  given true
  values << value
end
adding_handlers() click to toggle source
# File lib/main/parameter.rb, line 244
def adding_handlers
  begin
    yield
  rescue Exception => e
    add_handlers e
    raise
  end
end
apply_casting() click to toggle source
# File lib/main/parameter.rb, line 204
def apply_casting 
  if cast?
    op = cast.respond_to?('call') ? cast : Cast[cast]
    values.map! do |val|
      Parameter.wrap_errors{ op.call val }
    end
  end
end
argument_none?() click to toggle source
# File lib/main/parameter.rb, line 130
def argument_none?
  argument.nil?
end
argument_optional?() click to toggle source
# File lib/main/parameter.rb, line 138
def argument_optional?
  argument and
    argument.to_s.downcase.to_sym == :optional
end
argument_required?() click to toggle source
# File lib/main/parameter.rb, line 134
def argument_required?
  argument and 
    argument.to_s.downcase.to_sym == :required
end
check_arity() click to toggle source
# File lib/main/parameter.rb, line 170
    def check_arity 
      return true if not given? and optional?

      ex = values.size == 0 ? NotGiven : Arity

      (raise ex, "#{ typename })" if values.size.zero? and argument_required?) unless arity == -1

      if arity >= 0
        min = arity
        sign = ''
      else
        min = arity.abs - 1
        sign = '-'
      end

      arity = min

puts
p :values => values
p :arity => arity
p :argument_required => argument_required?
p :argument_none => argument_none?
puts
      if values.size < arity
        if argument_optional?
          raise ex, "#{ typename }) #{ values.size }/#{ sign }#{ arity }" if(values.size < arity and values.size > 0)
        elsif argument_required? or argument_none?
          raise ex, "#{ typename }) #{ values.size }/#{ sign }#{ arity }" if(values.size < arity)
        end
      end
    end
check_validation() click to toggle source
# File lib/main/parameter.rb, line 213
def check_validation 
  if validate?
    values.each do |value|
      validate[value] or 
        raise InValid, "invalid: #{ typename }=#{ value.inspect }"
    end
  end
end
default() click to toggle source
# File lib/main/parameter.rb, line 112
def default 
  defaults.first
end
name() click to toggle source
# File lib/main/parameter.rb, line 108
def name
  names.first
end
optional=(bool) click to toggle source
# File lib/main/parameter.rb, line 146
def optional= bool 
  self.required !bool
end
optional?() click to toggle source
# File lib/main/parameter.rb, line 143
def optional?
  not required?
end
sanity_check!() click to toggle source
# File lib/main/parameter.rb, line 104
def sanity_check!
  raise Arity, "#{ name } with arity -1 (zero or more args) cannot be required" if(arity == -1 and required?)
end
setup!() click to toggle source

def setup!

return false unless given?
adding_handlers do
  check_arity
  apply_casting
  check_validation
end
true

end

# File lib/main/parameter.rb, line 162
def setup!
  adding_handlers do
    check_arity
    apply_casting
    check_validation
  end
end
typename() click to toggle source
# File lib/main/parameter.rb, line 116
def typename
  prefix = '--' if type.to_s =~ /option/
  "#{ type }(#{ prefix }#{ name })"
end
value() click to toggle source
# File lib/main/parameter.rb, line 126
def value
  values.first
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.