Ruby Sinatra中的辅助函数
我用Sinatra监视服务器。我需要阅读主文件夹中的文件夹列表,以及每个文件夹中meta.xml的内容。这是所需的输出:Ruby Sinatra中的辅助函数,ruby,sinatra,Ruby,Sinatra,我用Sinatra监视服务器。我需要阅读主文件夹中的文件夹列表,以及每个文件夹中meta.xml的内容。这是所需的输出: <folders> <folder 1> <meta.xml content> <folder 2> <meta.xml content> <\folders> 我对Sinatra打印get块中所有变量的值感到困惑。如果我想编写一个子函数getxml来生成
<folders>
<folder 1>
<meta.xml content>
<folder 2>
<meta.xml content>
<\folders>
我对Sinatra打印get块中所有变量的值感到困惑。如果我想编写一个子函数getxml来生成xml,我应该把它放在哪里?该函数:
现在,我假设您希望输出为XML,这样路由就不起作用了,您将得到最后一个表达式的求值,它当前是Dir.entries(meeting_Dir)
设置一个,然后使用我们将准备好输出值列表:
#views/contents.haml
<folders>
= list_of(@metas) do |meta|
= "<#{meta.name}>"
= meta.content
= "</#{meta.name}>"
<\folders>
也看看和。这应该会给你带来一些事情
require 'sinatra'
require 'json'
require 'haml'
helpers do
def get_xml( *args )
# your code here…
end
end
get '/processed' do
# getxml is available here
status 200
meeting_dir="/home/default"
Dir.entries(meeting_dir)
end
#views/contents.haml
<folders>
= list_of(@metas) do |meta|
= "<#{meta.name}>"
= meta.content
= "</#{meta.name}>"
<\folders>
helpers do
def get_xml( meeting_dir )
dirs = Dir.entries(meeting_dir).reject{|e| e.start_with? "." }
meta = Struct.new(:name, :content)
dirs.each_with_object([]) do |d,metas|
meta.name = d # it's up to you whether you
# want the absolute or relative path here
meta.content = File.read File.expand_path(File.join d, "meta.xml")
metas << meta
end
# the return value of each_with_object
# is the object, so no need for a return expression
end
end
get '/processed', :provides => :xml do
# status 200 <- this is not needed
meeting_dir="/home/default"
@metas = get_xml(meeting_dir)
haml :contents, :layout => false
end