我如何在 Sinatra 中编写 Slim 助手?
How do I write Slim helpers in Sinatra?
我正在使用 Sinatra 和 Slim。我正在尝试找出如何为 Slim 编写一个帮助程序,以便我可以干燥我的模板。 (在这种情况下,helper 很小,我可以使用内联 Ruby,但将来我会做更复杂的事情)。
我在文件 lib/slim_helpers.rb:
中有以下助手(为调试而扩展)
module SlimHelpers
# foo converts strings like 'AWS::AutoScaling::AutoScalingGroup'
# to 'Auto Scaling Group'
def foo(input, &block)
last = input.split('::')[-1]
result = last.gsub(/([A-Z])/, ' ').lstrip
puts "result: #{result}"
yield result
end
end
我有以下(简化的)Sinatra 应用程序:
require 'sinatra/base'
require 'slim'
require_relative 'lib/slim_helpers.rb'
class SinatraApp < Sinatra::Base
include SlimHelpers
get '/' do
puts '==> in /'
@result = Bar.bar('dev')
slim :qux
end
end
在我的模板中,我有以下代码:
- result.resources.each do |r|
div class="list-group"
div class="list-group-item active"
h5 class="list-group-item-heading"
= foo r["ResourceType"]
但是,我在呈现网页时遇到以下错误:
LocalJumpError at /some/url
no block given (yield)
file: slim_helpers.rb location: foo line: 9
BACKTRACE
/Path/lib/slim_helpers.rb in foo
yield result
/Path/views/asg.slim in block (3 levels) in singleton class
= foo r["ResourceType"]
... etc
所以我想知道这里的块是什么,我将如何将输入传递给我的 foo
函数并从中得到 return 结果?
您根本不需要块,只需 return 字符串,它就会包含在您的模板中:
def foo(input)
last = input.split('::')[-1]
result = last.gsub(/([A-Z])/, ' ')
puts "result: #{result}"
result # or 'return result' if you prefer
end
顺便说一句,对于 Sinatra,您通常会使用 helpers SlimHelpers
rather than include SlimHelpers
(although helpers
is implemented by simply calling include
).
我正在使用 Sinatra 和 Slim。我正在尝试找出如何为 Slim 编写一个帮助程序,以便我可以干燥我的模板。 (在这种情况下,helper 很小,我可以使用内联 Ruby,但将来我会做更复杂的事情)。
我在文件 lib/slim_helpers.rb:
中有以下助手(为调试而扩展)module SlimHelpers
# foo converts strings like 'AWS::AutoScaling::AutoScalingGroup'
# to 'Auto Scaling Group'
def foo(input, &block)
last = input.split('::')[-1]
result = last.gsub(/([A-Z])/, ' ').lstrip
puts "result: #{result}"
yield result
end
end
我有以下(简化的)Sinatra 应用程序:
require 'sinatra/base'
require 'slim'
require_relative 'lib/slim_helpers.rb'
class SinatraApp < Sinatra::Base
include SlimHelpers
get '/' do
puts '==> in /'
@result = Bar.bar('dev')
slim :qux
end
end
在我的模板中,我有以下代码:
- result.resources.each do |r|
div class="list-group"
div class="list-group-item active"
h5 class="list-group-item-heading"
= foo r["ResourceType"]
但是,我在呈现网页时遇到以下错误:
LocalJumpError at /some/url
no block given (yield)
file: slim_helpers.rb location: foo line: 9
BACKTRACE
/Path/lib/slim_helpers.rb in foo
yield result
/Path/views/asg.slim in block (3 levels) in singleton class
= foo r["ResourceType"]
... etc
所以我想知道这里的块是什么,我将如何将输入传递给我的 foo
函数并从中得到 return 结果?
您根本不需要块,只需 return 字符串,它就会包含在您的模板中:
def foo(input)
last = input.split('::')[-1]
result = last.gsub(/([A-Z])/, ' ')
puts "result: #{result}"
result # or 'return result' if you prefer
end
顺便说一句,对于 Sinatra,您通常会使用 helpers SlimHelpers
rather than include SlimHelpers
(although helpers
is implemented by simply calling include
).