Sha256: 6e796b67d6e4df305e612a1cc32e832d2ba7f4cdb482d04a17945c4d9d61998e

Contents?: true

Size: 971 Bytes

Versions: 1

Compression:

Stored size: 971 Bytes

Contents

module Aerogel::Routes
class Namespace

  def initialize( base, path, &block )
    @base = base
    @prefix_path = path
    instance_eval &block
  end

  def method_missing( method, *args, &block )
    @base.send method, *args, &block
  end

  def prefixed( method, *args, &block )
    options = Hash === args.last ? args.pop : {}
    routes = [*(args.pop || '')]
    routes, args = routes+args, [] unless method == :route
    routes.map!{|r| @prefix_path+r }
    routes = [routes] if method == :route
    p_args = []
    p_args += args unless args.empty?
    p_args += routes # unless routes.empty?
    p_args += options unless options.empty?
    @base.send method, *p_args, &block
  end

  def self.prefix( *methods )
    methods.each do |method|
      define_method(method) {|*args, &block| prefixed( method, *args, &block ) }
    end
  end

  prefix :get, :post, :put, :delete, :before, :after, :namespace, :route

end # class Namespace
end # module Aerogel::Routes

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
aerogel-core-1.3.0 lib/aerogel/core/routes/namespace.rb