class Boxomojo

Public Class Methods

new(*names) click to toggle source
# File lib/boxomojo.rb, line 61
    def new *names
      kv = if names.last.is_a?(Hash)
             h = names.pop
             h[:names] = names
             h
           else
             {:names=>names}
           end

      c = Class.new {
        include Boxomojo::Mod
        kv.each { |k, sym_or_arr|
          arr = [sym_or_arr].flatten

          case k
          when :names
            arr.each { |name|
              eval <<-EOF, nil, __FILE__, __LINE__+1
                def #{name} *args
                  if block_given?
                    new_box :#{name}, *args, &(Proc.new)
                  else
                    update :#{name}, args
                  end # === if
                end
              EOF
            }

          when :block
            arr.each { |name|
              eval <<-EOF, nil, __FILE__, __LINE__ + 1
                def #{name} *args, &blok
                  new_box :#{name}, *args, blok
                end
              EOF
            }

          when :collect
            arr.each { |name|
              eval <<-EOF, nil, __FILE__, __LINE__+1
                def #{name} *args
                  collect :#{name}, args
                end
              EOF
            }

          else
            fail ArgumentError, "Unknow type: #{k.inspect}"

          end # === case k
        }
      }
    end