红宝石 – 从Sinatra内调用Sinatra

前端之家收集整理的这篇文章主要介绍了红宝石 – 从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.

猜你在找的Ruby相关文章