2.2.0.txt

doc/release_notes/2.2.0.txt
Last Update: 2015-04-13 10:10:59 -0700

New Plugins

  • A shared_vars plugin has been added, for sharing variables between multiple Roda apps. Example:

    class API < Roda
      plugin :shared_vars
      route do |r|
        user = shared[:user]
        # ...
      end
    end
    
    class App < Roda
      plugin :shared_vars
    
      route do |r|
        r.on :user_id do |user_id|
          shared[:user] = User[user_id]
          r.run API
        end
      end
    end

    If you pass a hash to shared, it will update the shared variables with the content of the hash:

    route do |r|
      r.on :user_id do |user_id|
        shared(:user => User[user_id])
        r.run API
      end
    end

    You can also pass a block to shared, which will set the shared variables only for the given block, restoring the previous shared variables afterward:

    route do |r|
      r.on :user_id do |user_id|
        shared(:user => User[user_id]) do
          r.run API
        end
      end
    end
  • The partials method added by the padrino_render plugin has been extracted into a partials plugin, for users who want to use the partials method without having render use a layout by default.

Other New Features

  • The render plugin when using the :escape option now additionally supports an :escape_safe_classes option, which accepts a class or array of classes that should not be automatically escaped when using <%= %> tags. This makes easier to integrate with helpers or external libraries that return already html escaped strings, without using <%== %> tags.

    For complete control, an :escaper option is also supported, which will be used for escaping <%= %> strings. The value of this option should be an object that responds to escape_xml with a single argument and returns an output string.

  • A Roda#delay method has been added to the chunked plugin, which delays execution of the given block until right before the content template is rendered. This allows you to continue to use the routing tree to DRY up your code even when streaming template rendering. Example:

    r.on 'albums/:d' do |album_id|
      delay do
        @album = Album[album_id]
      end
      r.get 'info' do
        chunked(:info)
      end
      r.get 'tracks' do
        chunked(:tracks)
      end
    end
  • The path plugin now supports a :by_name option, which makes lookup of the class be by name as opposed to by reference. This is designed for use in development when doing code reloading.

  • Roda.path_block has been added to the path plugin for returning the block associated with the given class.

Other Improvements

  • The default_headers plugin now defaults to the same headers that Roda uses by default (just the Content-Type header with text/html value). Previously, it did not set a Content-Type header if you didn't specify one.

  • In the path plugin, Roda#path now works correctly in subclasses.