= MasterView - Rails-optimized (x)html friendly template engine MasterView is a ruby/rails optimized HTML/XHTML friendly template engine. It is designed to use the full power and productivity of rails including layouts, partials, and rails html helpers while still being editable/styleable in a WYSIWYG HTML editor. MasterView is distributed as a gem or a plugin. You may install it as a gem and then generate a lightweight plugin which mainly refers to the gem *or* you can simply install as a plugin which is self contained. I personally prefer installing as a gem for ease of management, however if you are running at a shared hosting environment you might not have authority to install this gem so you may install as a self contained plugin. If you are interested in the background story behind all this, it is at the end of this page. Author:: Jeff Barczewski Email:: jeff.barczewski @ gmail.com Rubyforge project:: masterview Website:: http://masterview.org License:: MIT open source license like Rails == Goals - Create/extend a template engine for rails that would be XHTML friendly and thus could be edited/styled with a WYSIWYG HTML editor even late in development without breaking template. - Keep it simple. DRY. No extra config files, simple syntax with ruby flavor. - Design it specifically for ruby and rails. Use the full power and not be limited in its capabilities over what can be done with ERb - Work nicely with layouts, partials, and rails html helpers. - Reduce complexity, work with existing rails code, no extra view logic or hashes than what is used by ERb. Scaffold generate initial templates or work from existing html prototype. - Use one master file to drive all related sections, simplifying editing. - Preview in browser without running an app. Allow for dummy data in the template so that the page can be viewed and styled independently of the application. - Performance equal to ERb == Prerequisites Requires:: No external dependencies Optional:: tidy (gem) and tidy library - if these are installed you can use tidy to cleanup html into valid xhtml for use by MasterView log4r (gem) - if this gem is installed then MasterView will use it for logging otherwise it defaults to using built in Logger. == Installation Install in one of the two following ways depending on whether you can use gems or not. === Installation using gems (if you are able to use gems) If you can use gems you may simply do the following gem install masterview_gem_pack Now your gem is installed and you can skip these steps in the future. After creating your rails directory, change directory to it and run the following to create a very lightweight plugin instance for this application mainly consisting of an init.rb file which will get loaded at runtime. This init.rb refers to the gem for everything but allows you to override any constants or setup that has been provided. See MasterView module masterview.rb for a list of the available constants. script/generate masterview_plugin After this MasterView is ready for use. Skip down to the Usage section for more details. === Installation without using gems, install as plugin script/plugin install svn://rubyforge.org/var/svn/masterview This will copy entire MasterView system into your vendor/plugin/masterview directory. You may tweak its init.rb to override any MasterView constants at runtime. See MasterView module masterview.rb for a list of available constants. Note that if you don't have svn (subversion) installed, you may also retrieve the plugin package (masterview_plugin.tgz or masterview_plugin.zip) from http://rubyforge.org/projects/masterview and simply extract into vendor/plugins/masterview == Usage You may add MasterView attributes to existing (x)html or you may use the masterview generator to create a complete working application. The generator can create controllers, models, and the MasterView template file similar to how the built-in generator works. Simply change directory to your rails application and run the following script/generate masterview YourModelName [YourControllerName] Once it is done generating, the generated MasterView template file will be created in app/views/masterview/YourModelName.html. This file is html and can be edited with any standard html editor. The rails specific logic is contained in simple attributes which are ignored by html editors. The syntax for these attributes is heavily derived from the rails helper tags themselves so it should feel natural to the rails developer. Another interesting thing to know is that while all of the pages for this Model have been bundled up into one html file for ease of editing, at runtime this template gets rendered into the exact same layouts and partials that you would use if you were building from scratch. Its jsut that now you can see what your pages will render like in your wysiwyg html editor and change and layout accordingly. Additionally MasterView supplies some javascript to show only one action view at time (list, new, show, edit, delete) so you can view in your browser without running in Rails. Dummy html can be included to improve the accuracy of the page which can be easily removed at runtime. MasterView is designed to be easy for a developer and designer to work together. By keeping the template in an html friendly format, designers can apply style, layout changes, wording changes, without causing havoc on the rails view code. The designer can be involved at anytime during the development cycle including being able to change style and layout after the system is built. This is great for allowing design or wording changes without reinvolving the developers. One can even start from a designer created prototype and add MasterView tags to make it become real. Whichever way you prefer to work, MasterView accomodates you. == MasterView attribute directive syntax These attribute directives are provided by MasterView and you can create your own custom attributes for even more power. mv:generate="layouts/product.rhtml" When the generate directive is encountered it creates a new output rhtml file where this element and its children will be rendered. It also will suspend outputting to any previous output file until it is done with this one (nested). MasterView will not output any rhtml files unless it encouters one of these or mv:gen_render directive below. Typically you will have one of these in the very top html element to generate the layout, and you will have additional directives further inside to output different view partials and forms. MasterView takes this one html file and generates all the other layout, forms, and partials that you would do manually. for example...
foo | bar |