# If the current request matches pattern and conditions, fill params
# with keys and call the given block.
# Revert params afterwards.
#
# Returns pass block.
def process_route(pattern, keys, conditions)
@original_params ||= @params
route = @request.route
route = '/' if route.empty? and not settings.empty_path_info?
if match = pattern.match(route)
values = match.captures.to_a
params =
if keys.any?
keys.zip(values).inject({}) do |hash,(k,v)|
if k == 'splat'
(hash[k] ||= []) << v
else
hash[k] = v
end
hash
end
elsif values.any?
{'captures' => values}
else
{}
end
@params = @original_params.merge(params)
@block_params = values
catch(:pass) do
conditions.each { |cond|
throw :pass if instance_eval(&cond) == false }
yield
end
end
ensure
@params = @original_params
end
分享到:
相关推荐
Sinatra::Synchrony是 Sinatra的一个小扩展,它动态提升了Sinatra网络应用的并发性。由于EventMachine和EM-Synchrony的支持,当你有很多 传输和低速IO请求时(如向外部APIs发送的HTTP请求),它增加了你的应用每个...
Sinatra 扩展:XSendFile sinatra-xsendfile扩展提供了x_send_file帮助器方法来更快地发送文件注意:不再支持sinatra-xsendfile 。 考虑使用代替。 ##XSendFile 在; 在; 在。 ##安装如果您使用 ,只需将sinatra-...
Sinatra::TemplateMetrics 仪表 sinatra 模板渲染安装将此行添加到应用程序的 Gemfile 中: gem 'sinatra-template_metrics' 然后执行: $ bundle或者自己安装: $ gem install sinatra-metrics用法除了sinatra/base...
Bolderer Sinatra应用程序 这个基于Sinatra的应用程序由jacqueline-lam设计,是Flatiron学校软件工程课程的一个组合项目。 该应用程序为有抱负的巨石提供了机会来跟踪他们所攀爬的问题,并为他人的攀爬进度欢呼! ...
Sinatra是一个轻量级的Ruby框架,用于构建Web应用程序。它以其简洁的语法和灵活性而闻名,适合开发小型到中型的项目。在"TODO_Sinatra:简单的TODO清单"这个应用中,我们将探讨如何使用Sinatra来创建一个基本的待办...
用于启用跨域资源共享(CORS)的简单Sinatra扩展要查看有关跨域资源共享的更多信息,请参阅 使用捆绑器安装 gem "sinatra-cross_origin", "~> 0.3.1" 例子 要为所有路由启用跨源请求: require 'sinatra' require...
gem 'tilt-jbuilder' , require : 'sinatra/jbuilder' # ... gem 'endpoint_base' 终点 require "sinatra" require "endpoint_base" class SampleEndpoint < EndpointBase :: Sinatra :: Base # optional ...
2. **Hash#transform_keys** 和 **Hash#transform_values**:这两个方法允许开发者以更简洁的方式转换哈希键或值,提高了代码的可读性。 3. **String#prepend**:类似于String#append,这个方法可以在字符串的开头...
will_paginate will_paginate是一个分页库,与Ruby on Rails,Sinatra,Hanami :: View,Merb,DataMapper和Sequel集成。 安装:##用于Rails 3 +,Sinatra和Merb的Gemfile gem'will_paginate','〜> will_paginate ...
Sinatra 架构 为您的 Sinatra 应用程序定义架构以验证请求和响应。 将其转储为 JSON 模式以帮助生成客户端等等! 用法 注册Sinatra::Schema来定义资源,例如: class MyApi < Sinatra :: Base register ...
sinatra-respond_to 描述: 在Sinatra中提供对内置Web服务支持的response_to样式Rails块 功能/问题: 根据提供的内容处理内容类型的设置 自动可以调整XMLHttpRequests返回Javascript 根据HTTP_ACCEPT标头解析...
它是一个建立在 Sinatra 之上的简约框架。 ActiveRecord的强大功能为您提供了Sinatra应用程序的简单性。 还有各种小帮手。 立即部署您的 API 基于您的 ActiveRecord 模型,API 将非常简单地公开。 对于您想要公开...
`route-pattern`是一个专为前端设计的开源库,它提供了类似Sinatra或Rails风格的路由模式匹配功能,帮助开发者更方便地处理和组织应用程序的路由逻辑。在本文中,我们将深入探讨`route-pattern`库的工作原理、特性...
Sinatra ::街头霸王 域建模:: Street Fighter 欢迎使用我简化的Street Fighter模拟版本。 您可以选择一个角色,添加战斗动作以及史诗般的战斗开始的最后阶段!关于在我的《街头霸王》领域建模世界中,我旨在达到这个...
Sinatra资产管道 基于Sinatra资产管道实现。 sinatra-asset-pipeline支持即时编译资产以进行开发以及预编译资产以进行生产。 sinatra-asset-pipeline的设计目标是为将Sinatra应用程序与Sprockets集成提供良好的默认...
Split Based基于机架的A / B测试框架https://libraries.io/rubygems/split Split是基于机架的A / B测试框架,旨在与Rails,Sinatra或任何其他基于机架的应用程序一起使用。 Split是重载Split:chart_increasing:基于...
Angular-Sinatra 生成器 用于和生成器。 Sinatra 是一个基于 Ruby 的微框架。 有关 AngularJS 与其他微框架的集成,请参阅 。 安装 安装 、 和或 。 安装 gem。 开发模式也需要 。 安装约曼: npm install -g yo...
gem 'sinatra-bind' 然后执行: $ bundle 或者自己安装: $ gem install sinatra-bind 用法 您可以平滑地定义一条没有阻塞的路线。 class App < Sinatra :: Base register Sinatra :: Bind def index ...
主动动作 在Ruby中构建和使用服务对象的简单方法。 安装 将此行添加到您的应用程序的Gemfile中: gem 'ruby-active_action' , '~> 3.0.1' 或使用其他宝石: 然后执行: $ bundle install ActiveAction示例 ...
在Sinatra中使用Rails资产 这是一个最小的演示应用程序,展示了如何在 Sinatra 应用程序中使用 。 Rails Assets 将与基于的应用程序集成在一起。 一体化 文件 此应用程序使用将 Sinatra 与 Sprockets 集成的 ...