红宝石 – 从Sinatra内调用Sinatra

我有一个基于Sinatra的REST服务应用程序,我想从一个路由中调用其中一个资源,从另一个路由中有效地组成一个资源.例如.
get '/someresource' do
  otherresource = get '/otherresource'
  # do something with otherresource,return a new resource
end

get '/otherresource' do
  # etc.
end

重定向将不起作用,因为我需要对第二个资源进行一些处理,并从中创建一个新的资源.显然我可以a)使用RestClient或其他一些客户端框架,或者b)结构化我的代码,所以其他资源的所有逻辑都是一个方法,只是调用它,但是,如果我可以只是重新使用我们的资源从Sinatra使用他们的DSL.

解决方法

我能够通过快速肮脏的机架请求并直接调用Sinatra(机架应用程序)应用程序来骇客.它不漂亮,但它的作品.请注意,将生成此资源的代码提取为辅助方法可能会更好,而不是像这样做.但是这是可能的,而且可能会比这更好,更干净的做法.
#!/usr/bin/env ruby
require 'rubygems'
require 'stringio'
require 'sinatra'

get '/someresource' do
  resource = self.call(
    'REQUEST_METHOD' => 'GET','PATH_INFO' => '/otherresource','rack.input' => StringIO.new
  )[2].join('')

  resource.upcase
end

get '/otherresource' do
  "test"
end

如果您想了解更多关于幕后发生的事情,我已经写了几篇关于Rack基本知识的文章.有What is Rack?Using Rack.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...