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

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -