0.0
No commit activity in last 3 years
No release in over 3 years
Altered views allows one to inherit views from pluged in engines and extend them by operating on the DOM model.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

>= 1.0.0

Runtime

~> 1.4
~> 3.0.0
 Project Readme

altered_views¶ ↑

Synopsis¶ ↑

Everybody is accustomed now to the power and flexibility inheritance gives you in OOP. But when it comes to view life is getting really complex! Let me give you an example.

You have a nice rails engine that provides you with authentication functionality you use throughout your applications. But the login page should really look slightly different in this app and that registration page should carry different logo, name and copyright. The only option you have is to copy those views into the app and redo them. That is it, from this point you’ve lost it, cause any bugs you fixed in the views inside the engine still live in the copied views.

This is where altered_views comes to help. It allows you to inherit the engine’s view and alter only the bits you need referring to them using css selectors.

You view in the engine could look like this:

app/views/user_session/new.html.erb [engine]

<h1 id="login-title">Login:</h1>
<div class="form-container">
<!-- Code to display login box, which I omit -->
</div>
<span class="legal">Some legal nonsence</span>

Now we will alter customizing only required parts. This view goes inside your application.

app/views/user_session/new.html.erb [application]

<%= inherit_view "parent:admin/cataloguer/categories/edit" do %>
  <%= content "#login-title" do %>
    Login into my company's account:
  <% end %>

  <%= append ".legal" do %>
    <p>Exta clause</p>
  <% end %>
<% end %>

Note that the template name in the helper call starts with parent this allow one to render next view hierarchy, e.g. access the view of egine from the application

altered_views support the following DOM modifiers:

  • content — replace the element’s content

  • before — place content before the node

  • after — place content after the node

  • append — content in appended in the end of the element

  • prepend — content in placed as the first child of the element before other content

If you need more complex operations you can refer directly to Nokogiri document by passing an argument to inherit_view clause:

<%= inherit_view "parent:admin/cataloguer/categories/edit" do |doc| %>
# doc is a nokogiri document
<% end %>

Installing¶ ↑

altered_views is available on gemcutter so all you have to do it

gem install altered_views

Then include it in your Gemfile

gem altered_views

Requirements¶ ↑

altered_views was written to extend Rails 3.0 functionality and uses nokogiri — a fast and powerful XML/HTML processing engine.

Known issues¶ ↑

This is the very first version of the gem and might contain bugs.

  • it assumes you are using layouts in your application. If your view contains the whole page — it will cause problems.

  • head section modification is not supported