module ReeRoutes::DSL::ClassMethods
def default_warden_scope(method_name)
def default_warden_scope(method_name) @default_warden_scope = method_name end
def define_route(request_method, path, &proc)
def define_route(request_method, path, &proc) raise ArgumentError.new("routes should be called") if !@dsl raise ArgumentError.new("block is required") if !block_given? @routes ||= [] builder = ReeRoutes::RouteBuilder.new builder.instance_exec(&proc) if @default_warden_scope && !builder.get_route.warden_scope builder.warden_scope(@default_warden_scope) end uri = URI.parse(path) rescue nil if uri.nil? || uri.path != path raise ArgumentError.new("invalid path provided #{path}") end if uri.query && !uri.query.empty? raise ArgumentError.new("route path should not include query params: #{path}") end builder.get_route.path = path builder.get_route.request_method = request_method if !builder.get_route.valid? raise ArgumentError.new("action, summary and auth scope should be provided for #{builder.get_route.inspect}") end route = builder.get_route @dsl.link(route.action.name, from: route.action.package_name) if route.serializer @dsl.link(route.serializer.name, from: route.serializer.package_name) end @routes << route route end
def routes(name, &proc)
def routes(name, &proc) raise ArgumentError.new("block is required") if !block_given? @dsl = Ree::ObjectDsl.new( Ree.container.packages_facade, name, self, :object ) @dsl.singleton @dsl.factory(:build) @dsl.tags(["routes"]) instance_exec(&proc) klass = @dsl.object.klass klass.send(:include, FactoryMethod) Ree.container.compile(@dsl.package, name) end