ruby - How do I write Slim helpers in Sinatra? -
i'm using sinatra , slim. i'm trying work out how write helper slim can dry-up templates. (in case helper small , away in-line ruby, in future more complex things).
i have following helper (expanded debugging) in file lib/slim_helpers.rb:
module slimhelpers # foo converts strings 'aws::autoscaling::autoscalinggroup' # 'auto scaling group' def foo(input, &block) last = input.split('::')[-1] result = last.gsub(/([a-z])/, ' \1').lstrip puts "result: #{result}" yield result end end
i have following (simplified) sinatra app:
require 'sinatra/base' require 'slim' require_relative 'lib/slim_helpers.rb' class sinatraapp < sinatra::base include slimhelpers '/' puts '==> in /' @result = bar.bar('dev') slim :qux end end
in template, have following piece of code:
- result.resources.each |r| div class="list-group" div class="list-group-item active" h5 class="list-group-item-heading" = foo r["resourcetype"]
however, i'm getting following error when render webpage:
localjumperror @ /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
so i'm wondering block here, , how pass input to, , return results from, foo
function?
you don’t need block @ all, return string , included @ point in template:
def foo(input) last = input.split('::')[-1] result = last.gsub(/([a-z])/, ' \1') puts "result: #{result}" result # or 'return result' if prefer end
as aside, sinatra use helpers slimhelpers
rather include slimhelpers
(although helpers
implemented calling include
).
Comments
Post a Comment