Integration of some Rails-style view conventions into Webmachine. Uses your resource as a view context.
Add this line to your application's Gemfile:
And then execute:
Or install it yourself as:
$ gem install webmachine-actionview
Webmachine::ActionView::Resource in resources you want to use ActionView. Somewhere in your app's
startup, you'll need to tell it where views live and (optionally) what handlers you're supporting, for example:
Webmachine::ActionView.configure do |config| config.view_paths = [MY_VIEWS_PATH] config.handlers = [:erb, :haml, :builder] end
In your resource, you'll need to render the view at some point. Rendering is broadly similar to that in Rails. The simplest thing you can do is this:
class HomeResource < Webmachine::Resource include Webmachine::ActionView::Resource def to_html render end end
This will look for a template called "home" in your
Webmachine::ActionView.configuration.view_paths. By default, this
will look for an application layout of
You can be more specific:
render template: 'other_template', layout: 'mini'
You can suppress a layout:
render layout: nil # or render layout: false
Your resource itself is used as the view context. This means that you can use instance variables as you would in Rails. For example:
class CustomerResource < Webmachine::Resource include Webmachine::ActionView::Resource def resource_exists? @customer = Customer.find(some_id) end def to_html render end end
And in an associated
@customer will be available:
<p class="name"><%= @customer.name %></p>
You can also render partials from your views:
render partial: 'shared/my_partial'
Partials are subject to the same conventions as Rails, i.e. their filenames begin with an underscore, but no underscore
is required when making a call to
render partial: 'some_partial'.
This gem came about a lot quicker due to someone else already having fiddled with the internals of ActionView. The link I originally found is https://github.com/newhavenrb/conferences/wiki/Using-Rails-without-Rails, so I think that means thanks to @drogus - pretty sure those are his slides linked to from that page.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature)
- Commit your changes (
git commit -am 'Add some feature')
- Push to the branch (
git push origin my-new-feature)
- Create new Pull Request