<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>Ruby on Rails Blog of Railshouse - Home</title>
  <id>tag:blog.railshouse.com,2010:mephisto/</id>
  <generator version="0.8.0" uri="http://mephistoblog.com">Mephisto Drax</generator>
  <link href="http://blog.railshouse.com/feed/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://blog.railshouse.com/" rel="alternate" type="text/html"/>
  <updated>2009-09-21T02:18:48Z</updated>
  <entry xml:base="http://blog.railshouse.com/">
    <author>
      <name>priyanka</name>
    </author>
    <id>tag:blog.railshouse.com,2009-09-21:26</id>
    <published>2009-09-21T01:53:00Z</published>
    <updated>2009-09-21T02:18:48Z</updated>
    <category term="bdd"/>
    <category term="rails"/>
    <category term="rspec"/>
    <category term="tdd"/>
    <category term="testing"/>
    <link href="http://blog.railshouse.com/2009/9/21/rspec-behaviour-driven-development-testing-framework" rel="alternate" type="text/html"/>
    <title>RSpec - Behaviour Driven Development testing framework</title>
<content type="html">
            &lt;p&gt;There are different type of testing like unit testing, integration testing, functional testing etc.. Lets we talk about unit testing by using different testing tools and framework.&lt;/p&gt;
&lt;p&gt;In ruby on rails there are two different way for testing.&lt;br /&gt;&lt;br /&gt;
1. Behaviour Driven Development (&lt;span class=&quot;caps&quot;&gt;BDD&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;
2. Test Driven Development (&lt;span class=&quot;caps&quot;&gt;TDD&lt;/span&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Behavior Driven Development (&lt;span class=&quot;caps&quot;&gt;BDD&lt;/span&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;BDD&lt;/span&gt; is about specifying the system behaviour by defining exectable specifications in the form of tests. It forces the developer to understand the behaviour of the method he is about to write. Using different tools, the specs written to test the application can be used as specifications.&lt;span class=&quot;caps&quot;&gt;BDD&lt;/span&gt; makes it easier for developers to read and understand the code, becoming an additional form of documentation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Test Driven Development (&lt;span class=&quot;caps&quot;&gt;TDD&lt;/span&gt;):&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;TDD&lt;/span&gt; is about defining test cases before writing any other code. By creating unit tests you specify the minimum acceptable behaviour for the code. In &lt;span class=&quot;caps&quot;&gt;TDD&lt;/span&gt;, we are usually writing one test per function, leading to many small tests. &lt;span class=&quot;caps&quot;&gt;TDD&lt;/span&gt; written to use a more English like vocabulary for expressing functionality.&lt;br /&gt;&lt;br /&gt;
Now, We move forward to Behaviour Driven Development. There are many tools avaliable to implement &lt;span class=&quot;caps&quot;&gt;BDD&lt;/span&gt; by using RSpec,Cucumber,Shoulda, etc..&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;
How to install RSpec and steps to implement RSpec.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
1. using gem&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; sudo gem install rspec&lt;br /&gt;&lt;br /&gt;
&amp;nbsp; or using plugin &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; script/plugin install git://github.com/dchelimsky/rspec.git&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; script/plugin install git://github.com/dchelimsky/rspec-rails.git&lt;br /&gt;&lt;br /&gt;
2. When you are doing testing use test database.&lt;br /&gt;
&lt;br /&gt;
3. Generate spec directory in root of application.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; script/generate rspec&lt;br /&gt;&lt;br /&gt;
4. After installing gem it&#8217;s provides facility to generate models and test them.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; script/generate rspec_scaffold post title:string body:text&lt;br /&gt;&lt;br /&gt;
5. Run the migration file.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; rake db:migrate RAILS_ENV=test&lt;br /&gt;&lt;br /&gt;
6. Now, write the test case in spec/models/post_spec.rb&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; #include the spec_helper available in spec folder of your rails application.&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; require File.expand_path(File.dirname(&lt;i&gt;&lt;span class=&quot;caps&quot;&gt;FILE&lt;/span&gt;&lt;/i&gt;) + &#8216;/../spec_helper&#8217;)&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; describe Post do&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; before(:each) do&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @post = Post.new(valid_post_hash)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; it &amp;quot;should be valid&amp;quot; do&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @post.should be_valid&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; it &amp;quot;should not be valid without a title&amp;quot; do&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @post.title = &#8216;&#8217;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @post.should_not be_valid&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; it &amp;quot;should not be valid without a body&amp;quot; do&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @post.body = &#8217;&#8217;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @post.should_not be_valid&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; def valid_post_hash&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {:title =&amp;gt; &#8216;test post&#8217;, :body =&amp;gt; &#8216;description for posted test&#8217;} #test data which you want to provide&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; end&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;&lt;br /&gt;
7. All specs have a behaviour_type which determines what helper methods are available to you as you build your specs. You will change the explicitly one line in post_spec.rb is:&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; describe Post, &amp;quot;a important information&amp;quot;, :behaviour_type =&amp;gt; :model do&lt;br /&gt;&lt;br /&gt;
8. In post model, we have to define the validation for not null and unique title for post.&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; class Post &amp;lt; ActiveRecord::Base&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; validates_presence_of :title, :body&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; validates_uniqueness_of :title&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;&lt;br /&gt;
9. You want to run the test case by giving command&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; rake spec&lt;br /&gt;
&amp;nbsp; &amp;nbsp; it run the test case and give the output either fail or pass.&lt;br /&gt;&lt;br /&gt;
=&amp;gt; &lt;strong&gt;Spork&lt;/strong&gt; is a tool used to preload your environment so you don&#8217;t have to load it each time you run your features or specs.&lt;br /&gt;&lt;br /&gt;
- source: &lt;a href=&quot;http://fr.ivolo.us/posts/rspec-tutorial-part-2-a-simple-test&quot;&gt;http://fr.ivolo.us/posts/rspec-tutorial-part-2-a-simple-test &lt;/a&gt;&lt;br /&gt;
&amp;nbsp;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.railshouse.com/">
    <author>
      <name>nidhi</name>
    </author>
    <id>tag:blog.railshouse.com,2009-09-04:25</id>
    <published>2009-09-04T00:42:00Z</published>
    <updated>2009-09-05T00:51:34Z</updated>
    <category term="2.3.4"/>
    <category term="on"/>
    <category term="rails"/>
    <category term="ruby"/>
    <link href="http://blog.railshouse.com/2009/9/4/ruby-on-rails-2-3-4-security-fixes" rel="alternate" type="text/html"/>
    <title>Ruby on Rails 2.3.4: Security Fixes</title>
<content type="html">
            &lt;p&gt;Ruby on Rails 2.3.4 released, this release fixes bugs and introduces a few minor features. Due to the inclusion of two security fixes, all users of the 2.3 series are recommended to upgrade as soon as possible.&lt;/p&gt;
&lt;h4&gt;Security Fixes&lt;/h4&gt;
&lt;p&gt;2.3.4 contains fixes for two security issues which were reported to us.   For more details see the security announcements:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;http://weblog.rubyonrails.org/2009/9/4/xss-vulnerability-in-ruby-on-rails&quot;&gt;&lt;span class=&quot;caps&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CVE&lt;/span&gt;&lt;/span&gt;-2009-3009 &amp;ndash; &lt;span class=&quot;caps&quot;&gt;&lt;span class=&quot;caps&quot;&gt;XSS&lt;/span&gt;&lt;/span&gt; vulnerability&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://weblog.rubyonrails.org/2009/9/4/timing-weakness-in-ruby-on-rails&quot;&gt;Timing Weakness in MessageVerifier and the Cookie Store&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Bug Fixes&lt;/h4&gt;
&lt;p&gt;Thanks to the success of the &lt;a href=&quot;http://weblog.rubyonrails.org/2009/7/28/rails-bugmash&quot;&gt;BugMash&lt;/a&gt; we have around 100 bug fixes as part of this release. Of particular note is the fix to reloading problems related to rack middleware and rails metals when running in development mode.&lt;/p&gt;
&lt;h4&gt;New Features&lt;/h4&gt;
&lt;ul&gt;
    &lt;li&gt;Support for bundling I18n translations in plugins, Rails will now automatically add locale files found in any engine&amp;rsquo;s locale directory to the I18n.load_path. &lt;a href=&quot;http://github.com/rails/rails/commit/49342d1745dd0e6c4ebebe9e535e374783ac2c10&quot;&gt;commit&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
    &lt;li&gt;Added db/seeds.rb as a default file for storing seed data for the database. Can be loaded with rake db:seed &lt;a href=&quot;http://github.com/rails/rails/commit/f3c7bbeedd81d2f379c5e6a9e8739d3b3784ca5f&quot;&gt;commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#8212; source&lt;/p&gt;
&lt;p&gt;http://weblog.rubyonrails.org/&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.railshouse.com/">
    <author>
      <name>priyanka</name>
    </author>
    <id>tag:blog.railshouse.com,2009-06-10:23</id>
    <published>2009-06-10T07:38:00Z</published>
    <updated>2009-06-10T07:40:14Z</updated>
    <link href="http://blog.railshouse.com/2009/6/10/browser-cms-developer-s-guide" rel="alternate" type="text/html"/>
    <title>Browser CMS Developer's Guide</title>
<content type="html">
            &lt;h2&gt;1. Introduction&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This guide covers how to use the tools that come with BrowserCMS to extend the functionality of your BrowserCMS site. The target audience for this guide is intermediate to advanced Rails developers. You should also read the &lt;a href=&quot;http://www.browsercms.org/doc/guides/html/user_guide.html&quot;&gt;Building a Site with BrowserCMS&lt;/a&gt; guide first as well, so you know how to create pages and put content on pages.  This guide will cover:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;p&gt;What content blocks and portlets are and how they work&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;How to create custom content blocks&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;How to create custom portlets&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;How to create friendly URLs for pages&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;2. Content Blocks&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Content Blocks are the basic unit used to add content to pages in a BrowserCMS site. There are several pre-built content types that are part of BrowserCMS core. The most commonly used one is the HtmlBlock content type, so we will use that as a starting example.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you look at the HtmlBlock model in BrowserCMS core, you will see that it is an ActiveRecord model, just like any model you create in a Rails application. It also calls the &lt;a href=&quot;http://www.browsercms.org/doc/app/classes/Cms/Acts/ContentBlock/MacroMethods.html&quot;&gt;acts_as_content_block&lt;/a&gt; method, which just sets up several &lt;a href=&quot;http://www.browsercms.org/doc/app/classes/Cms/Behaviors.html&quot;&gt;Behaviors&lt;/a&gt; on the model.  One of the key Behaviors to understand is the &lt;a href=&quot;http://www.browsercms.org/doc/app/classes/Cms/Behaviors/Rendering.html&quot;&gt;Rendering&lt;/a&gt; behavior. Essentially what this behavior does is to allow a model (by model I mean a subclass of ActiveRecord::Base) to act as a mini-controller. This is the same thing conceptually as &lt;a href=&quot;http://yehudakatz.com/2007/09/06/merbs-parts-are-pretty-rocking-too/&quot;&gt;Merb Parts&lt;/a&gt; or &lt;a href=&quot;http://cells.rubyforge.org/&quot;&gt;Rails Cells&lt;/a&gt;, the only difference is that content blocks are models as well, so they have attributes that are stored in the database like any other model.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In the BrowserCMS implementation, first the render method of the object is called, which is like an action. This is where instance variables are set. In the case of an HtmlBlock, there are no other instance variables to set up, so this step is just skipped. It is similar to a controller action that has no action method, it just goes straight to the view.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The view is the render template, which is inside the &lt;tt&gt;cms/html_blocks&lt;/tt&gt; directory in the view path.  If you look in the render template, you will see all it does is print the value of &lt;tt&gt;@content_block.content&lt;/tt&gt;.  Content is the name of the property that holds the &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; content.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;3. Creating A Custom Content Block&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Let&amp;rsquo;s say that you are using BrowserCMS to build a website that will display a list of products. The first step would be to create a product content block. This will give the users of the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; a way to create products. To create a product content block, in an existing BrowserCMS project, run the content block generator:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;&amp;lt;tt&amp;gt;script/generate content_block product name:string price:integer description:html&amp;lt;/tt&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;You will notice that several things have been created:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;p&gt;A model in &lt;tt&gt;app/models/product.rb&lt;/tt&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;A migration for the product model&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;A controller for the product in &lt;tt&gt;app/controllers/cms/products_controller.rb&lt;/tt&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;A form partial in &lt;tt&gt;app/views/cms/products/_form.html.erb&lt;/tt&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;A render template in &lt;tt&gt;app/views/cms/products/render.html.erb&lt;/tt&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;A resource route for the controller&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you look at &lt;tt&gt;app/models/product.rb&lt;/tt&gt;, you will see that it is nothing more than:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;&amp;lt;!-- Generator: GNU source-highlight 2.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite --&gt;&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span&gt;&lt;span&gt;class&lt;/span&gt;&lt;/span&gt; Product &lt;span&gt;&amp;lt;&lt;/span&gt; ActiveRecord&lt;span&gt;::&lt;/span&gt;Base&lt;br /&gt;  acts_as_content_block&lt;br /&gt;&lt;span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The controller created at &lt;tt&gt;app/controllers/cms/products_controller.rb&lt;/tt&gt; is equally empty:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;&amp;lt;!-- Generator: GNU source-highlight 2.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite --&gt;&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span&gt;&lt;span&gt;class&lt;/span&gt;&lt;/span&gt; Cms&lt;span&gt;::&lt;/span&gt;ProductsController &lt;span&gt;&amp;lt;&lt;/span&gt; Cms&lt;span&gt;::&lt;/span&gt;ContentBlockController&lt;br /&gt;&lt;span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This controller is the controller used in the actual &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; interface. If you want to create a controller to use in the front end of your application, create a products controller that is not in the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; namespace, so as not to conflict the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; functionality. You will most likely not need to customize the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; controller at all.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The form partial at &lt;tt&gt;app/views/cms/products/_form.html.erb&lt;/tt&gt; is the form that will be used when creating/editing the product content block in the content library of the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;. The contents of this file will be:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;&amp;lt;tt&amp;gt;&amp;amp;lt;%= f.cms_text_field :name %&amp;amp;gt;&amp;lt;br /&amp;gt;&amp;amp;lt;%= f.cms_text_field :price %&amp;amp;gt;&amp;lt;br /&amp;gt;&amp;amp;lt;%= f.cms_text_editor :description %&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The form helper methods that are prefixed with &lt;tt&gt;cms_&lt;/tt&gt; will wrap that form helper with the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; styling and extra functionality.  The &lt;tt&gt;cms_text_editor&lt;/tt&gt; will show the user a &lt;span class=&quot;caps&quot;&gt;WYSIWYG&lt;/span&gt; editor for editing &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt;.  Additional &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; form builder extensions are covered in the &lt;a href=&quot;http://www.browsercms.org/doc/guides/html/designer_guide.html&quot;&gt;BrowserCMS Designer Guide&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The render template at &lt;tt&gt;app/views/cms/products/render.html.erb&lt;/tt&gt; is the template that will be used to render the &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; when this product is placed directly on a page. It is also what is shown when you view a product within the content library of the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As you will see in the next section, custom content blocks are often not placed directly on a page, instead the data of a product is displayed through a portlet. For this reason, a more informational display, similar to what is automatically generated by the generator, is what the render template often contains. Depending on what your content block is, you may want to place the content block directly on a page, in which case you would most likely customize the render template.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;4. Creating A Custom Portlet&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Once you have created the product content block and created a few products in the content library, you need a way to display them on a page. To do that, you will want to create a portlet.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A portlet is used to display dynamic data on a page. A portlet is a content block. A portlet will typically perform some kind of database query in the render method and then render it&amp;rsquo;s view. One difference between a portlet and typical content block is that each instance of a portlet can have a unique template because that template is stored as data along with the portlet. Let&amp;rsquo;s generate a portlet to display the most recently created products:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;&amp;lt;tt&amp;gt;script/generate portlet recent_products limit:integer&amp;lt;/tt&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;What you will see created is:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;p&gt;A portlet at &lt;tt&gt;app/portlets/recent_products_portlet.rb&lt;/tt&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;A form partial at &lt;tt&gt;app/views/portlets/recent_products/_form.html.erb&lt;/tt&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;A render template at &lt;tt&gt;app/views/portlets/recent_products/render.html.erb&lt;/tt&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;What you don&amp;rsquo;t see created is a migration.  Portlets use the &lt;a href=&quot;http://www.browsercms.org/doc/app/classes/Cms/Behaviors/DynamicAttributes.html&quot;&gt;DynamicAttributes&lt;/a&gt; behavior in order to store associated values in the database without having to create custom database tables. What this means is that you can set and then store a value for any attribute for a portlet.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;So if you look at the form partial that was generate for this portlet, you will see this:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;&amp;lt;tt&amp;gt;&amp;amp;lt;%= f.cms_text_field :name %&amp;amp;gt;&amp;lt;br /&amp;gt;&amp;amp;lt;%= f.cms_text_field :limit %&amp;amp;gt;&amp;lt;br /&amp;gt;&amp;amp;lt;%= f.cms_text_area :template, :default_value =&amp;amp;gt; @block.class.default_template %&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Every portlet instance has to have a name and that is stored in the main &lt;tt&gt;portlets&lt;/tt&gt; table, but &lt;tt&gt;limit&lt;/tt&gt; is stored in the &lt;tt&gt;portlet_attributes&lt;/tt&gt; table.  You could add anything to this form, such as &lt;tt&gt;&amp;lt;%= f.cms_text_field :foobar %&amp;gt;&lt;/tt&gt;, and whatever the user enters for &lt;tt&gt;foobar&lt;/tt&gt; would get saved with the portlet.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you look at the code for the portlet, you will see:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;&amp;lt;!-- Generator: GNU source-highlight 2.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite --&gt;&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span&gt;&lt;span&gt;class&lt;/span&gt;&lt;/span&gt; RecentProducts &lt;span&gt;&amp;lt;&lt;/span&gt; Portlet&lt;br /&gt;&lt;br /&gt;  &lt;span&gt;&lt;span&gt;def&lt;/span&gt;&lt;/span&gt; render&lt;br /&gt;    &lt;span&gt;&lt;span&gt;# Your Code Goes Here&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;As the comment says, you will want to fill in your application logic here. We&amp;rsquo;re going to get the most recent products and use the value the user entered for limit when they filled out the form. So edit the code to look like:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;&amp;lt;!-- Generator: GNU source-highlight 2.9
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite --&gt;&lt;br /&gt;
&lt;pre&gt;&lt;tt&gt;&lt;span&gt;&lt;span&gt;class&lt;/span&gt;&lt;/span&gt; RecentProducts &lt;span&gt;&amp;lt;&lt;/span&gt; Portlet&lt;br /&gt;&lt;br /&gt;  &lt;span&gt;&lt;span&gt;def&lt;/span&gt;&lt;/span&gt; render&lt;br /&gt;    &lt;span&gt;@products&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; Product&lt;span&gt;.&lt;/span&gt;all&lt;span&gt;(:&lt;/span&gt;order &lt;span&gt;=&amp;gt;&lt;/span&gt; &lt;span&gt;&amp;quot;created_at desc&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;:&lt;/span&gt;limit &lt;span&gt;=&amp;gt;&lt;/span&gt; &lt;span&gt;&lt;span&gt;self&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;limit&lt;span&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;&lt;tt&gt;self&lt;/tt&gt; in this case is the portlet instance, which is also available in the instance variable &lt;tt&gt;&lt;code&gt;portlet&amp;lt;/tt&amp;gt;.  We are setting the &amp;lt;tt&amp;gt;&lt;/code&gt;products&lt;/tt&gt; instance variable so that will be available in the view.  If you look at the render template, you will see this:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;&amp;lt;tt&amp;gt;&amp;amp;lt;%=h @portlet.name %&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This is simply a place holder, you should override this code with something similar to what you expect the user of your portlet to want to use. In this case, let&amp;rsquo;s go with:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;&amp;lt;tt&amp;gt;&amp;amp;lt;ul&amp;amp;gt;&amp;lt;br /&amp;gt;  &amp;amp;lt;% @products.each do |product| %&amp;amp;gt;&amp;lt;br /&amp;gt;    &amp;amp;lt;li&amp;amp;gt;&amp;amp;lt;%=h product.name %&amp;amp;gt;&amp;amp;lt;/li&amp;amp;gt;&amp;lt;br /&amp;gt;  &amp;amp;lt;% end %&amp;amp;gt;&amp;lt;br /&amp;gt;&amp;amp;lt;/ul&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Notice that in the last paragraph I said &amp;quot;similar to what you expect the user of your portlet to want to use&amp;quot;. This value is simply the default starting point for the template of a portlet. The actual value is entered into the form when the user creates an instance of this portlet.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you look back at the form partial that was generated, you&amp;rsquo;ll see:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;listingblock&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
&lt;pre&gt;&amp;lt;tt&amp;gt;&amp;amp;lt;%= f.cms_text_area :template, :default_value =&amp;amp;gt; @block.class.default_template %&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;What this does is preload the template with whatever you entered into the render template. The user is free to change it as they see fit and even have different values from one portlet instance to the next.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://blog.railshouse.com/">
    <author>
      <name>priyanka</name>
    </author>
    <id>tag:blog.railshouse.com,2009-06-10:22</id>
    <published>2009-06-10T07:32:00Z</published>
    <updated>2009-06-10T07:36:08Z</updated>
    <link href="http://blog.railshouse.com/2009/6/10/browser-cms-basic-guide-for-users" rel="alternate" type="text/html"/>
    <title>Browser CMS Basic Guide for Users</title>
<content type="html">
            &lt;h2&gt;1. What to Expect&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This guide covers how to use BrowserCMS to build and manage websites. After reading it, you should understand how to:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;p&gt;Create new pages&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;Organize your site navigation via the sitemap.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;Place content on pages.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;Dynamically display content on pages using portlets.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;Create and assign permissions to users.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This guide is aimed at people who are managing sites using BrowserCMS, as opposed to programmers who want to &lt;a href=&quot;http://www.browsercms.org/doc/guides/html/developer_guide.html&quot;&gt;customize it&lt;/a&gt;, or designers who want to &lt;a href=&quot;http://www.browsercms.org/doc/guides/html/designer_guide.html&quot;&gt;create new designs&lt;/a&gt;  for a site.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;1.1. What not to expect&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This document assumes that users have a working copy of BrowserCMS to play with, either on their local machine, or on a demo site. We don&amp;rsquo;t cover how to install &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; here, so see the &lt;a href=&quot;http://www.browsercms.org/doc/guides/html/getting_started.html&quot;&gt;Getting Started&lt;/a&gt; Guide in order to get up and running.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;In addition, an installation of BrowserCMS will have several templates already installed. The &lt;em&gt;theme&lt;/em&gt; might be the default BrowserCMS theme, or a custom theme designed for a specific client. This document does not cover how to design and create new themes/templates, but focuses on the day to day work that content managers will need to do.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;2. Basic Concepts&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;There are several concepts which underly how BrowserCMS works. To be productive, users of BrowserCMS should ideally understand these ideas:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Pages&lt;/strong&gt; &#8211; Visitors experience your site primarily via pages. Pages are really compound documents, consisting of more than one editable area of content. The allows for intricate design, without needing to be edited via single giant &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; area.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Content Blocks&lt;/strong&gt; &#8211; Blocks are the most granular bits of content in a system. Pages usually have one or more blocks of content associated with them. Content blocks can be anything from a simple fragment of &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt;, to a News Article (which might have multiple data fields like name, body and summary), to portlets, which dynamically display other types of content.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Portlets&lt;/strong&gt; &#8211; Sometimes you don&amp;rsquo;t want to manually place all the content on your site. You want to set up some rules, so that when new content is entered, it appears in multiple places. Portlets are generally how that gets done. Portlets are really just a slightly special version of blocks, which generally query for other blocks, and then format them for display.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Sections&lt;/strong&gt; &#8211; Each page lives in a section. Sections the primary way pages are organized. Menus are usually dynamically constructed based off the hierarchy of sections and pages. Sections also handle security, where individual groups are allowed to see pages within a given section. Sections and pages can be reordered by using the Site Map tab.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Templates&lt;/strong&gt; &#8211; Each page has a template, which handles governs the styles and layout for that page. A template will determine what areas of the page are editable, how many columns it has and how the navigation will work. A website will usually have multiple templates (i.e. Home Page and Subpage) which provide different layout choices for users when they create new pages.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Users and Groups&lt;/strong&gt; &#8211; Security is handled via users and groups. A user might represent a &lt;em&gt;public&lt;/em&gt; user, who can access some sections of your website (like a &lt;em&gt;Members only section&lt;/em&gt;). Or they might be a &lt;em&gt;&lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;&lt;/em&gt; user who has the ability to make changes to the content via the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; editing tools. Each user can be part of multiple groups, which define what they can do, including editing pages, viewing content or publishing new pages.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;3. Common Tasks&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This section will cover some of the more frequent tasks that site managers will need to undertake in order to manage their website. For the purposes of this section, all examples assume a locally running copy of BrowserCMS, accessed as &lt;a href=&quot;http://localhost:3000/&quot;&gt;http://localhost:3000&lt;/a&gt;. A site hosted elsewhere might be running at &lt;a href=&quot;http://yourcms.yourcompany.com/&quot;&gt;http://yourcms.yourcompany.com&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;3.1. Logging into the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To access that administrative portions of a &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;, you have to go to the admin login page. To do this, add /cms to your website&amp;rsquo;s &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt;. Working locally, this would be &lt;a href=&quot;http://localhost:3000/&quot;&gt;http://localhost:3000&lt;/a&gt;. From this page, you can log in with your username and password. For a local site, this will be username = cmsadmin and password = cmsadmin. For a live site, this will have been randomly set during install.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After you log in, you will be sent to the dashboard (/cms/dashboard). The details of this page will be covered later, but the dashboard serves a summary of content in various workflow stages. From here, you can jump to other sections of &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;3.2. Editing the home page&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To understand how editing pages in the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; works, let&amp;rsquo;s jump over to the homepage. The quickest way to do that is to click on the BrowserCMS logo in the top left. This will always take you to the home page for your site. When you visit a page in BrowserCMS, and are logged in as editor, you will see the page exactly as a visiter would, with the addition of a toolbar at the top of the page. This toolbar gives you the tools/buttons necessary to make changes to pages, or jump to other &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; admin tabs.&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.2.1. In Context Editing&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;One of the key concepts to make page editing easier in BrowserCMS is called &lt;em&gt;In Context Editing&lt;/em&gt;. It allows you to browse the site as a visitor would, and then edit content directly on the page. By default, you can&amp;rsquo;t see the editable areas of a page (called &lt;em&gt;Containers&lt;/em&gt;), because the Visual Editor is turned off. To show the containers, click the &lt;em&gt;Turn On&lt;/em&gt; button on the right side of the toolbar, which turns on the visual editor. You should now see the containers highlighted on the page. The templates for each page determine what areas of the page are editable. Clicking the &lt;em&gt;Turn Off&lt;/em&gt; button will hide the containers again, giving you a more accurate view of what the finished page will look like.&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.2.2. Containers&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;A container is marked by a box with a grey header, with several buttons on it. Each container has two controls, one to Add new content to that container (The + icon) and another to place existing content into the container. It also has a status indicator which shows if any content blocks in that container are in draft mode. Each container can hold zero or more content blocks.&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.2.3. Blocks&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Each block within a container is marked with a grey border, and several buttons. Blocks can be edited, reordered using the up or down arrows, or removed from the page (which does not delete it).&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.2.4. Making changes&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To edit some existing content, pick the block you want to edit, and click the &lt;em&gt;wrench&lt;/em&gt; icon. This will take you to the edit screen for that block. Most content blocks placed on pages are usually &lt;em&gt;Text&lt;/em&gt; blocks, which are just pure html content, with a name for organization purposes. On the &lt;em&gt;Edit Text&lt;/em&gt; page, you can change the name, or use the &lt;span class=&quot;caps&quot;&gt;WYSIWYG&lt;/span&gt; editor to make changes to the content. If you want to edit the source html directly, you can change your editor preference with the toggle to the top right of the editor.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Once your edits are complete, you can save your changes using the Save button at the bottom of the page. This will return you to the page, where you can see how your changes look in context to the rest of your page. Your changes won&amp;rsquo;t be visible on the public site yet, so you can choose to make more changes. See the next section on how to publish changes.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;3.3. Publishing pages&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The basic rule of publishing is that all changes need to be published before they go live. This allows editors to always see how their page is going to look, before they decide to commit their changes. Any time you alter how a page looks, the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; stores a new version of that page and all its content. This happens when you add a new block to a page, make an edit or remove a block from that page. Each time a change is made to content on a page, that page will go into &lt;em&gt;Draft&lt;/em&gt; status. As an editor, you will see the &lt;em&gt;latest&lt;/em&gt; version of that page, but the public will continue to see the last &lt;em&gt;published&lt;/em&gt; version of that page.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Each page has a status of either &lt;em&gt;Published&lt;/em&gt; or &lt;em&gt;Draft&lt;/em&gt;. When you like how your changes look, and want to publish the page, push the &lt;em&gt;Publish&lt;/em&gt; button in the upper left hand corner of a page. This will makes your changes &lt;em&gt;live&lt;/em&gt; and visible to the world. When a page is published, each block on that page will also be published.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;3.4. Adding a new page&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To add new pages to a site, click on the Site Map tab from any where within the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; admin. The Site Map page shows a tree with all the sections and pages in your site. From here, you can add new pages or sections, choose a page to edit, or reorganize the site using drag and drop to move sections around.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To add a new page, click on the &lt;em&gt;My Site&lt;/em&gt; section at the top of the site map. Then click the &lt;em&gt;Add Page&lt;/em&gt; button in the toolbar. This will add a new page to the root of the site. There are several fields to fill out the important ones are the name and templates. When you name a page, the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; will generate a default relative &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; (a path) for it. You can also choose a template via a drop down, which will show all available templates for the current site.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After filling out those two fields, you can click save to create the new page. After saving, you will be taken to that page, which will be blank, not having content blocks selected for it.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;3.5. Adding new text content to a page&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When viewing a page, you can add new content to it. First, make sure the Visual Editor is turned on, so you can see the containers. Find the &lt;em&gt;Add Content&lt;/em&gt; icon (+) on the container you want to add the new content to. You will then be able to choose what kind of content you want to create. Text is the most frequently used content type, and is essentially just &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt;, including the ability to create links and include images.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Choosing Text will take you to the &lt;em&gt;Add New Text&lt;/em&gt; screen. The first field will prompt you for a &lt;em&gt;name&lt;/em&gt;. This &lt;em&gt;name&lt;/em&gt; is used to help identify your content later, when you are looking for it in the Content Library. Naming Text blocks after the page they are going on is a common choice. The second field is &lt;em&gt;content&lt;/em&gt;, which allows you to enter formatted text using a rich text (or &lt;span class=&quot;caps&quot;&gt;WYSIWYG&lt;/span&gt;) editor. The editor has buttons for common formating options, like making text bold, copy/pasting of text (including from Microsoft Word) and creating links to other pages.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;If you like, you can also change your text editor choice from &#8216;Rich Text&#8217; to &#8216;Simple Text&#8217;, which will allow you to edit the source &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; directly. This choice is saved as user preference, so next time you edit content, you will use the same editor you picked.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;3.6. Adding images and files to pages&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When creating content for pages, its a common task to add images or link to files (like PDFs) in the body of the text. There are two steps to adding an image or file to a page. First you need to upload the image/file to the content library. The second is to link to or place the image within a Text block. It is possible to directly place an image or file block into a container (via the &lt;em&gt;Add New Content&lt;/em&gt; option we talked about earlier) but this gives you less control over formating and placement.&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.6.1. Uploading files&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To add an image or file to the content library, click the &lt;em&gt;Content Library&lt;/em&gt; tab, and then click the &lt;em&gt;Image&lt;/em&gt; or &lt;em&gt;File&lt;/em&gt; menu items on the left hand side. (These content types are under the &lt;em&gt;Core&lt;/em&gt; module, so you may need to click &lt;em&gt;Core&lt;/em&gt; to show all the content types) Next click &lt;em&gt;Add New Content&lt;/em&gt; on the main menu. From here, you can fill in all the details on your image/file, including the file on your local hard drive that you want to upload. One of the choices about creating Image and Files is which section they should be stored in. It&amp;rsquo;s a good idea to create one or more image/file galleries to keep your files organized.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;After the file is uploaded, you can then place it on a page using a Text block.&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.6.2. Placing an image&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To place an image, first find the text block that you want to edit (or add). Using the &lt;em&gt;Rich Text&lt;/em&gt; editor, click the &lt;em&gt;Insert/Edit Image&lt;/em&gt; button. Next click &lt;em&gt;Browse Server&lt;/em&gt;, which will allow you to browse through all the images in your content library. This will popup a window which gives you a sitemap view of your site. You can drill down through the sections, finding which the one where you placed your image. Once you locate the image, click the image name to select it. This will add the path to the image to the &lt;em&gt;Image Properties&lt;/em&gt;, and allow you to preview the image alongside the text. You can alter the image attributes (size and alignment) or just click &lt;em&gt;Ok&lt;/em&gt; to place the image.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;At this point, the Rich Text editor should display the image embedded in the text. You can then save the Text block, and see how it looks on your page.&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.6.3. Placing a link to a file&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Placing a file is very similar to placing an image. Select the Text block to edit, and click the &lt;em&gt;Insert Link&lt;/em&gt; button. On the &lt;em&gt;Link&lt;/em&gt; popup window, click the &lt;em&gt;Browse Server&lt;/em&gt; button. Using the Site Map browser, choose the file you want to link to, and then select it. This will paste the path to the file into the &lt;em&gt;Link&lt;/em&gt; window. Click &lt;em&gt;Ok&lt;/em&gt; to add the link to the Text block.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;3.7. Finding a page to edit&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;BrowserCMS features two ways to locate pages to make changes to. The first one is just browsing around the site, using the same navigation that your site users would. The second is the by using the Sitemap.&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.7.1. Navigating to find pages&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When an editor is logged in, they can browse around the site using the same menus and links that a guest would. Each page will appear with a toolbar, which only editors see, which allows you to make changes to pages and their properties.&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.7.2. Using the Sitemap to find pages&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The Site Map allows editors to see a more conventional &lt;em&gt;file and folder&lt;/em&gt; metaphor to browse through the structure of the site. Clicking the &lt;em&gt;Sitemap&lt;/em&gt; tab will take editors to this view. Once on the sitemap, editors can expand/collapse sections by clicking on the +/- buttons. They can drill down into each section, to locate the page they want to make changes to. Once the page is located, either select the page and click &lt;em&gt;Edit Page&lt;/em&gt; on the toolbar, or just double click the page name. Both take users to the &lt;em&gt;Edit Page&lt;/em&gt; view, which allows them to modify the page content.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;3.8. Reverting a page&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Mistakes happen. Sometimes you make a change to a page, and you don&amp;rsquo;t like how it looks, or you just want to go back to last week&amp;rsquo;s version. To roll back a page to an earlier version, you must first edit that page (either by navigating to or by the sitemap). Select the &lt;em&gt;List Versions&lt;/em&gt; button from the toolbar. This will show the complete history of the page, along with who made changes, when the change occured, and note about what change happened in that version.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;To see what an older version looked like, select a version, and click &lt;em&gt;View&lt;/em&gt; on the toolbar. (Recommended Tip: Open the version in a new tab in your browser, by Ctrl-Click on PC, or Command-Clicking on Mac. This will let you compare several versions side by side.) If you like that version, you can revert to it in two ways.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;From the &lt;em&gt;List Versions&lt;/em&gt; page, you can revert by selecting the version, then clicking &lt;em&gt;Revert&lt;/em&gt;. If you are viewing an older version, you can revert by clicking the &lt;em&gt;Revert to This Version&lt;/em&gt;. In both cases, it will restore the page to what it looked like in that version, and will mark the page as &lt;em&gt;Draft&lt;/em&gt;. Once the editor has reviewed the changes, they can publish it.&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.8.1. Reverting Gotchas&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Reverting can be a bit tricky to understand. The basic challenge comes from the fact that both pages and block have their own versions, and blocks can be shared across pages. Consider the example of two pages, Page A and Page B, which both share a Text Block &lt;em&gt;C&lt;/em&gt;. Every change to &lt;em&gt;C&lt;/em&gt; will also create a new version of &lt;em&gt;A&lt;/em&gt; and &lt;em&gt;B&lt;/em&gt;. Reverting page &lt;em&gt;A&lt;/em&gt; will also likely revert page &lt;em&gt;B&lt;/em&gt;. Since reverting a page puts it into Draft, you now have two pages in draft mode. You need to publish both of them to make their changes live. This might be manageable for two pages, but imagine you had a Text called &lt;em&gt;footer&lt;/em&gt; which was shared across 20 pages.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;See &amp;lsquo;Bulk Publishing&amp;rsquo; below for details on how to publish multiple pages at once.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;3.9. Reorganize a site&amp;rsquo;s navigation&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;There are two ways that BrowserCMS supports navigation. The first is that navigation is manually added as &lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt; to templates. This is suitable for &lt;em&gt;Fixed Space&lt;/em&gt; navigation, which might need to be exactly 400 pixels wide and contain exactly 4 menu items, potentially using images for buttons. The second is using dynamic navigation, which can easily grow as the site architecture does. This is more suitable for sub-sections of the site. BrowserCMS allows editors to dynamically render menus based off pages in the sitemap.&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.9.1. Understanding how dynamic navigation works&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When developers create templates, they can set up menus so that they dynamically link to pages in the sitemap. Menus will show both pages and sections, and can show go one or more levels deep, which reflects how users are &lt;em&gt;drilling down&lt;/em&gt; into the site architecture. By default, when an editor adds a page or section to the sitemap, under a specific section, a link to that page will automatically be added to the dynamic navigation. For both pages and sections, you can have the option to &lt;em&gt;Hide from menus&lt;/em&gt;, which you can do by editing the properties of either pages or sections. Hiding a page from a menu means its still accessible to the public (if the user knows the &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt;), but just doesn&amp;rsquo;t appear in the menus.&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.9.2. Moving pages/sections in the sitemap&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When pages and sections are created, they are added last in their parent section. They can be reordered though from the Sitemap, by dragging and dropping. To move a page or section, click-hold and drag the page/section where you want it to be. This allows editors to both reorder pages within a specific menu, or move it to another area of the site entirely.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Dropping an item onto a page will place it &lt;em&gt;after&lt;/em&gt; that page. Dropping an item onto a section will put it in that section, as the last item. Be aware that moving pages will immediately make changes in how the dynamic site menus appear (there is no &lt;em&gt;publish&lt;/em&gt; step needed).&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;3.10. Setting up restricted sections&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;It&amp;rsquo;s a common task to want to restrict specific users from being able to see certain pages. This might include creating a &lt;em&gt;members&lt;/em&gt; section, where only registered and approved users can see the content. BrowserCMS allows editors/admins to restrict user access based on sections. Individual pages get their security from their immediate parent. For example, if there is a section called &lt;em&gt;Member Only&lt;/em&gt;, which a &lt;em&gt;Guest&lt;/em&gt; cannot see, all pages in that section will be block, and guests (unregistered users) that try to access those URLs will be sent to the &lt;em&gt;Access Denied&lt;/em&gt; page.&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.10.1. Creating the groups&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The first step to secure a section is to set up the groups who are allowed to see it. An administrator can create a new group by clicking the &lt;em&gt;Administration&lt;/em&gt; tab, then selecting the &lt;em&gt;Groups&lt;/em&gt; item from the left menu. Click the &lt;em&gt;Add Group&lt;/em&gt; button, give the group a name (&lt;em&gt;Members&lt;/em&gt;), and choose &lt;em&gt;Registered Public User&lt;/em&gt; as the group type. By default, this group will able to view all sections within the site. After saving the group, you can alter which sections a user can see, by clicking the name of the group. In this case, the new &lt;em&gt;Member&lt;/em&gt; group&amp;rsquo;s permissions are fine.&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.10.2. Adding users&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The next step is to create a user in the &lt;em&gt;Member&lt;/em&gt; group. On the &lt;em&gt;Administration&lt;/em&gt; tab, click the &lt;em&gt;Users&lt;/em&gt; menu item on the left menu, and click &lt;em&gt;Add User&lt;/em&gt; on the toolbar. Fill in the basic user information (name, username, email and password) and check the newly added &lt;em&gt;Members&lt;/em&gt; group (but no others)&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.10.3. Restricting the sections&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The next step is to add the new section, which will be restricted so that only users who are in the &lt;em&gt;Member&lt;/em&gt; group can see them. Go to the sitemap, select the &lt;em&gt;My Site&lt;/em&gt; (which is the root of the site) and click &lt;em&gt;Add Section&lt;/em&gt;. Name the section &lt;em&gt;Members Only&lt;/em&gt;, and then uncheck all public permissions except for &lt;em&gt;Member&lt;/em&gt;. Next add a page to this section and publish it.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Now, when users who aren&amp;rsquo;t logged in (Guests) try to visit any pages in the &lt;em&gt;Members Only&lt;/em&gt; section, they will be redirected to the Accessed Denied page.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;3.11. Setting up Workflow&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;When the number of contributors to a website grows, it may be necessary to restrict who has rights to publish content. This would allow for multiple editors to contribute and edit content, but content would be passed to one or more &amp;lsquo;publishers&amp;rsquo; in order to commit the changes publicly. Workflow in BrowserCMS has several concepts which make it work:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;p&gt;Rights &#8211; Who can edit and who can publish?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;Tasking &#8211; Who the work is assigned to?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;Notification &#8211; How do people know they have new content to look at.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This section covers how to create a simple workflow, that covers two kinds of groups of people.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;p&gt;Contributors: These people should be able to edit pages and content, but should not be able to publish them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
    &lt;p&gt;Publishers: These people should be able to edit pages/content, and can publish them.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h4&gt;3.11.1. Basic Contributor and Editor workflow&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The first step is to create two new groups, both of which should be of type &amp;lsquo;&lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; User&amp;rsquo;. One should be called &lt;em&gt;Contributor&lt;/em&gt;, and should only have the &amp;lsquo;Edit Content&amp;rsquo; permission. The second group should be called &amp;lsquo;Publisher&amp;rsquo;, and should have &amp;lsquo;Edit Content&amp;rsquo; and &amp;lsquo;Publish Content&amp;rsquo; permissions. Next create two users, and assign one of them to each group.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The user in the Contributor group, will be able to make changes to pages and blocks, but will not be able to publish it themselves. When they are done with a page, on the &lt;em&gt;Edit Page&lt;/em&gt; view, they can use the &lt;em&gt;Assign&lt;/em&gt; button to pass the page to somebody who has publishing rights. Assigning a page provides a drop down with all users who have &lt;em&gt;Edit Content&lt;/em&gt; permissions. The contributor can choose the assign to the &lt;em&gt;Publisher&lt;/em&gt;, give it a due date and a comment, and then assign the page. This will notify the &lt;em&gt;Publisher&lt;/em&gt; via email they have a new task assigned to them, along with the &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; to the page.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The &lt;em&gt;Publisher&lt;/em&gt; can then log in, find the page they want to review, make sure the changes are acceptable, then publish the page. Once they are down with their task, they can click the &lt;em&gt;Complete Task&lt;/em&gt; button to close the task out. In addition, editors and publishers can always find what open tasks they have by going to the &lt;em&gt;My Dashboard&lt;/em&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;3.12. Using My Dashboard&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The dashboard is the landing page for editors when they log in. It has two main areas, one shows all pages currently in draft. The other shows open tasks assigned to the current users.&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.12.1. Bulk publishing&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Some operations in the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; can put multiple pages into Draft mode as a side effect. This includes making an edit to a block which is shared across multiple pages, as well as reverting a page with shared blocks on it. The &lt;em&gt;Page Drafts&lt;/em&gt; panel shows all pages in the &lt;span class=&quot;caps&quot;&gt;CMS&lt;/span&gt; which are currently in draft mode. An editor can choose to review each page to make sure it looks right, by clicking on the name of the page. Or they can just select all pages they want to publish via the checkbox, and then click &amp;lsquo;Publish Selected&amp;rsquo;.&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.12.2. Tasks&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;All of the open tasks that are assigned to a user will appear on that user&amp;rsquo;s dashboard, in the &lt;em&gt;Tasks&lt;/em&gt; panel. Users can click on the name of the page to review it, and either complete the task, or assign it someone else.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;3.13. Adding dynamic content via portlets&lt;/h3&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;For most sites, the majority of the content will be placed directly on pages using Text blocks. Another alternative is to use portlets, which can dynamically select and render content. Portlets are usually part of individual modules, and are used to find and display content from that module. For example, the &lt;em&gt;News&lt;/em&gt; module comes with several portlets, designed to find News Articles by specific criteria. One portlet may display a single Article (using an id parameter in the &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt;), while another may show the headlines to all Articles, chronologically ordered.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Portlets are one of the primary extension points of BrowserCMS, which allows programmers to create new dynamic behavior and allow it to be placed on pages alongside static content. Each portlet will have several attributes which allow users to configure the portlet. These attributes might include a name, max # of results to display, and a template to allow users to change how the portlet displays. This section assumes the News Module has been installed, and walks through the placing and configuring of a portlet.&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.13.1. Placing and configuring portlet on a page&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Start by creating a new page. Select the &lt;em&gt;Add New Content&lt;/em&gt; icon in the container you would like to add the portlet to. On the &lt;em&gt;Select Content Screen&lt;/em&gt;, choose the &lt;em&gt;Portlet&lt;/em&gt; type. Then choose which type of portlet you would like to add (Choose the News Archive portlet). Give the portlet a name, leave the categories empty and use the default template.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;The News Archive portlet is designed to show a list of New Article blocks. So by default, there probably aren&amp;rsquo;t any News Articles in the database, so the Archive won&amp;rsquo;t be displaying anything. Let&amp;rsquo;s add some News, so we can see how it looks.&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;3.13.2. Adding content via the Content Library&lt;/h4&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Choose the content library tab, and open the &lt;em&gt;News&lt;/em&gt; module, by clicking the &lt;em&gt;News&lt;/em&gt; link on the left. The &lt;em&gt;News Article&lt;/em&gt; content type should be selected. Click the &lt;em&gt;Add New Content&lt;/em&gt; to create a News Article. On the form, fill in a suitable name, summary, set the release date to today and body, and then click save.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Now return to the recently added portlet. You can do this by opening the &lt;em&gt;Core&lt;/em&gt; module, selecting &lt;em&gt;portlets&lt;/em&gt; and browsing/searching for the portlet you created. This will allow you do see the portlet in isolation from the page. Alternatively, you can return to the page you were on, to see the portlet where it is placed. The portlet should now be displaying a summarized version of the News Article you just created. You can control how the portlet displays the list by editing the template, which requires an understanding of Ruby/&lt;span class=&quot;caps&quot;&gt;ERB&lt;/span&gt; and Html.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://blog.railshouse.com/">
    <author>
      <name>priyanka</name>
    </author>
    <id>tag:blog.railshouse.com,2009-06-09:20</id>
    <published>2009-06-09T23:45:00Z</published>
    <updated>2009-06-09T23:48:00Z</updated>
    <link href="http://blog.railshouse.com/2009/6/9/solution-to-dos-vulnerability-in-ruby" rel="alternate" type="text/html"/>
    <title>Solution to DoS vulnerability in Ruby</title>
<content type="html">
            &lt;div&gt;
&lt;p&gt;A denial of service (DoS) vulnerability was found on the BigDecimal standard library of Ruby.  Conversion from BigDecimal objects into Float numbers had a problem which enables attackers to effectively cause segmentation faults.&lt;/p&gt;
&lt;p&gt;ActiveRecord relies on this method, so most Rails applications are affected by this.  Though this is not a Rails-specific issue.&lt;/p&gt;
&lt;div&gt;
&lt;h1&gt;&lt;span&gt;Impact&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;An attacker can cause a denial of service by causing BigDecimal to parse an insanely large number, such as:&lt;/p&gt;
&lt;pre&gt;
BigDecimal(&amp;amp;quot;9E69999999&amp;amp;quot;).to_s(&amp;amp;quot;F&amp;amp;quot;)
&lt;/pre&gt;
&lt;h1&gt;&lt;span&gt;Vulnerable versions&lt;/span&gt;&lt;/h1&gt;
&lt;h2&gt;&lt;span&gt;1.8 series&lt;/span&gt;&lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;1.8.6-p368 and all prior versions&lt;/li&gt;
    &lt;li&gt;1.8.7-p160 and all prior versions&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span&gt;1.9 series&lt;/span&gt;&lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;All 1.9.1 versions are not affected by this issue&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;&lt;span&gt;Solution&lt;/span&gt;&lt;/h1&gt;
&lt;h2&gt;&lt;span&gt;1.8 series&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Please upgrade to 1.8.6-p369 or ruby-1.8.7-p173.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p369.tar.gz&quot;&gt;ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p369.tar.gz&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p173.tar.gz&quot;&gt;ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p173.tar.gz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://blog.railshouse.com/">
    <author>
      <name>railsdeveloper</name>
    </author>
    <id>tag:blog.railshouse.com,2009-05-31:17</id>
    <published>2009-05-31T23:29:00Z</published>
    <updated>2009-06-01T05:13:47Z</updated>
    <category term="conference"/>
    <category term="rails"/>
    <link href="http://blog.railshouse.com/2009/5/31/the-rails-conference-2009" rel="alternate" type="text/html"/>
    <title>The Rails Conference 2009</title>
<content type="html">
            &lt;p&gt;


 	 	 	&lt;br /&gt;
	&amp;lt;!--
		@page { size: 21cm 29.7cm; margin: 2cm }
		P { margin-bottom: 0.21cm }
	--&gt;	          

&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;b&gt;&lt;span class=&quot;caps&quot;&gt;RAILSCONF&lt;/span&gt; 2009&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Every year Rails developers all over the world eagerly look forward to the most awaited mega event Rails Conference. This year RailsConf 2009, the annual event for the Ruby on Rails community was held May 4-7 in Las Vegas, and was a huge success. It gave new and experienced Rails users practical tools for staying agile and maintaining a competitive edge in an industry that is being transformed by rapid innovation. For four intense days, developers engaged directly with over 100 expert speakers, learning how to exploit the popular framework&#8217;s newest features to solve problems and build businesses.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The RailsConf, co-presented by Ruby Central, Inc. and O&#8217;Reilly Media, Inc., is the largest official conference dedicated to everything Rails. This time around more than 1,300 web developers, IT managers, web-based business entrepreneurs, and others gathered to learn the basics, catch up on the latest developments, and sharpen their expertise, through a variety of presentations and events arranged by Program Chair Chad Fowler and Associate Chairs David Black and Rich Kilmer. Additionally there was a free parallel unconference called CabooseConf where skilled Rails coders from all over the world met in one room to work on their Rails projects.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;David Heinemeier Hansson, Creator of Rails, on stage at RailsConf 2009in Los Vegas.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;RailsConf is a unique opportunity for people who use Rails to meet some of the core development team, discuss real-world issues with them, and get their take on the future. This time the conference was set at an important crossroads in Rails development, with an upgrade and multiple enhancements just being completed and an imminent merger with Merb. Rails creator David Heinemeier Hansson of 37signals, filled conference-goers in on plans for the upcoming Rails 3 version, and in a keynote address he discussed &amp;quot;Rails 3 and the Real Secret to High Productivity.&amp;quot;&lt;/p&gt;
&lt;p&gt;In other keynotes, Hansson conducted an on-stage interview with Timothy Ferriss of The 4-hour Workweek, and Chris Wanstrath of GitHub discussed the importance of sharing code, contributing to open source projects, and focusing on community in a talk he titled &amp;quot;How To Become a Famous Ruby Rockstar or Rails Ninja.&amp;quot; Jon Crosby of Engine Yard talked about &amp;quot;Agility in Deployment &amp;ndash; Rails in the Cloud,&amp;quot; and Robert Martin of Object Mentor discussed &amp;quot;What Killed Smalltalk Could Kill Ruby, Too.&amp;quot; A Rails Core Panel gave conference-goers a chance for a Q&amp;amp;A with key Rails developers, including Hansson, Yehuda Katz with Engine Yard, Jeremy Kemper with 37signals, Michael Koziarski of Koziarski Software Limited, and Rick Olson with &lt;span class=&quot;caps&quot;&gt;ENTP&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chad Fowler, Conference Chair, on the stage at Railsconf 2009 in Las Vegas.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every year they announce winners of the Ruby Hero Words which are given to the unsung heroes of the Ruby/Rails world who teach, create and contribute without recognition or payment. This year&#8217;s winners of the coveted Ruby Hero Awards were John Nunemaker, Pat Allan, Aman Gupta, Luis Lavena, Dan Kubb, and Bryan Helmkamp.&lt;/p&gt;
&lt;p&gt;Engine Yard chose RailsConf 2009 as the occasion to preview its new Flex service that gives developers new ways to access the benefits of Rails when developing for the cloud. Flex will be available on Amazon EC2 in June. Also at the conference, Blue Box Group and Gear6 announced a partnership to develop and deliver a Memcached-as-a-Service solution to all Blue Box Group customers.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Rails core team &#8211; Joshua Peek (Consultant),Yehuda Katz (Engine Yard Inc.),Rick Olson (&lt;span class=&quot;caps&quot;&gt;ENTP&lt;/span&gt;),Michael Koziarski (Koziarski Software Limited),Jeremy Kemper (37signals), David Heinemeier Hansson (37signals) on stage at RailsConf 2009 in Las Vegas.&lt;br /&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sponsors for RailsConf 2009 were Engine Yard, Heroku, Sun Microsystems, Blue Box Group, and New Relic.&lt;/p&gt;
&lt;p&gt;You may like to visit &lt;a href=&quot;http://www.railsconf.com/&quot;&gt;http://www.railsconf.com&lt;/a&gt; for complete information on RailsConf2009, as well as watch keynote videos, speaker presentation files, and photos.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.railshouse.com/">
    <author>
      <name>priyanka</name>
    </author>
    <id>tag:blog.railshouse.com,2009-05-06:16</id>
    <published>2009-05-06T08:14:00Z</published>
    <updated>2009-05-29T23:54:05Z</updated>
    <category term="address book access widget"/>
    <category term="contact impoter"/>
    <category term="plaxo"/>
    <link href="http://blog.railshouse.com/2009/5/6/plaxo-address-book-access-widget-or-contact-importer" rel="alternate" type="text/html"/>
    <title>Plaxo Address Book Access Widget or Contact Importer</title>
<content type="html">
            &lt;div class=&quot;entrybody&quot;&gt;
&lt;p&gt;&lt;strong&gt;Plaxo&lt;/strong&gt; (Address Book Access Widget or contact importer) is an online address book and social networking service.The Plaxo is a simple-to-implement code of JavaScript which you can easily embed on your web page. plaxo official site is &amp;lt;a href=&amp;quot;http://plaxo.com&amp;quot; target=&amp;quot;&lt;em&gt;blank&amp;quot;&amp;gt; plaxo.com &amp;lt;/a&amp;gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
The Widget provides facility to import contacts from multiple address books like Gmail, Yahoo, American Online, Outlook Express , Plaxo , etc&amp;hellip; &lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
Here i provides step which you will follow and get appropiate result &lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
1. Create a page on your site with the following &lt;span class=&quot;caps&quot;&gt;&lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt;&lt;/span&gt; code and save page (like plaxo&lt;/em&gt;contacer.html). &lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;html&amp;gt; &lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;head&amp;gt;&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;https://www.plaxo.com/ab_chooser&lt;strong&gt;/abc_comm.jsdyn&lt;/strong&gt;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;body&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/body&amp;gt;&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
2. The page in which you&amp;nbsp; want address book(list of contact) widget than you just add following &lt;span class=&quot;caps&quot;&gt;&lt;span class=&quot;caps&quot;&gt;HTML&lt;/span&gt;&lt;/span&gt; code inside the &lt;span class=&quot;caps&quot;&gt;&lt;span class=&quot;caps&quot;&gt;HEAD&lt;/span&gt;&lt;/span&gt; tag&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://www.plaxo.com/css/m/js/&lt;strong&gt;util.js&lt;/strong&gt;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://www.plaxo.com/css/m/js/&lt;strong&gt;basic.js&lt;/strong&gt;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://www.plaxo.com/css/m/js/&lt;strong&gt;abc_launcher.js&lt;/strong&gt;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!&amp;mdash;&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function onABCommComplete() {&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &lt;span class=&quot;caps&quot;&gt;&lt;span class=&quot;caps&quot;&gt;OPTIONAL&lt;/span&gt;&lt;/span&gt;: do something here after the new data has been populated in your text area&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;mdash;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
3. You must give the id of textarea in which you want to place names and e-mail addresses&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&lt;/p&gt;
&lt;p&gt;e.g. &amp;lt;textarea id=&amp;quot;&lt;strong&gt;recipient_list&lt;/strong&gt;&amp;quot; name=&amp;quot;recipients&amp;quot;&amp;gt; &amp;lt;/textarea&amp;gt;.&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
4. Add a button to your page to launch the address book access widget&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ndash; It will place your chosen contact to textarea which has id as recipient_list.&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;ndash; Once you have filled in the details, add the resulting code to your page to create the button that will launch the widget. You can place your own button image and onclick you call function as showPlaxoABChooser().&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;a href=&amp;quot;javascript:;&amp;quot; onclick=&amp;quot;&lt;strong&gt;showPlaxoABChooser(&amp;lsquo;FILL_ME_IN&amp;rsquo;, &amp;lsquo;FILL_ME_IN&amp;rsquo;); return false&lt;/strong&gt;&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;img src=&amp;quot;http://www.plaxo.com/images/abc/buttons/&lt;strong&gt;add_button.gif&lt;/strong&gt;&amp;quot; alt=&amp;quot;Add from my address book&amp;quot; /&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/a&amp;gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
- Now you see the result which you expect. I think this may help you to integrate address book successfully. If you have any query or suggesstion than post here as comment.&lt;/p&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://blog.railshouse.com/">
    <author>
      <name>barinder</name>
    </author>
    <id>tag:blog.railshouse.com,2009-05-05:14</id>
    <published>2009-05-05T02:33:00Z</published>
    <updated>2009-05-08T04:22:49Z</updated>
    <category term="fckeditor"/>
    <category term="mephisto"/>
    <category term="rails"/>
    <link href="http://blog.railshouse.com/2009/5/5/integrating-fckeditor-on-mephisto" rel="alternate" type="text/html"/>
    <title>Integrating fckeditor with mephisto</title>
<content type="html">
            &lt;p&gt;&lt;span&gt;&lt;span&gt;After configuring mephisto blogging application by following steps from previous post of&lt;span&gt; &lt;strong&gt;Priyanka&lt;/strong&gt;&lt;/span&gt; (&lt;/span&gt;&lt;a href=&quot;http://blog.railshouse.com/2009/2/26/Integrate-Mephisto-with-Rails&quot;&gt;&lt;strong&gt;&lt;span&gt;Integrate Mephisto with Rails&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&lt;span&gt;), you will notice that text formating options available with mephisto are not so user friendly and you will have tough time while formatting text, including inline images in your blogs. And you will require a wysiwyg editor for formatting text of your blogs with images and well formated texts which is not available by default in mephisto.  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;Now in order to integrate fckeditor with your mephisto installation you need to follow certain steps which are mentioned below :&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;*steps are for rails version 2.2.2 or higher&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;1.) Install and Configure mephisto (Follow steps from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;a href=&quot;http://blog.railshouse.com/2009/2/26/Integrate-Mephisto-with-Rails&quot;&gt;&lt;span&gt;&lt;span&gt;Integrate Mephisto with Rails&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;2.) Install fckeditor plugin&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;* &lt;span&gt;ruby script/plugin install svn://rubyforge.org//var/svn/fckeditorp/trunk/fckeditor&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;* &lt;span&gt;rake fckeditor:install&lt;/span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;3.) If you are using rails version 2.2.2 or higher then&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;* in the file &lt;span&gt;vendor/plugins/fckeditor/app/controllers/fckeditor_controller.rb&lt;/span&gt; look for&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;uploaded = request.relative_url_root.to_s+&amp;quot;#{UPLOADED}/#{params[:Type]}&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;replace it with this  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;uploaded = ActionController::Base.relative_url_root.to_s+&amp;quot;#{UPLOADED}/#{params[:Type]}&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;similarly in the file &lt;span&gt;vendor/plugins/fckeditor/lib/fckeditor.rb&lt;/span&gt; replace&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;js_path = &amp;quot;#{request.relative_url_root}/javascripts&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;with&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;js_path = &amp;quot;#{ActionController::Base.relative_url_root}/javascripts&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;* patch from &lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;http://github.com/salicio/fckeditor/commit/fcf8fbee8cfad3a3df0df50172e448727909ccb9&quot;&gt;&lt;span&gt;&lt;span&gt;http://github.com/salicio/fckeditor/commit/fcf8fbee8cfad3a3df0df50172e448727909ccb9&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;4.) Edit &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;app/views/layouts&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;/application.htm.erb&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; file &lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;* Put this line in the file&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;lt;%= javascript_include_tag 'fckeditor/fckeditor' %&amp;gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;5.) Edit your &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;app/views/admin/articles&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;/_form.html.erb&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt; for articles &lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;* Search for &lt;span&gt;&amp;lt;%= form.text_area :body, :class =&amp;gt; 'fat', :rows =&amp;gt; 25 %&amp;gt;&lt;/span&gt; near line no 11&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;replace it with this&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;lt;%= fckeditor_textarea( 'article', 'body',:toolbarSet =&amp;gt; 'Simple', :width =&amp;gt; '100%', :height =&amp;gt; '200px') %&amp;gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;other usage details are available in &lt;span&gt;README&lt;/span&gt; file of fckeditor plugin (vendor/plugins/fckeditor)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;or can be found on &lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;http://blog.caronsoftware.com/2006/08/07/fckeditor-plugin-for-rails&quot;&gt;&lt;span&gt;&lt;span&gt;http://blog.caronsoftware.com/2006/08/07/fckeditor-plugin-for-rails&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;6.) There is a another small glitch, due to the interaction with &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;a href=&quot;http://github.com/emk/safe_erb/tree/master&quot;&gt;&lt;span&gt;safe_erb&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;
&lt;p&gt;&lt;span&gt;in the file &lt;span&gt;vendor/plugins/fckeditor/lib/fckeditor.rb&lt;/span&gt; at line no 15 replace&lt;br /&gt;
&lt;/span&gt;&lt;span&gt;&lt;span&gt;value = value.nil? ? &amp;quot;&amp;quot; : value&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;
&lt;p&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt;&lt;span&gt;
&lt;p&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&lt;span&gt;value = value.nil? ? &amp;quot;&amp;quot; : value.untaint()&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;After carefully following above steps you will be able to use fckeditor in your mephisto application and will be able to insert inline images and rich text to your blogs.  &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;Happy blogging.....!!!!!!&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.railshouse.com/">
    <author>
      <name>priyanka</name>
    </author>
    <id>tag:blog.railshouse.com,2009-04-20:13</id>
    <published>2009-04-20T23:48:00Z</published>
    <updated>2009-04-20T23:52:48Z</updated>
    <category term="coach"/>
    <category term="cricket"/>
    <category term="gloscon"/>
    <category term="gujarat cricket"/>
    <category term="match"/>
    <category term="player"/>
    <category term="railshouse"/>
    <category term="tournament"/>
    <category term="trade player"/>
    <category term="umpire"/>
    <category term="web 2.0"/>
    <link href="http://blog.railshouse.com/2009/4/20/gujarat-cricket-gully-cricket-goes-global" rel="alternate" type="text/html"/>
    <title>Gujarat Cricket-gully cricket goes global</title>
<content type="html">
            



&lt;p&gt;Gujarat Cricket is the first initiative in the field of cricket by &lt;b&gt;RailsHouse&lt;/b&gt; which is a part of &lt;b&gt;GLOSCON&lt;/b&gt;. It's a web-property, provides platform to those who wants to play cricket for their interest. &lt;/p&gt;

&lt;p&gt; Cricket is One of the most popular sports in india. Its a platform where one can join the club and play cricket professionally. Cricket which was played in streets..such way goes Global. It is initially at the state level for &lt;b&gt; GUJARAT &lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;To be apart of gujarat cricket first you have to join the club as Player, Coach or umpire by placing request to that club. Club have facility to manages their members. Club selects the players and form a team for match. Club participates in tournament to play match. Tournaments organize based on age group like &lt;i&gt; man , woman and children &lt;/i&gt;. Tournament can have different types of match like &lt;i&gt; One day , 20-20, Test match &lt;/i&gt;etc..&lt;/p&gt;



&lt;p&gt;Gujarat Cricket shows the available grounds, dates, statistics of all the matches and statistics of individual players. The summary of particular match can be seen in scorecard once the match finishes. One can find the detailed scores and stats of the whole match here. Viewer can view Clubs and players related videos, pictures on gujarat cricket.&lt;/p&gt;

&lt;p&gt;The striking feature of gujarat cricket is &lt;b&gt; &amp;quot;Trade A Player&amp;quot; &lt;/b&gt;. If any club wants to have any player of another club than club trade the other club's player by dealing with it. Sponsors can sponsor any player, tournament or club.&lt;/p&gt;

&lt;p&gt;Gujarat Cricket have facility to display top listed and most popular players and club. It also provides club headlines. Once tournament is completed experts are provides their views on it and other can make comment on views.&lt;/p&gt;

&lt;p&gt;Gujarat cricket required deep software engineering and analysis for that we prefer  open source technology such as &lt;b&gt; Ruby on Rails &lt;/b&gt;. Gujarat Cricket have many interactive &lt;b&gt; web 2.0 &lt;/b&gt; features like &lt;i&gt; poll, ratings, comments &lt;/i&gt; and many more.&lt;/p&gt;




          </content>  </entry>
  <entry xml:base="http://blog.railshouse.com/">
    <author>
      <name>barinder</name>
    </author>
    <id>tag:blog.railshouse.com,2009-04-17:12</id>
    <published>2009-04-17T11:45:00Z</published>
    <updated>2009-06-01T23:18:29Z</updated>
    <category term="open source"/>
    <category term="rails"/>
    <category term="ror open source project"/>
    <category term="top ror projects"/>
    <link href="http://blog.railshouse.com/2009/4/17/top-open-source-ruby-on-rails-projects" rel="alternate" type="text/html"/>
    <title>Top Open Source Ruby On Rails Projects</title>
<content type="html">
            &lt;div class=&quot;Section1&quot;&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span&gt;&amp;ldquo;Ruby on Rails&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;i&gt;&lt;span&gt;, often shortened to &lt;b&gt;Rails&lt;/b&gt; or &lt;b&gt;RoR&lt;/b&gt;, is an &lt;/span&gt;&lt;/i&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Open_source&quot; title=&quot;Open source&quot;&gt;&lt;i&gt;&lt;span&gt;open source&lt;/span&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;span&gt; &lt;/span&gt;&lt;/i&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Web_application_framework&quot; title=&quot;Web application framework&quot;&gt;&lt;i&gt;&lt;span&gt;web application framework&lt;/span&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;span&gt; for the &lt;/span&gt;&lt;/i&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ruby_%28programming_language%29&quot; title=&quot;Ruby (programming language)&quot;&gt;&lt;i&gt;&lt;span&gt;Ruby programming language&lt;/span&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;span&gt;. It is intended to be used with an &lt;/span&gt;&lt;/i&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Agile_software_development&quot; title=&quot;Agile software development&quot;&gt;&lt;i&gt;&lt;span&gt;Agile development methodology&lt;/span&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;span&gt; which is used by web developers for &lt;/span&gt;&lt;/i&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Rapid_application_development&quot; title=&quot;Rapid application development&quot;&gt;&lt;i&gt;&lt;span&gt;rapid development&lt;/span&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;span&gt;&amp;hellip;&amp;rdquo; &lt;/span&gt;&lt;/i&gt;&lt;span&gt; Wikipedia (http://en.wikipedia.org/wiki/Ruby_on_Rails)&lt;i&gt; &lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Ruby on Rails&lt;/span&gt;&lt;span class=&quot;apple-converted-space&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;apple-style-span&quot;&gt;&lt;span&gt;has already created a buzz in the web development and challenged the capability of Giant Players like Microsoft's Asp.NET and Java. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span class=&quot;apple-style-span&quot;&gt;&lt;span&gt;Ruby On Rails also powering some of the best open source web applications. This application can be proven as best learning practices for newbie&amp;rsquo;s bottom up learners in rails development and time savers for seasoned rails developers. By looking into this applications newbie&amp;rsquo;s can easily know about best practices in rails, standard plugins/gems used in rails project to accomplish tasks and learn best practices of rails. This application can be proven as time savers for rails developers as by customizing or extending them can meet project requirements. So every rails developer should always keep eyes on such rails projects to learn rails best practices.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span class=&quot;apple-style-span&quot;&gt;&lt;span&gt;Below is the list and descriptions of the top most open source projects build using rails. Beside these projects there are lots of other open source rails projects are going on.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;Spree (e-commerce solution)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;The goal of the project is to build a complete open source e-commerce solution for Ruby on Rails. The Rails commerce space is immature and is lacking serious solutions for developers looking for answers to their complex business needs. Rails is especially problematic because it is a relatively new technology and suffers from &amp;ldquo;small project mentality. Most open source projects in Rails are maintained by a single individual and tend to be limited in scope. Spree seeks to create a large and healthy open source community of the type that developers of other languages are used to participating in.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;a href=&quot;http://spreehq.org/&quot;&gt; &lt;b&gt; &lt;span&gt;License: New BSD License                               Author: &lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;a href=&quot;http://schoftech.net/&quot;&gt;&lt;b&gt;&lt;span&gt;Sean Schofield&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;a href=&quot;http://spreehq.org/&quot;&gt;&lt;b&gt;&lt;span&gt; &lt;br /&gt;
Home Page: &lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;a href=&quot;http://spreehq.org/&quot;&gt;&lt;b&gt;&lt;span&gt;http://spreehq.org&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;a&gt;&lt;b&gt;&lt;span&gt;                         Source Code: &lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;a href=&quot;http://github.com/schof/spree&quot;&gt;&lt;b&gt;&lt;span&gt;http://github.com/schof/spree&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;Tracks (A GTD style task list)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Tracks is a web-based application to help you implement David Allens Getting Things Done methodology. It was built using Ruby on Rails, and comes with a built-in webserver (WEBrick), so that you can run it on your own computer if you like. It can be run on any platform on which Ruby can be installed, including Mac OS X, Windows XP and Linux. Tracks is Open Source, free and licensed under the GNU GPL.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;License: GPL                                       Author: &lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;http://www.rousette.org.uk/projects&quot;&gt;&lt;b&gt;&lt;span&gt;BSAG, Luke Melia, Reinier Balt &amp;amp; contributors&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;span&gt; &lt;br /&gt;
Home Page: &lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;http://www.getontracks.org/&quot;&gt;&lt;b&gt;&lt;span&gt;http://www.getontracks.org&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;span&gt; Source Code: &lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;http://github.com/bsag/tracks&quot;&gt;&lt;b&gt;&lt;span&gt;http://github.com/bsag/tracks&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;OpenMind (customer feedback community)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;OpenMind enables you to build an online community with your customers and partners, allowing you to, find out what features and improvements your customers as a whole would value most ,engage in an online discussion with your users to gain deeper insights into their needs, communicate upcoming releases, closing the loop on customer feedback  your customers can see exactly which suggestions became committed features of a future release based upon community feedback ,Gain deeper insights into specific targeted topic areas through user surveys, Allow customers to engage in online discussion with each other and with you via online forums.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;&lt;br /&gt;
&lt;b&gt;License:&lt;/b&gt; GNU GPL                                                        &lt;b&gt;Author:&lt;/b&gt; &lt;/span&gt;&lt;span&gt;Robert &amp;amp; Richard Sturim&lt;/span&gt;&lt;span&gt; &lt;br /&gt;
&lt;b&gt;Home Page:&lt;/b&gt; &lt;/span&gt;&lt;a href=&quot;http://openmind.sourceforge.net/&quot;&gt;&lt;span&gt;http://openmind.sourceforge.net&lt;/span&gt;&lt;/a&gt;&lt;span&gt;         &lt;b&gt;Source Code:&lt;/b&gt; &lt;/span&gt;&lt;a href=&quot;http://github.com/spob/openmind&quot;&gt;&lt;span&gt;http://github.com/spob/openmind&lt;/span&gt;&lt;/a&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;Insoshi (Social networking platform)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;A social networking platform, funded by Paul Graham's Y Combinator investment firm, that aims to be the &amp;quot;MySQL of social networking platforms: free for hackers, with a commercial product for businesses.&amp;quot; The project lead is Michael Hartl, author of the book, &amp;quot;RailsSpace.&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;License: GNU GPL                                           Author: &lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;http://michaelhartl.com/&quot;&gt;&lt;b&gt;&lt;span&gt;Michael Hartl&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;span&gt; &lt;br /&gt;
Home Page: &lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;http://insoshi.com/&quot;&gt;&lt;b&gt;&lt;span&gt;http://insoshi.com/&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;span&gt;                       Source Code: &lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;http://github.com/insoshi/insoshi&quot;&gt;&lt;b&gt;&lt;span&gt;http://github.com/insoshi/insoshi&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;Webistrano (Web-UI for managing Capistrano deployments )&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Webistrano is a Web UI for managing Capistrano deployments. It lets you manage projects and their stages like test, production, and staging with different settings. Those stages can then be deployed with Capistrano through Webistrano. &lt;/span&gt;&lt;span&gt;Webistrano's purpose is to make the deployment of multi-stage and multi-environment scenarios easy. Further it allows you to track who deployed what, when to which servers and be alerted by email on each deployment.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;License: BSD                                                            Author: &lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;http://www.peritor.com/&quot;&gt;&lt;b&gt;&lt;span&gt;Jonathan Weiss&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;span&gt; &lt;br /&gt;
Home Page: &lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;http://labs.peritor.com/webistrano&quot;&gt;&lt;b&gt;&lt;span&gt;http://labs.peritor.com/webistrano&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;span&gt;      Source Code:&lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;http://labs.peritor.com/svn/webistrano/trunk&quot;&gt;&lt;b&gt;&lt;span&gt;http://labs.peritor.com/svn/webistrano/trunk&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;Hobo Central (web application builder )&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Hobo is a collection of open-source plugins for Ruby on Rails that help you build anything from throwaway prototypes and internal utilities to meticulously crafted full-blown web apps. The goal: write less code. So much less in fact that it starts to feel like you're not implementing your app at all, you&amp;rsquo;re just declaring what you want.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;License:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; MIT                                                     &lt;b&gt;Author:&lt;/b&gt; &lt;/span&gt;&lt;a href=&quot;http://hobocentral.net/&quot;&gt;&lt;span&gt;Tom Locke&lt;/span&gt;&lt;/a&gt;&lt;span&gt; &lt;br /&gt;
&lt;b&gt;Home Page:&lt;/b&gt; &lt;/span&gt;&lt;a href=&quot;http://hobocentral.net/&quot;&gt;&lt;span&gt;http://hobocentral.net/&lt;/span&gt;&lt;/a&gt;&lt;span&gt;                    &lt;b&gt;Source Code:&lt;/b&gt; &lt;/span&gt;&lt;a href=&quot;http://hobocentral.net/blog/getting-started/&quot;&gt;&lt;span&gt;http://hobocentral.net/blog/getting-started/&lt;/span&gt;&lt;/a&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;a href=&quot;http://www.williambharding.com/blog/rails/savage-beast-20/&quot;&gt;&lt;b&gt;&lt;span&gt;Savage Beast 2.0&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;span&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span&gt;forum plugin&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Based on the very popular Rails message forum, Beast, this is a Rails forum that implements multiple topics, posts, moderators, RSS feeds, localization, and most all the niceties you've gotten to know on the Beast forums (beast.caboo.se). &lt;/span&gt;&lt;span&gt;The goal of the Savage Beast plugin is to get the featureful forums of Beast, without the hassle of maintaining separate Mongrels, subdomains, and User sharing that make Beast tricky to setup. &lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;License: &lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;http://www.opensource.org/licenses/mit-license.php&quot;&gt;&lt;b&gt;&lt;span&gt;MIT License&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;span&gt;                           &lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;http://www.opensource.org/licenses/mit-license.php&quot;&gt;&lt;b&gt;&lt;span&gt;Authors: &amp;nbsp; &lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;a href=&quot;http://code.google.com/u/william.harding/&quot;&gt;&lt;b&gt;&lt;span&gt;william.harding&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;Home Page: &lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;http://code.google.com/p/savage-beast-2/downloads/list&quot;&gt;&lt;b&gt;&lt;span&gt;http://code.google.com/p/savage-beast-2/&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;span&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;Source Code: &lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;http://code.google.com/p/savage-beast-2/downloads/list&quot;&gt;&lt;b&gt;&lt;span&gt;http://code.google.com/p/savage-beast-2/downloads/list&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;Community Engine (&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;social network plugin&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;a href=&quot;http://missingmethod.brunobornsztein.com/projects/community_engine/&quot;&gt;&lt;span&gt;Community Engine&lt;/span&gt;&lt;/a&gt;&lt;span&gt; is a free, open-source social network plugin for Ruby on Rails applications. Drop it into your new or existing application, and you&amp;rsquo;ll instantly have all the features of a basic community site.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Features of this social network plugin:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Authentication      (sign up, log in) &lt;/span&gt;&lt;/li&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;User      profiles &lt;/span&gt;&lt;/li&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;User      search &lt;/span&gt;&lt;/li&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Blogs      with tagging, categories and rich text editing &lt;/span&gt;&lt;/li&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Photo      uploading and tagging &lt;/span&gt;&lt;/li&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;&amp;ldquo;Clippings&amp;rdquo;      - visual bookmarks &lt;/span&gt;&lt;/li&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Commenting      and comment notification by e-mail (Blogs, profiles, photos, and clippings      can be commented) &lt;/span&gt;&lt;/li&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Forums      &lt;/span&gt;&lt;/li&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Friendships      and activity feeds &lt;/span&gt;&lt;/li&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Favoriting      of clippings and blog posts &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;License: MIT                                                       Author: &lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;http://workingwithrails.com/person/5576-bruno-bornsztein&quot;&gt;&lt;b&gt;&lt;span&gt;Bruno Bornsztein&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;span&gt; &lt;br /&gt;
Home Page: &lt;span&gt;http://www.communityengine.org&lt;/span&gt; Source Code: &lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;https://github.com/bborn/communityengine/tree/master&quot;&gt;&lt;b&gt;&lt;span&gt;https://github.com/bborn/communityengine/tree/master&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;OneBody (&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;community focused social network&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;OneBody is web-based software that connects community members, especially churches, on the web.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;License:&lt;/span&gt;&lt;/b&gt;&lt;span&gt; GPL                                                    &lt;b&gt;Author:&lt;/b&gt; &lt;/span&gt;&lt;a href=&quot;http://timmorgan.org/&quot;&gt;&lt;span&gt;Tim Morgan&lt;/span&gt;&lt;/a&gt;&lt;span&gt; &lt;br /&gt;
&lt;b&gt;Home Page:&lt;/b&gt; &lt;/span&gt;&lt;a href=&quot;http://beonebody.com/&quot;&gt;&lt;span&gt;http://beonebody.com&lt;/span&gt;&lt;/a&gt;&lt;span&gt;                   &lt;b&gt;Source Code:&lt;/b&gt; &lt;/span&gt;&lt;a href=&quot;http://github.com/seven1m/onebody&quot;&gt;&lt;span&gt;http://github.com/seven1m/onebody&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;Mailr (web mail application)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Mailr is an open source webmail application that can be used with any IMAP&amp;nbsp;server. &lt;/span&gt;&lt;span&gt;E-mails can be created both in HTML &amp;amp; plain text. E-mail addresses in the contact list are Ajax-auto-completed just like Gmail &amp;amp; more.&lt;a name=&quot;Features&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;Features&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Uses      IMAP protocol &lt;/span&gt;&lt;/li&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Caches      IMAP server connections &lt;/span&gt;&lt;/li&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;HTML      and plaintext message composition &lt;/span&gt;&lt;/li&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Addressbook      (contacts) with possible import from CSV file &lt;/span&gt;&lt;/li&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Ajax      based autocomplete of email addresses &lt;/span&gt;&lt;/li&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Mail      filters based on Maildrop &lt;/span&gt;&lt;/li&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;i18n support&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;Home Page: &lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;http://mailr.org/&quot;&gt;&lt;b&gt;&lt;span&gt;http://mailr.org/&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;span&gt;                                        Source Code : &lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;http://mailr.org/latest-code&quot;&gt;&lt;b&gt;&lt;span&gt;http://mailr.org/latest-code&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;span&gt;        &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;Mephisto (&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;blogging system&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;a name=&quot;repository_description&quot;&gt;&lt;/a&gt;&lt;span&gt;Mephisto is a free Ruby-based weblog-engine which combines the quality, functionality and user-friendliness of other systems in a simple, elegant and powerful user interface.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Mephisto offers a classic equipment which bloggers would probably expect form a professional weblog-engine. Posts can be stored and presented in different sections and on different pages. You can set the time and date you&amp;rsquo;d like Mephisto to publish a given article automatically. The system doesn&amp;rsquo;t provide a WYSIWIG-editor, however it supports Textile, Markdown and Markdown with Smartypant. You can use the embedded preview function to make sure your article looks just the way you&amp;rsquo;d like it to be presented. The number of posts shown on one page can be defined for every single section.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;The main advantage of Mephisto lies in the simplicity and user-friendliness of collaborative publishing. Not only multiple authors can use the engine, they can also edit the same document at the same time&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;&lt;span&gt;License:&lt;/span&gt;&lt;/strong&gt;&lt;span&gt; MIT                                              &lt;strong&gt;&lt;span&gt;Author:&lt;/span&gt;&lt;/strong&gt; &lt;/span&gt;&lt;a href=&quot;http://activereload.net/&quot;&gt;&lt;span&gt;Rick Olson and Justin Palmer&lt;/span&gt;&lt;/a&gt;&lt;span&gt; &lt;br /&gt;
&lt;strong&gt;&lt;span&gt;Home Page:&lt;/span&gt;&lt;/strong&gt;  &lt;/span&gt;&lt;a href=&quot;http://mephistoblog.com/&quot;&gt;&lt;span&gt;http://mephistoblog.com/&lt;/span&gt;&lt;/a&gt;&lt;span&gt;      &lt;strong&gt;&lt;span&gt;Source Code:&lt;/span&gt;&lt;/strong&gt; &lt;/span&gt;&lt;a href=&quot;http://github.com/technoweenie/mephisto&quot;&gt;&lt;span&gt;http://github.com/technoweenie/mephisto&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span class=&quot;apple-style-span&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;Substruct (Shopping cart / e-commerce application)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;* The first and most robust Ruby on Rails open source e-commerce project. A replacement for old, brittle and crusty shopping cart packages&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;* Cleanly designed, easy to extend and maintain &lt;br /&gt;
o Implemented as a Rails Engine. &lt;br /&gt;
o Adheres (where possible) to XHTML / CSS standards &lt;br /&gt;
o Persona and scenario driven UI design &lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;* Extracted from ''real world'' code&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;&lt;span&gt;License:&lt;/span&gt;&lt;/strong&gt;&lt;span&gt; GPL v2                                                           &lt;strong&gt;&lt;span&gt;Author:&lt;/span&gt;&lt;/strong&gt; &lt;/span&gt;&lt;a href=&quot;http://www.subimage.com/&quot;&gt;&lt;span&gt;Subimage LLC&lt;/span&gt;&lt;/a&gt;&lt;span&gt; &lt;br /&gt;
&lt;strong&gt;&lt;span&gt;Home Page:&lt;/span&gt;&lt;/strong&gt;   &lt;/span&gt;&lt;a href=&quot;http://substruct.subimage.com/&quot;&gt;&lt;span&gt;http://substruct.subimage.com/&lt;/span&gt;&lt;/a&gt;&lt;span&gt;    &lt;strong&gt;&lt;span&gt;Source Code:&lt;/span&gt;&lt;/strong&gt; &lt;/span&gt;&lt;a href=&quot;http://code.google.com/p/substruct/&quot;&gt;&lt;span&gt;http://code.google.com/p/substruct/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span class=&quot;apple-style-span&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;b&gt;&lt;span&gt;Radiant (content management system)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Features:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;An elegant user interface &lt;/span&gt;&lt;/li&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Flexible templating with layouts, snippets, page parts, and a custom tagging language &lt;/span&gt;&lt;/li&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;A first-class extension/plugin system&lt;/span&gt;&lt;/li&gt;
    &lt;li class=&quot;MsoNormal&quot;&gt;&lt;span&gt;Simple user management and permissions&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;strong&gt;&lt;span&gt;License:&lt;/span&gt;&lt;/strong&gt;&lt;span&gt; MIT                                             &lt;strong&gt;&lt;span&gt;Author:&lt;/span&gt;&lt;/strong&gt; &lt;/span&gt;&lt;a href=&quot;http://wiseheartdesign.com/&quot;&gt;&lt;span&gt;John W. Long&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span&gt;Home Page:&lt;/span&gt;&lt;/strong&gt; &lt;/span&gt;&lt;a href=&quot;http://radiantcms.org/&quot;&gt;&lt;span&gt;http://radiantcms.org/&lt;/span&gt;&lt;/a&gt;&lt;span&gt;            &lt;strong&gt;&lt;span&gt;Source Code:&lt;/span&gt;&lt;/strong&gt; &lt;/span&gt;&lt;a href=&quot;http://radiantcms.org/download/&quot;&gt;&lt;span&gt;http://radiantcms.org/download/&lt;/span&gt;&lt;/a&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span class=&quot;apple-style-span&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
          </content>  </entry>
  <entry xml:base="http://blog.railshouse.com/">
    <author>
      <name>priyanka</name>
    </author>
    <id>tag:blog.railshouse.com,2009-03-12:11</id>
    <published>2009-03-12T04:55:00Z</published>
    <updated>2009-03-13T04:28:36Z</updated>
    <category term="Ruby on Rails Basics"/>
    <category term="basic ruby on rails cardinality and associations"/>
    <category term="many-to-many"/>
    <category term="one-to-many"/>
    <category term="one-to-one"/>
    <link href="http://blog.railshouse.com/2009/3/12/basic-ruby-on-rails-cardinality-and-associations" rel="alternate" type="text/html"/>
    <title>Basic Ruby on Rails Cardinality and Associations</title>
<content type="html">
            &lt;p&gt;Active Record associations can be used to describe one-to-one, one-to-many and many-to-many relationships between models. Each model uses an association to describe its role in the relation. The belongs_to association is always used in the model that has the foreign key.&lt;/p&gt;
&lt;p&gt;(1) One-to-one&lt;/p&gt;
&lt;p&gt;Use has_one in the base and belongs_to in the associated model.&lt;br /&gt;
 &lt;br /&gt;
models/employee.rb&lt;br /&gt;
     has_one :address&lt;/p&gt;
&lt;p&gt;models/address.rb&lt;br /&gt;
     belongs_to :employee  #foreign key &#8211; employee_id&lt;br /&gt;
 end&lt;/p&gt;
&lt;p&gt;(2) One-to-many&lt;/p&gt;
&lt;p&gt;Use has_many in the base, and belongs_to in the associated model.&lt;/p&gt;
&lt;p&gt;models/user.rb&lt;br /&gt;
   has_many :events&lt;/p&gt;
&lt;p&gt;models/event.rb&lt;br /&gt;
   belongs_to :user   #foreign key &#8211; user_id&lt;/p&gt;
&lt;p&gt;(3) Many-to-Many&lt;/p&gt;
&lt;p&gt;There are two different ways to set up a many-to-many association in Rails.&lt;/p&gt;
&lt;p&gt;1. has_and_belongs_to_many (often reffered to as habtm)&lt;/p&gt;
&lt;p&gt;In migration&lt;br /&gt;
 def self.up&lt;/p&gt;
create_table &#8216;categories_products&#8217;, :id =&amp;gt; false do |t|
t.column :category_id, :integer
t.column :product_id, :integer
end
end
&lt;p&gt;models/product.rb&lt;br /&gt;
   has_and_belongs_to_many :categories&lt;/p&gt;
&lt;p&gt;models/category.rb&lt;br /&gt;
   has_and_belongs_to_many :products&lt;/p&gt;
&lt;p&gt;Here join table &#8216;categories_products&#8217; contains primary keys of both the tables. The table name follows alphabetical order of each table, separated by an underscore.&lt;/p&gt;
&lt;p&gt;2. has_many :through&lt;/p&gt;
&lt;p&gt;models/categorization.rb&lt;br /&gt;
   belongs_to :product&lt;br /&gt;
   belongs_to :category&lt;/p&gt;
&lt;p&gt;models/product.rb&lt;br /&gt;
   has_many :categorizations&lt;br /&gt;
   has_many :categories, :through =&amp;gt; :categorizations&lt;/p&gt;
&lt;p&gt;models/category.rb&lt;br /&gt;
   has_many :categorizations&lt;br /&gt;
   has_many :products, :through =&amp;gt; :categorizations&lt;/p&gt;
&lt;p&gt;This technique is used when you want to put some additional fields in median table. Here categorization is a full model that represent the join table.&lt;/p&gt;
&lt;p&gt;So, with these tips you can choose the right one for your project.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.railshouse.com/">
    <author>
      <name>barinder</name>
    </author>
    <id>tag:blog.railshouse.com,2009-03-12:10</id>
    <published>2009-03-12T04:38:00Z</published>
    <updated>2009-05-12T00:29:16Z</updated>
    <category term="gems"/>
    <category term="rails"/>
    <category term="reinstall gems"/>
    <link href="http://blog.railshouse.com/2009/3/12/re-installing-all-gems-automatically" rel="alternate" type="text/html"/>
    <title>Re-installing all gems automatically</title>
<content type="html">
            &lt;p&gt;&lt;span&gt;Today while working on rails application I figured out that some of the gems are not configured/installed properly and it was creating strange problems and there older versions are also installed. So I decided to reinstall all installed gems.  &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;But I wondered there is no way to automatically reinstall all the gems. What I have to do is first uninstall all the gems one by one then reinstall gems manually.  &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;This manual process was too hectic, time consuming and also after this manual steps I forgot to reinstall some required gems, and when I ran my application it was giving me strange errors and as a rails newbie it took too much of my time to figure out things.  &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;So after this painful experience I decided automize this whole process and ended up with one shell script with following commands.   &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;gem list --no-versions | sed -e '/^(*|$)/d' &amp;gt; installed_gems  &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;sudo gem uninstall --a --ignore-dependencies .+  &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;cat installed_gems | xargs sudo gem install  &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;rm installed_gems   &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1.  gem list --no-versions | sed -e '/^(*|$)/d' &amp;gt; installed_gems      &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;This will list down all the installed gems ignoring version number in file named &amp;quot;installed_gems&amp;quot;   &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2.  sudo gem uninstall --a --ignore-dependencies .+      &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;This command will uninstall all installed gems one by one ignoring the dependencies of gem.  &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;3.  cat installed_gems | xargs sudo gem install      &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;This command will read file created at first step &amp;quot;installed_gem&amp;quot; and will install all latest version of all gems one by one.     &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;4.  rm installed_gems      &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;After reinstalling all the gems file created in first step is of no use.      This is just to cleanup this file.  Put above 4 commands in one shell script and have fun....&lt;/span&gt;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://blog.railshouse.com/">
    <author>
      <name>priyanka</name>
    </author>
    <id>tag:blog.railshouse.com,2009-03-07:5</id>
    <published>2009-03-07T00:14:00Z</published>
    <updated>2009-03-07T00:36:57Z</updated>
    <category term="merb"/>
    <category term="rails 3.0"/>
    <category term="ruby on rails"/>
    <link href="http://blog.railshouse.com/2009/3/7/rails-vs-merb" rel="alternate" type="text/html"/>
    <title>Rails Vs. Merb</title>
<content type="html">
            &lt;p&gt;Rails and Merb are MVC web application frameworks written in and for Ruby. 
Both the framework is similar in terms of their directory structures and concepts.&lt;/p&gt;

&lt;p&gt;Now, We have to compare Rails and Merb. and findout which one is best?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Rails is not Modular based. As Merb is Modular.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rails is focused on rapid development for the web programmer.
Merb is focused on speed and extensibility.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In terms of speed comparison merb is faster than rails. because Merb intentionally is lighter than Rails.
Faster means that processing time is spent less inside framework code and more inside the custom   code.
Merb also uses a faster Ruby re-implementation Erubis over the original and slower ERB.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In terms of stability Rails latest version 2.2.2 is very stable and Merb version 1.0. Most of production    server uses Rails compare to merb.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rails opinionated in Javascript library, ORM, and template language. Where Merb Javascript library, ORM and template language agnostic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Merb is use Datamapper where Rails more prefer ActiveRecord for database interaction. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There are syntax and file structure difference in Rails and Merb.&lt;/p&gt;

&lt;p&gt;a. Create new application &#8216;test_app&#8217;  &lt;br /&gt;
     Rails:  rails test_app &lt;br /&gt;
     Merb: merb-gen app test_app &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;b. Start server     &lt;br /&gt;
     Rails: script/server &lt;br /&gt;
     Merb: merb &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;c.  Interactive console &lt;br /&gt;
 Rails: script/console  &lt;br /&gt;
     Merb: merb -i &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;d.  Generate scaffold  &lt;br /&gt;
     Rails: script/generate  &lt;br /&gt;
     Merb: merb-gen &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;e.  Server configuration  &lt;br /&gt;
     Rails: config/environment.rb&lt;br /&gt;
     Merb: config/merb.yml &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;f.   Initialization code&lt;br /&gt;
    Rails: config/environment.rb  and  config/initializers/*&lt;br /&gt;
    Merb: config/init.rb&lt;/p&gt;

&lt;p&gt;g.  Dependencies&lt;br /&gt;
     Rails: config/environment.rb&lt;br /&gt;
     Merb: config/dependencies.rb&lt;/p&gt;

&lt;p&gt;h.  Response format &lt;br /&gt;
     Rails:  respond_to &lt;br /&gt;
     Merb: provides :xml, :js, :yaml &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;i.   Notice format &lt;br /&gt;
     Rails:  flash[:notice]&lt;br /&gt;
     Merb: message[:notice] &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;j.   Observer  &lt;br /&gt;
     Rails: before_filter &lt;br /&gt;
     Merb: before &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;k.  Set Routes  &lt;br /&gt;
     Rails: config/routes.rb  &lt;br /&gt;
     Merb: config/router.rb &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;l.   Migrations    &lt;br /&gt;
     Rails: db/migrate &lt;br /&gt;
     Merb: schema/migrations &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;M. Testing &lt;br /&gt;
     Rails: test
     Merb: spec &amp;amp; test &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;So, Based on application requirement you are able to choose which framework is more preferable. 
Now It&#8217;s your time to make decide.. &lt;/p&gt;

&lt;p&gt;Great News, that Now Merb gets merged into Rails 3! &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
          </content>  </entry>
  <entry xml:base="http://blog.railshouse.com/">
    <author>
      <name>priyanka</name>
    </author>
    <id>tag:blog.railshouse.com,2009-02-26:3</id>
    <published>2009-02-26T06:31:00Z</published>
    <updated>2009-05-30T00:02:06Z</updated>
    <category term="installtion of mephisto"/>
    <category term="mephisto"/>
    <category term="rails"/>
    <category term="ruby on rails"/>
    <category term="tzinfo"/>
    <link href="http://blog.railshouse.com/2009/2/26/integrate-mephisto-with-rails" rel="alternate" type="text/html"/>
    <title>Integrate Mephisto with Rails</title>
<content type="html">
            &lt;p&gt;Mephisto is a blogging system available in ruby on rails. it&#8217;s provides easy way to integrate with your rails application.&lt;/p&gt;
&lt;p&gt;To implement mephisto you have two different ways to download Mephisto: one is download the latest release as a tar.gz file, and other is to get code from Subversion repository.&lt;/p&gt;
&lt;p&gt;For Quick Installation, You must follow some of the steps:&lt;/p&gt;
&lt;p&gt;1. Mephisto is not much compartable with Ruby 1.8.7. So it&#8217;s benefitial to use Ruby 1.8.6.&lt;/p&gt;
&lt;p&gt;2. To download mephisto 0.8 form &lt;a href=&quot;http://www.mephistoblog.com&quot;&gt; mephisto.com &lt;/a&gt; (official site) or &lt;a href=&quot;http://github.com/technoweenie/mephisto/tree/master&quot;&gt; github &lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;than extract the downloaded file by using&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;tar -zxvf mephisto.tar.gz&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;3. Create a database mephisto_production for production environment, and set database user and password.&lt;/p&gt;
&lt;p&gt;user: mephisto_productionuser&lt;/p&gt;
&lt;p&gt;password: yourpassword&lt;/p&gt;
&lt;p&gt;4. Now you have to rename config/database.example.yml to config/database.yml by rename that file&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;mv config/database.example.yml config/database.yml&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;5. Now you make required changes in config/database.yml. depending on database type uou make related changes here i provide example of mysql database&lt;/p&gt;
&lt;p&gt;vi config/database.yml    or         nano config/database.yml to open your file.&lt;/p&gt;
&lt;p&gt;If you are preffering database as mysql than follow certain step liasted below:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;adapter: mysql&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;database: mephisto_production&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;username: mephisto_productionuser&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;password: yourpassword&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;host: localhost&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;socket: /var/run/mysqld/mysqld.sock&lt;/strong&gt; [ normally socket is either in run or lib directory ]&lt;/p&gt;
&lt;p&gt;6. You must required Time Zone setting so for that you have to use TZInfo gem for mephisto.&lt;/p&gt;
&lt;p&gt;To install TZInfo,    &lt;strong&gt;gem install tzinfo&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;7. For creating mephisto database by running command as rake db:bootstrap from a prompt. If you want to use production environment than use &lt;strong&gt;rake db:bootstrap RAILS_ENV=production.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;8. Access the admin section by visiting &lt;strong&gt;http://domain.com/admin &lt;/strong&gt;and provide &lt;strong&gt;username: admin and password: test&lt;/strong&gt;. because it&#8217;s default logging information and than as per your wish you have to change username and password.&lt;/p&gt;
&lt;p&gt;Now start playing with mephisto.&lt;/p&gt;
&lt;p&gt;Hope, this blog is helpful to you for implement mephisto. if you have any query or suggestion than post comment here.&lt;/p&gt;
          </content>  </entry>
</feed>
