<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/view/helpers/view_helper.rb</filename>
    </added>
    <added>
      <filename>resources/rdoc/horo.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,2 +1,3 @@
 .DS_Store
-pkg/*
\ No newline at end of file
+pkg/*
+doc/*
\ No newline at end of file</diff>
      <filename>.gitignore</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,9 @@
+2008-02-25
+  * Improved documentation now is online here http://api.lipsiasoft.com
+  * Refactored text_field, text_area, password_field helpers
+  * Refactored country_select helper
+  * Refactored ext_date_select, ext_datetime_select helpers
+  
 2008-02-24
   * Rename Js app from Lipsiadmin.app to Backend.app
   * Added the possibility to reuse pages/froms/grids in windows.
@@ -19,7 +25,7 @@
   * Added a pdf builder for actionmailer
   * Added method missing in ActiveRecord to intercept calls to non-localized methods (eg. name instead of name_cz)
   * Added utility scopes for paginate, include, search
-  * Added a new literal method for prevent json to &quot;strignify&quot; javascripts funtctions (eg. &quot;function() { alert('me')}&quot;.to_lt)
+  * Added a new literal method for prevent json to &quot;strignify&quot; javascripts funtctions (eg. &quot;function() { alert('me')}&quot;.to_l)
   * Added a new module for escape utf8 chars for servers that don't have java with utf8 fonts (it's used by pdf builder)
   
 2008-05-21</diff>
      <filename>CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,5 @@
-Created by Davide D'Agostino on 2008-01-11.
-Copyright 2009 Lipsiasoft s.r.l. All rights reserved.
-
-Released under the MIT license
-
 ==Lipsiadmin
 
-
 Lipsiadmin is a new revolutionary admin for your projects.
 
 Is developped by http://www.lipsiasoft.com that use it from 2 years in production enviroments.
@@ -17,6 +11,11 @@ because the aim of developper wose build in a agile way web/site apps so we use
 intelligent way a mixin of &lt;tt&gt;old&lt;/tt&gt; html and new ajax functions, 
 for example ext manage the layout of page, grids, tree and errors, but form are in html code.
 
+Author:: Davide D'Agostino
+Copyright:: Copyright (c) 2009 Lipsiasoft s.r.l. (http://www.lipsiasoft.com)
+License:: MIT License (http://www.opensource.org/licenses/mit-license.php)
+Api Documentation:: http://api.lipsiasoft.com
+
 ==Requirements
 
 Rails 2.0
@@ -24,27 +23,37 @@ Haml 2.0
 
 ==Installation
 
-script/plugin install git://github.com/Lipsiasoft/lipsiadmin.git
+  script/plugin install git://github.com/Lipsiasoft/lipsiadmin.git
 
 The version 2.9 version is an alpha relase and the gem will be aviable from 3.0
 
+In future you can simply do:
+
+  in config/environments.rb
+  config.gem &quot;lipsiadmin&quot;
+  
+then (if you don't have it already)
+  
+  $ rake gems:install
+  
 ==Examples
 
 now run script/generate and you can see some like:
 
-Installed Generators
-  Builtin: controller, integration_test, mailer, migration, model, observer, performance_test, plugin, resource, scaffold, session_migration
-  Lipsiadmin: attachment, backend, backend_page, pdf
-
-script/generate backend # Generate the base admin
-script/generate backend_page yourmodel # Generate a &quot;scaffold&quot; for your model
-script/generate attachment # Generate the an attachments
-script/generate pdf PdfName # Generate a new pdf document
+  Installed Generators
+    Builtin: controller, integration_test, mailer, migration, model, etc..
+    Lipsiadmin: attachment, backend, backend_page, pdf
 
-==Remember
+So you can do:
 
-That now Lipsiadmin use your current locale of environment for generate localized pages
+  $ script/generate backend # Generate the base admin
+  $ script/generate backend_page yourmodel # Generate a &quot;scaffold&quot; for your model
+  $ script/generate attachment # Generate the an attachments
+  $ script/generate pdf PdfName # Generate a new pdf document
 
 ==Contribute
 
-Please contribute in coding, patch, and submitting translation.
\ No newline at end of file
+Please contribute in coding, patch, and submitting translation api documentation etc...
+
+* Community can be found here:: http://groups.google.com/group/lipsiadmin
+* Api documentation can be found here:: http://api.lipsiasoft.com
\ No newline at end of file</diff>
      <filename>README</filename>
    </modified>
    <modified>
      <diff>@@ -19,8 +19,10 @@ desc 'Generate documentation for the lipsiadmin plugin.'
 Rake::RDocTask.new(:rdoc) do |rdoc|
   rdoc.rdoc_dir = 'doc'
   rdoc.title    = 'Lipsiadmin'
-  rdoc.options &lt;&lt; '--line-numbers' &lt;&lt; '--inline-source'
-  rdoc.rdoc_files.include('README*')
+  rdoc.options &lt;&lt; '--line-numbers' &lt;&lt; '--inline-source' &lt;&lt; '--accessor' &lt;&lt; 'cattr_accessor=object'
+  rdoc.options &lt;&lt; '--charset' &lt;&lt; 'utf-8'
+  rdoc.template = 'resources/rdoc/horo'
+  rdoc.rdoc_files.include('README', 'CHANGELOG')
   rdoc.rdoc_files.include('lib/**/*.rb')
 end
 
@@ -69,6 +71,11 @@ task :gemspec do
   end
 end
 
+desc &quot;Publish the API documentation&quot;
+task :pdoc =&gt; [:rdoc] do 
+  Rake::SshDirPublisher.new(&quot;root@server1.lipsiasoft.com&quot;, &quot;/var/www/apps/lipsiadmin/rdoc&quot;, &quot;doc&quot;).upload
+end
+
 desc &quot;Publish the release files to RubyForge.&quot;
 task :release =&gt; [ :package ] do
   require 'rubyforge'</diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -3,23 +3,42 @@ module Lipsiadmin
     # This provide a simple login for backend and frontend.
     # Use backend_login_required in backend and
     # frontend_login_requirded in frontend.
+    # 
+    #   Examples:
+    # 
+    #     class FrontendController &lt;  ApplicationController
+    #       before_filter :login_frontend_required, :except =&gt; [:login]
+    #     end
+    # 
     module Authentication
       protected
+        
+        # Returns true if &lt;tt&gt;current_account&lt;/tt&gt; is logged and active.
         def logged_in?
           current_account != :false &amp;&amp; current_account.active?
         end
-
+        
+        # Returns the current_account, it's an instance of &lt;tt&gt;Account&lt;/tt&gt; model
         def current_account
           @current_account ||= (login_from_session || :false)
         end
-
+        
+        # Ovverride the current_account, you must provide an instance of Account Model
+        # 
+        #   Examples:
+        #   
+        #     current_account = Account.last
+        # 
         def current_account=(new_account)
           session[:account] = (new_account.nil? || new_account.is_a?(Symbol)) ? nil : new_account.id
           @current_account = new_account
         end
 
+        # Returns true if the &lt;tt&gt;current_account&lt;/tt&gt; is allowed to see the requested
+        # controller/action.
+        # 
+        # For configure this role please refer to: &lt;tt&gt;Lipsiadmin::AccessControl::Base&lt;/tt&gt;
         def allowed?
-
           allowed = current_account.maps.collect(&amp;:allowed)[0]
           denied  = current_account.maps.collect(&amp;:denied)[0]
           
@@ -36,15 +55,26 @@ module Lipsiadmin
           return allow &amp;&amp; !deny
         end
 
+        # Returns a helper to pass in a &lt;tt&gt;before_filter&lt;/tt&gt; for check if
+        # an account are: &lt;tt&gt;logged_in?&lt;/tt&gt; and &lt;tt&gt;allowed?&lt;/tt&gt;
+        # 
+        # By default this method is used in BackendController so is not necessary
         def backend_login_required
           logged_in?  &amp;&amp; allowed? || access_denied(:backend)
         end
-      
+        
+        # Returns a helper to pass in a &lt;tt&gt;before_filter&lt;/tt&gt; for check if
+        # an account are: &lt;tt&gt;logged_in?&lt;/tt&gt; and &lt;tt&gt;allowed?&lt;/tt&gt;
+        #
+        #   Examples:
+        # 
+        #     before_filter :login_frontend_required, :except =&gt; [:login]
+        # 
         def fronted_login_required
           logged_in?  &amp;&amp; allowed? || access_denied(:backend)
         end
 
-        def access_denied(where)
+        def access_denied(where)#:nodoc:
           respond_to do |format|
             format.html { redirect_to :controller =&gt; &quot;#{where}/sessions&quot;, :action =&gt; :new }
             format.js { render(:update) { |page| page.alert &quot;You don't allowed to access to this javascript&quot; } }
@@ -52,20 +82,22 @@ module Lipsiadmin
           false
         end  
 
-        def store_location
+        def store_location#:nodoc:
           session[:return_to] = request.request_uri
         end
-
+        
+        # Redirect the account to the page that requested an authentication or
+        # if the account is not allowed/logged return it to a default page
         def redirect_back_or_default(default)
           redirect_to(session[:return_to] || default)
           session[:return_to] = nil
         end
 
-        def self.included(base)
+        def self.included(base)#:nodoc:
           base.send :helper_method, :current_account, :logged_in?
         end
 
-        def login_from_session
+        def login_from_session#:nodoc:
           self.current_account = Account.find_by_id(session[:account]) if session[:account]
         end
     end # Module Authentication</diff>
      <filename>lib/access_control/authentication.rb</filename>
    </modified>
    <modified>
      <diff>@@ -95,22 +95,22 @@ module Lipsiadmin
         @project_modules &lt;&lt; ProjectModule.new(name, controller, &amp;block)
       end
       
-      # Globally but for current role allow an action
+      # Globally allow an action of a controller for the current role
       def allow_action(path)
         @allowed &lt;&lt; recognize_path(path)
       end
       
-      # Globally but for current role deny an action
+      # Globally deny an action of a controllerfor the current role
       def deny_action(path)
         @denied &lt;&lt; recognize_path(path)
       end
       
-      # Globally but for current role allow an action
+      # Globally allow all actions from a controller for the current role
       def allow_all_actions(path)
         @allowed &lt;&lt; { :controller =&gt; recognize_path(path)[:controller] }
       end
       
-      # Globally but for current role deny an action
+      # Globally denty all actions from a controller for the current role
       def deny_all_actions(path)
         @denied &lt;&lt; { :controller =&gt; recognize_path(path)[:controller] }
       end
@@ -144,6 +144,7 @@ module Lipsiadmin
         yield self
       end
       
+      # Build a new menu and automaitcally add the action on the allowed actions.
       def menu(name, path=nil, options={}, &amp;block)
         @menus &lt;&lt; Menu.new(name, path, options, &amp;block)
       end
@@ -220,6 +221,7 @@ module Lipsiadmin
       end
     end
     
-    class AccessControlError &lt; StandardError; end;
+    class AccessControlError &lt; StandardError#:nodoc:
+    end
   end
 end
\ No newline at end of file</diff>
      <filename>lib/access_control/base.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,10 +1,10 @@
 module Lipsiadmin#:nodoc:
   module Controller#:nodoc:
-    # Base Backend Controller that defined:
+    # Base Backend Controller that define:
     # 
-    # layout false
-    # before_filter :backend_login_required
-    # helper Lipsiadmin::View::Helpers::BackendHelper
+    #   layout false
+    #   before_filter :backend_login_required
+    #   helper Lipsiadmin::View::Helpers::BackendHelper
     # 
     class Base &lt; ActionController::Base
       def self.inherited(subclass)#:nodoc:</diff>
      <filename>lib/controller/lipsiadmin_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,19 @@
 module Lipsiadmin
   module Controller
-    # This module convert a string/controller to 
+    # This module convert a string/controller to a pdf through Pd4ml java library (included in this plugin)
+    # 
+    # For generate a pdf you can simply do
+    #   
+    #     script/generate pdf invoice
+    # 
+    # then edit your template /app/views/pdf/invoice.html.haml
+    # 
+    # Then in any of your controllers add some like this:
+    # 
+    #   def generate_pdf_invoice
+    #     render_pdf :invoice, 'invoice_file.pdf'
+    #   end
+    #   
     module PdfBuilder
       include Lipsiadmin::Utils::HtmlEntities
       
@@ -34,7 +47,8 @@ module Lipsiadmin
       end
 
       # Errors For PDF
-      class PdfError &lt; StandardError; end
+      class PdfError &lt; StandardError#:nodoc:
+      end
     end
   end
 end
\ No newline at end of file</diff>
      <filename>lib/controller/pdf_builder.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,11 @@
 module Lipsiadmin
   module Controller
     # This module are raised when an exception fire up in controllers.
-    # Now you can personalize exception and simplify the layout using templates
-    # in app/views/exception
+    # 
+    # Now you can personalize exception and simplify the layout using templates in:
+    # 
+    #   app/views/exception
+    # 
     # when an exception is raised it try to send an email, and for send an email 
     # you need to configure in enviroment or in an initializer some like this:
     #
@@ -14,7 +17,7 @@ module Lipsiadmin
     # 
     module Rescue
       
-      def self.included(base)
+      def self.included(base)#:nodoc:
         base.class_eval do
           alias_method_chain :rescue_action_in_public, :notifier
         end</diff>
      <filename>lib/controller/rescue.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,7 @@
 module Lipsiadmin
   module Controller
     # Executes the response body as JavaScript in the context of the parent window.
+    # 
     # Use this method of you are posting a form to a hidden IFRAME or if you would like
     # to use IFRAME base RPC.
     module RespondsToParent</diff>
      <filename>lib/controller/responds_to_parent.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,24 +1,3 @@
-# Attachment allows file attachments that are stored in the filesystem. All graphical
-# transformations are done using the Graphics/ImageMagick command line utilities and
-# are stored in Tempfiles until the record is saved. Attachment does not require a
-# separate model for storing the attachment's information, instead adding a few simple
-# columns to your table.
-#
-# Author:: Jon Yurek
-# Copyright:: Copyright (c) 2008 thoughtbot, inc.
-# License:: MIT License (http://www.opensource.org/licenses/mit-license.php)
-#
-# Attachment defines an attachment as any file, though it makes special considerations
-# for image files. You can declare that a model has an attached file with the
-# +has_one_attachment+ method:
-#
-#   class User &lt; ActiveRecord::Base
-#     has_one_attachment
-#     or
-#     has_many_attachments 
-#   end
-#
-# See the +has_one_attachment+ or +has_many_attachments+ documentation for more details.
 require 'tempfile'
 require 'data_base/attachment/upfile'
 require 'data_base/attachment/iostream'
@@ -36,18 +15,30 @@ end
 
 module Lipsiadmin
   module DataBase
-    # The base module that gets included in ActiveRecord::Base. See the
-    # documentation for Attachment::ClassMethods for more useful information.
     module Attachment
 
-      class &lt;&lt; self
+      class &lt;&lt; self#:nodoc:
         def included(base) #:nodoc:
           base.extend(ClassMethods)
         end
       end
 
       module ClassMethods
-
+        
+        # Attach a single file/image to your model.
+        # 
+        #   Examples:
+        #     
+        #     has_one_attachment                    :image
+        #     attachment_styles_for                 :image, :normal, &quot;128x128!&quot;
+        #     validates_attachment_presence_for     :image
+        #     validates_attachment_size_for         :image, :greater_than =&gt; 10.megabytes
+        #     validates_attachment_content_type_for :image, &quot;image/png&quot;
+        # 
+        # Then in your form (with multipart) you can simply add:
+        # 
+        #   =file_field :mymodel, :image_attributes
+        # 
         def has_one_attachment(name, options={})
           options[:as]         ||= :attacher
           options[:class_name] ||= &quot;Attachment&quot;
@@ -88,6 +79,21 @@ module Lipsiadmin
           end
         end
 
+        # Attach a many files/images to your model.
+        # 
+        #   Examples:
+        #     
+        #     has_one_attachment                    :images
+        #     attachment_styles_for                 :images, :normal, &quot;128x128!&quot;
+        #     validates_attachment_presence_for     :images
+        #     validates_attachment_size_for         :images, :greater_than =&gt; 10.megabytes
+        #     validates_attachment_content_type_for :images, &quot;image/png&quot;
+        # 
+        # Then in your form (with multipart) you can simply add:
+        #   
+        #   =fields_for &quot;yourmodel[attachments_attributes][]&quot;, @yourmodel.images.build do |image|
+        #     =image.file_field :file
+        # 
         def has_many_attachments(name, options = {})
           options[:as]         ||= :attacher
           options[:class_name] ||= &quot;Attachment&quot;</diff>
      <filename>lib/data_base/attachment.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,33 @@
 module Lipsiadmin
+  # Attachment allows file attachments that are stored in the filesystem. All graphical
+  # transformations are done using the Graphics/ImageMagick command line utilities and
+  # are stored in Tempfiles until the record is saved. Attachment does not require a
+  # separate model for storing the attachment's information, instead adding a few simple
+  # columns to your table.
+  #
+  # Author:: Jon Yurek
+  # Copyright:: Copyright (c) 2008 thoughtbot, inc.
+  # License:: MIT License (http://www.opensource.org/licenses/mit-license.php)
+  #
+  # Attachment defines an attachment as any file, though it makes special considerations
+  # for image files. You can declare that a model has an attached file with the
+  # +has_one_attachment+ method:
+  # 
+  # From your console:
+  #   script/generate attachment
+  # 
+  # Then in any model you can do:
+  #
+  #   class User &lt; ActiveRecord::Base
+  #     has_many_attachments                  :attachments, :dependent =&gt; :destroy
+  #     has_one_attachment                    :image
+  #     attachment_styles_for                 :attachments, :normal, &quot;128x128!&quot;
+  #     validates_attachment_presence_for     :attachments
+  #     validates_attachment_size_for         :attachments, :greater_than =&gt; 10.megabytes
+  #     validates_attachment_content_type_for :attachments, &quot;image/png&quot;
+  #   end
+  #
+  # See the &lt;tt&gt;Lipsiadmin::DataBase::Attachment::ClassMethods&lt;/tt&gt; documentation for more details.
   module Attachment
     
     class &lt;&lt; self
@@ -30,7 +59,7 @@ module Lipsiadmin
         processor
       end
       
-      def interpolates(key, &amp;block)
+      def interpolates(key, &amp;block) #:nodoc:
         Lipsiadmin::Attachment.interpolations[key] = block
       end
       
@@ -418,12 +447,12 @@ module Lipsiadmin
         end
       end
 
-      def fire_events(which)
+      def fire_events(which) #:nodoc:
         return true if callback(:&quot;#{which}_post_process&quot;) == false
         return true if callback(:&quot;#{which}_#{name}_post_process&quot;) == false
       end
 
-      def post_process_styles
+      def post_process_styles #:nodoc:
         log(&quot;Post-processing #{name}&quot;)
         @styles.each do |name, args|
           begin</diff>
      <filename>lib/data_base/attachment/attach.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,50 +1,54 @@
-# Provides method that can be included on File-type objects (IO, StringIO, Tempfile, etc) to allow stream copying
-# and Tempfile conversion.
-module IOStream
+module Lipsiadmin
+  module Attachment
+    # Provides method that can be included on File-type objects (IO, StringIO, Tempfile, etc) to allow stream copying
+    # and Tempfile conversion.
+    module IOStream
 
-  # Returns a Tempfile containing the contents of the readable object.
-  def to_tempfile
-    tempfile = Tempfile.new(&quot;stream&quot;)
-    tempfile.binmode
-    self.stream_to(tempfile)
-  end
+      # Returns a Tempfile containing the contents of the readable object.
+      def to_tempfile
+        tempfile = Tempfile.new(&quot;stream&quot;)
+        tempfile.binmode
+        self.stream_to(tempfile)
+      end
 
-  # Copies one read-able object from one place to another in blocks, obviating the need to load
-  # the whole thing into memory. Defaults to 8k blocks. If this module is included in both
-  # StringIO and Tempfile, then either can have its data copied anywhere else without typing
-  # worries or memory overhead worries. Returns a File if a String is passed in as the destination
-  # and returns the IO or Tempfile as passed in if one is sent as the destination.
-  def stream_to(path_or_file, in_blocks_of = 8192)
-    dstio = case path_or_file
-            when String   then File.new(path_or_file, &quot;wb+&quot;)
-            when IO       then path_or_file
-            when Tempfile then path_or_file
-            end
-    buffer = &quot;&quot;
-    self.rewind
-    while self.read(in_blocks_of, buffer) do
-      dstio.write(buffer)
+      # Copies one read-able object from one place to another in blocks, obviating the need to load
+      # the whole thing into memory. Defaults to 8k blocks. If this module is included in both
+      # StringIO and Tempfile, then either can have its data copied anywhere else without typing
+      # worries or memory overhead worries. Returns a File if a String is passed in as the destination
+      # and returns the IO or Tempfile as passed in if one is sent as the destination.
+      def stream_to(path_or_file, in_blocks_of = 8192)
+        dstio = case path_or_file
+                when String   then File.new(path_or_file, &quot;wb+&quot;)
+                when IO       then path_or_file
+                when Tempfile then path_or_file
+                end
+        buffer = &quot;&quot;
+        self.rewind
+        while self.read(in_blocks_of, buffer) do
+          dstio.write(buffer)
+        end
+        dstio.rewind    
+        dstio
+      end
     end
-    dstio.rewind    
-    dstio
   end
 end
 
 class IO #:nodoc:
-  include IOStream
+  include Lipsiadmin::Attachment::IOStream
 end
 
 %w( Tempfile StringIO ).each do |klass|
   if Object.const_defined? klass
     Object.const_get(klass).class_eval do
-      include IOStream
+      include Lipsiadmin::Attachment::IOStream
     end
   end
 end
 
 # Corrects a bug in Windows when asking for Tempfile size.
 if defined? Tempfile
-  class Tempfile
+  class Tempfile#:nodoc:
     def size
       if @tmpfile
         @tmpfile.fsync</diff>
      <filename>lib/data_base/attachment/iostream.rb</filename>
    </modified>
    <modified>
      <diff>@@ -32,7 +32,7 @@ module Lipsiadmin
   end
 
   if defined? StringIO
-    class StringIO
+    class StringIO#:nodoc:
       attr_accessor :original_filename, :content_type
       def original_filename
         @original_filename ||= &quot;stringio.txt&quot;</diff>
      <filename>lib/data_base/attachment/upfile.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,19 @@
 module Lipsiadmin
   module DataBase
+    # This is the table that handle the attachments. 
+    # You can define some global info like:
+    # 
+    #   attachment_styles :thumb, &quot;128x128&quot;
+    # 
+    # In this way all models that use &lt;tt&gt;has_one_attachment&lt;/tt&gt; or 
+    # &lt;tt&gt;has_many_attachments&lt;/tt&gt; handle a default style called *thumb*
+    # 
+    # Remember that any model that use &lt;tt&gt;has_one_attachment&lt;/tt&gt; or 
+    # &lt;tt&gt;has_many_attachments&lt;/tt&gt; can override/add styles/validations etc...
+    # 
     class AttachmentTable &lt; ActiveRecord::Base
       
-      def self.inherited(subclass)
+      def self.inherited(subclass)#:nodoc:
         super
         subclass.write_inheritable_attribute(:attachment_definitions, {}) if subclass.attachment_definitions.nil?
         subclass.attachment_definitions[subclass.name] = {:validations =&gt; {}}.merge(Lipsiadmin::Attachment.options)
@@ -19,28 +30,32 @@ module Lipsiadmin
       
       #validates_presence_of :filename
       
+      # Returns the url of the attachment, optionally you can pass the style like url(:thumb)
       def url(style=nil)
         file.to_s(style)
       end
-    
+      
+      # Returns a &lt;tt&gt;Lipsiadmin::Attachment::Attach&lt;/tt&gt; instance
       def file
         @_file ||= Lipsiadmin::Attachment::Attach.new(:attached, self, attachment_definitions)
       end
-    
+      
+      # Assign a &lt;tt&gt;Lipsiadmin::Attachment::Attach&lt;/tt&gt; instance to the current file
       def file=(tempfile)
         file.assign(tempfile)
       end
-    
+      
+      # Returns true if the file exist
       def file?
         file.exist?
       end
       
-      def attachment_definitions=(options)
+      def attachment_definitions=(options)#:nodoc:
         attachment_definitions.merge!(options.symbolize_keys)
       end
       
       # This is the custom instance attachment_definition
-      def attachment_definitions
+      def attachment_definitions#:nodoc:
         @instance_attachment_definitions ||= self.class.attachment_definitions[self.class.name].clone
         return @instance_attachment_definitions
       end
@@ -49,12 +64,14 @@ module Lipsiadmin
         attachment = record.file
         attachment.send(:flush_errors) unless attachment.valid?
       end
-    
+      
+      # Perform &lt;tt&gt;file&lt;/tt&gt;.save
       def save_attached_files
         logger.info(&quot;[Attachment] Saving attachments.&quot;)
         file.save
       end
-    
+      
+      # Perform &lt;tt&gt;file&lt;/tt&gt;.destroy
       def destroy_attached_files
         logger.info(&quot;[Attachment] Deleting attachments.&quot;)
         file.queue_existing_for_delete
@@ -62,7 +79,7 @@ module Lipsiadmin
       end
     end
     
-    module ClassMethods
+    module ClassMethods#:nodoc:
 
       def attachment_url(url)
         attachment_attachment_url_for(self.name, url)
@@ -112,7 +129,6 @@ module Lipsiadmin
         validates_attachment_thumbnails_for(self.name, options)
       end
 
-      # Places ActiveRecord-style validations on the presence of a file.
       def validates_attachment_presence(options = {})
         validates_attachment_presence_for(self.name, options)
       end</diff>
      <filename>lib/data_base/attachment_table.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,23 @@
 module Lipsiadmin
   module DataBase
+    # With this method we can translate define and automatically translate columns for 
+    # the current rails locale.
+    # 
+    # Defining some columns like these:
+    # 
+    #   m.col :string, :name_it, :name_en, :name_cz
+    #   m.col :text, :description_it, :description_en, :description_cz
+    #   
+    # we can call
+    #   
+    #   myinstance.name
+    # 
+    # or
+    # 
+    #   puts myinstance.description
+    #   
+    # Lipsiadmin look for name_#{I18n.locale}
+    # 
     module TranslateAttributes
       # Define &lt;tt&gt;method missing&lt;/tt&gt; to intercept calls to non-localized methods (eg. +name+ instead of +name_cz+)
       def method_missing(method_name, *arguments)</diff>
      <filename>lib/data_base/translate_attributes.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,27 +1,56 @@
 module Lipsiadmin
   module DataBase
+    # This class create a *fake* table that can be usefull if you need for example
+    # perform validations. Take a look to this test case:
+    # 
+    #   Examples:
+    # 
+    #     class Contact &lt; Lipsiadmin::DataBase::WithoutTable
+    #       column :name, :string
+    #       column :company, :string
+    #       column :telephone, :string
+    #       column :email, :string
+    #       column :message, :text
+    #     
+    #       validates_presence_of :name, :message
+    #       validates_format_of :email, :with =&gt; /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
+    #     end
+    # 
+    # Now we need to validate a contact, and if the validations is okey send an email or if not raise errors
+    # 
+    #   @contact = Contact.new(params[:contact])
+    #   if @contact.valid? 
+    #     Notifier.deliver_support_request(@contact)
+    #   else
+    #     flash[:notice] = &quot;There are some problems&quot;
+    #     render :action =&gt; :support_request
+    #   end
+    # 
     class WithoutTable &lt; ActiveRecord::Base
       self.abstract_class = true
 
-      def create_or_update
+      def create_or_update#:nodoc:
         errors.empty?
       end
 
       class &lt;&lt; self
-        def inherited(klass)
+        def inherited(klass)#:nodoc:
           columns_hash.each do |name, column|
             klass.columns &lt;&lt; column unless klass.column_names.include(name)
           end
         end
-
+        
+        # Returns columns for this *fake* table
         def columns()
           @columns ||= []
         end
-
+        
+        # Define columns for a this *fake* table
         def column(name, sql_type = nil, default = nil, null = true)
           columns &lt;&lt; ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
           reset_column_information
         end
+        
         # Resets all the cached information about columns, which will cause them to be reloaded on the next request.
         def reset_column_information
           generated_methods.each { |name| undef_method(name) }</diff>
      <filename>lib/data_base/without_table.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,10 +6,8 @@ require 'mailer/pdf_builder'
 require 'mailer/exception_notifier'
 require 'view/helpers/active_record_helper'
 require 'view/helpers/backend_helper'
-require 'view/helpers/country_select_helper'
-require 'view/helpers/date_helper'
+require 'view/helpers/view_helper'
 require 'view/helpers/ext_helper'
-require 'view/helpers/tag_helper'
 require 'controller/ext'
 require 'controller/pdf_builder'
 require 'controller/responds_to_parent'
@@ -37,9 +35,14 @@ ActiveRecord::Base.class_eval do
 end
 
 ActionView::Base.class_eval do
-  include Lipsiadmin::View::Helpers::TagHelper
+  include Lipsiadmin::View::Helpers::FormHelper
+  include Lipsiadmin::View::Helpers::FormTagHelper
+  include Lipsiadmin::View::Helpers::DateHelper
+  include Lipsiadmin::View::Helpers::CountrySelectHelper
 end
 
+ActionView::Helpers::FormBuilder.send(:include, Lipsiadmin::View::Helpers::FormBuilder)
+
 ActionView::Helpers::PrototypeHelper::JavaScriptGenerator::GeneratorMethods.class_eval do
   include Lipsiadmin::View::Helpers::ExtHelper
 end</diff>
      <filename>lib/lipsiadmin.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,7 @@
 module Lipsiadmin
   module Mailer
+    # This class send notification through mail if an exception
+    # occour in a controller.
     class ExceptionNotifier &lt; ActionMailer::Base
 
       @@sender_address = %(&quot;Exception Notifier&quot; &lt;exception.notifier@default.com&gt;)
@@ -17,8 +19,11 @@ module Lipsiadmin
       self.mailer_name = &quot;exception&quot;
       self.template_root = &quot;#{File.dirname(__FILE__)}&quot;
 
-      def self.reloadable?() false end
-
+      def self.reloadable?#:nodoc:
+        false 
+      end
+      
+      # This method deliver the exception for the given controller and request
       def exception(exception, controller, request)
         content_type &quot;text/plain&quot;
 </diff>
      <filename>lib/mailer/exception_notifier.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,36 @@
 module Lipsiadmin
   module Mailer
+    # This module convert a string/controller to a pdf through Pd4ml java library (included in this plugin)
+    # 
+    # For generate a pdf you can simply do
+    #   
+    #     script/generate pdf invoice
+    # 
+    # then edit your template /app/views/pdf/invoice.html.haml
+    # 
+    # Then in any of your mailers add some like this:
+    # 
+    #   def order_invoiced(order)
+    #     recipients my@mail.com
+    #     from       my@server.com
+    #     subject    Your Invoice
+    #
+    #     attachment &quot;application/pdf&quot; do |a|
+    #       a.body = render_pdf(:invoice, :invoice =&gt; order.invoice, :other =&gt; order.invoice.other)
+    #     end
+    #
+    #     part &quot;text/plain&quot; do |a|
+    #       a.body = render_message(&quot;order_invoiced&quot;, :order =&gt; order, :body_template =&gt; @body_template)
+    #     end       
+    #   end
+    #
     module PdfBuilder
       include Lipsiadmin::Utils::HtmlEntities
       
       # Path to the pd4ml jarfile        
       JARPATH = &quot;../../resources&quot;
       
+      # Convert a stream to pdf, the template must be located in app/view/pdf/yourtemplate.pdf.erb
       def render_pdf(template, body)
         # set the landescape
         landescape = (body[:landescape].delete || false)
@@ -35,6 +60,7 @@ module Lipsiadmin
     end
 
     # Errors For PDF
-    class PdfError &lt; StandardError; end
+    class PdfError &lt; StandardError#:nodoc:
+    end
   end
 end
\ No newline at end of file</diff>
      <filename>lib/mailer/pdf_builder.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,12 @@
 module Lipsiadmin
   module Utils
+    # Returns an object whose to_json evaluates to code. 
+    # Use this to pass a literal JavaScript expression as an argument to another JavaScriptGenerator method.
+    # 
+    #   Examples:
+    # 
+    #     &quot;function() { alert('test') }&quot;.to_l
+    # 
     module Literal
       # Returns an object whose &lt;tt&gt;to_json&lt;/tt&gt; evaluates to +code+. Use this to pass a literal JavaScript 
       # expression as an argument to another JavaScriptGenerator method.</diff>
      <filename>lib/utils/literal.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,6 +2,7 @@ module Lipsiadmin
   module View
     module Helpers
       module BackendHelper
+        # This method work like builtin Rails error_message_for but use an Ext.Message.        
         def simple_error_messages_for(*params)
           options = params.last.is_a?(Hash) ? params.pop.symbolize_keys : {}
           objects = params.collect {|object_name| instance_variable_get(&quot;@#{object_name}&quot;) }.compact
@@ -18,38 +19,71 @@ module Lipsiadmin
             ''
           end
         end
-    
+        
+        # This method add tab for in your view
         def tab(name, padding=true, options={}, &amp;block)
           options[:style] = &quot;padding:10px;#{options[:style]}&quot; if padding
           options[:id] ||= name.to_s.downcase.gsub(/[^a-z0-9]+/, '_').gsub(/-+$/, '').gsub(/^-+$/, '')
           concat content_tag(:div, capture(&amp;block), { :id =&gt; options[:id], :class =&gt; &quot;x-hide-display&quot;, :style =&gt; options[:style], :tabbed =&gt; true, :title =&gt; name })
         end
         
+        # Set the title of the page
         def title(title)
           content_tag(:script, &quot;Backend.app.setTitle(#{title.to_json})&quot;, :type =&gt; Mime::JS)
         end
         
+        # Store the location to come back from for example an extjs grid
         def back_to(location)
           content_tag(:script, &quot;Backend.app.backTo(#{url_for(location)})&quot;, :type =&gt; Mime::JS)
         end
         
+        # Generate the menu from the Lispiadmin::AccessControl
         def backend_menu
           config = current_account.maps.collect(&amp;:project_modules)[0].collect(&amp;:config)
           config &lt;&lt; { :text =&gt; &quot;Backend.locale.buttons.help&quot;.to_l, :handler =&gt; &quot;function() { Backend.app.openHelp() }&quot;.to_l }
           return config.to_json
         end
+        
+        # Open a new windows that can contain a form that you can reuse
+        # 
+        #   Example:
+        #     
+        #     # in app/views/dossiers/_form.html.haml
 
+        #         %tr
+        #           %td{:style=&gt;&quot;width:100px&quot;} 
+        #             %b Customer:
+        #           %td
+        #             %span{:id =&gt; :account_name}=@dossier.account ? @dossier.account.full_name : &quot;None&quot; 
+        #             =hidden_field :dossier, :account_id
+        #             =open_window &quot;/backend/accounts.js&quot;, :id, :name, :dossier_account_id, :account_name
+        # 
         def open_window(url, value, display, render_value_to, render_display_to)
           link_to_function(image_tag(&quot;backend/new.gif&quot;, :style=&gt;&quot;vertical-align:bottom&quot;), 
             &quot;Backend.window.open({url:'#{url}', display:'#{display}', value:'#{value}', displayField:'#{render_display_to}', valueField:'#{render_value_to}'})&quot;)
         end
-
+        
+        # This method call a remote_function and in the same time do a 
+        # 
+        #   Backend.app.mask()
+        #
+        # and when the function is complete 
+        # 
+        #   Backend.app.unmask()
+        # 
         def link_to_remote_with_wait(name, options={}, html_options={})
           options[:complete] = &quot;Backend.app.unmask();&quot;
           options[:before]  = &quot;Backend.app.mask('#{I18n.t('backend.messages.wait.message')}')&quot;;
           link_to_function(name, remote_function(options), html_options || options.delete(:html))
         end
-
+        
+        # This method generates a new ExtJs BoxComponent.
+        # 
+        #   Examples:
+        # 
+        #     =box &quot;My Title&quot;, &quot;My Subtitle&quot;, :submit =&gt; true, :collapsible =&gt; true do
+        #       my content
+        # 
         def box(title=nil, subtitle=nil, options={}, &amp;block)
           return &lt;&lt;-HTML
             &lt;div class=&quot;x-box&quot; style=&quot;width:99%&quot;&gt;</diff>
      <filename>lib/view/helpers/backend_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,7 +6,7 @@ module Lipsiadmin#:nodoc:
     # This is the base class of ext components
     class Component      
 
-      def initialize(options={}, &amp;block)
+      def initialize(options={}, &amp;block)#:nodoc:
         @config = Configuration.new(options)
         @before, @after = [], []
         if block_given?
@@ -58,26 +58,26 @@ module Lipsiadmin#:nodoc:
         end
       end
       
-      # Return the array JavaScript to add before component.
+      # Returns an array of javascripts to add before component is rendered.
       #      
       def before
         @before
       end
 
-      # Return the raw JavaScript to add before component.
-      #      
+      # Returns the javascript to add before component is rendered.
+      #
       def before_js
         @before.uniq.compact.join(&quot;\n\n&quot;) + &quot;\n\n&quot;
       end
       
-      # Return the array JavaScript to add after component.
-      #      
+      # Returns an array of javascripts to add afters component is rendered.
+      #
       def after
         @after
       end
       
-      # Return the raw JavaScript to add after component.
-      #      
+      # Returns the javascript to add after component is rendered.
+      #   
       def after_js
         &quot;\n\n&quot; + @after.uniq.compact.join(&quot;\n\n&quot;)
       end</diff>
      <filename>lib/view/helpers/ext/component.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,15 +1,17 @@
 module Lipsiadmin
   module Ext
-    # Ext configuration of used by components
+    # Ext configuration used by components
     # 
     #   Generates: { name: 'name', handler: function(){ alert('Hello World') } }
     #
     class Configuration &lt; Hash
       
-      def initialize(hash)
+      def initialize(hash)#:nodoc:
         hash.each { |k,v| self[k] = v }
       end
       
+      # Returns the configuration as a string.
+      # Optionally you can specify the indentation spaces.
       def to_s(indent=1)
         i = (&quot;  &quot;*indent)
         s = self.size &gt; 0 ? &quot;\n&quot; : &quot;  &quot;</diff>
      <filename>lib/view/helpers/ext/configuration.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,26 @@
 module Lipsiadmin
   module Ext
-    
-    # Generate a new Ext.grid.GridPanel 
+    # Generate a full customizable Ext.GridPanel
+    #
+    # Examples:
+    #
+    #   page.grid do |grid|
+    #     grid.id &quot;grid-posts&quot;
+    #     grid.title &quot;List all Post&quot;
+    #     grid.base_path &quot;/backend/posts&quot;
+    #     grid.forgery_protection_token request_forgery_protection_token
+    #     grid.authenticity_token form_authenticity_token
+    #     grid.tbar  :default
+    #     grid.store do |store|
+    #       store.url &quot;/backend/posts.json&quot;
+    #       store.fields @column_store.store_fields
+    #     end
+    #     grid.columns do |columns|
+    #       columns.fields @column_store.column_fields
+    #     end
+    #     grid.bbar  :store =&gt; grid.get_store, :pageSize =&gt; params[:limit]
+    #   end
+    # 
     class Grid &lt; Component
       def initialize(options={}, &amp;block)#:nodoc:
         # Call Super Class for initialize configuration
@@ -18,6 +37,17 @@ module Lipsiadmin
         view                  :default                      if  config[:view].blank?
       end
       
+      # Define the selection model of this grid.
+      # You can pass: 
+      #   
+      # * :checkbox
+      # * :default (alias for checkbox)
+      # * :row
+      # 
+      # It generate some like:
+      # 
+      #   new Ext.grid.CheckboxSelectionModel()
+      # 
       def sm(value)
         case value
         when :checkbox || :default
@@ -29,14 +59,17 @@ module Lipsiadmin
         end
       end
       
+      # Define the title of the grid
       def title(title)
         before &lt;&lt; &quot;Backend.app.setTitle(#{title.to_json});&quot;
       end
       
+      # Assign plugins for the current grid
       def plugins(plugins)
         config[:plugins] = plugins
       end
-
+      
+      # Add a single plugin to the grid plugins
       def add_plugin(plugins)
         config[:plugins] &lt;&lt; plugins
       end</diff>
      <filename>lib/view/helpers/ext/grid.rb</filename>
    </modified>
    <modified>
      <diff>@@ -13,7 +13,7 @@ module Lipsiadmin
       # Module containing the methods useful for ext/prototype
       module ExtHelper
       
-        def self.included(base)
+        def self.included(base)#:nodoc:
           base.class_eval do
             alias_method_chain :to_s, :refactoring
           end
@@ -104,85 +104,27 @@ module Lipsiadmin
           end
         end
       
-        # Generate a full customizable Ext.Grid
+        # Generate a full customizable Ext.GridPanel
         #
         # Examples:
         #
         #   page.grid do |grid|
-        #
-        #     #Some standard config
-        #     grid.title &quot;List of all Account&quot;
-        #     grid.selection :checkbox
-        #
-        #     # TopBar &amp; Buttons
-        #     grid.ttbar do |bar|
-        #       bar.add &quot;Add&quot;,  :handler =&gt; grid.l(&quot;Backend.app.loadHtml('/backend/accounts/new')&quot;), :icon =&gt; &quot;...&quot;, :other =&gt; &quot;...&quot;
-        #       bar.add &quot;Edit&quot;, :handler =&gt; grid.l(&quot;Backend.app.loadHtml('/backend/accounts/'+accounts_grid.getSelected().id+'/edit')&quot;), :other =&gt; &quot;...&quot;
-        #       bar.add &quot;Print&quot; do |submenu|
-        #         submenu.add &quot;Print Invoice&quot;, :foo =&gt; &quot;...&quot;
-        #         submenu.add &quot;Print Account&quot;, :bar =&gt; &quot;...&quot;
-        #       end
-        #     end
-        #
-        #     or simply:
-        #
-        #     grid.ttbar :default do |ttbar|
-        #       ttbar.path &quot;/backend/accounts&quot;
-        #       ttbar.forgery_protection_token request_forgery_protection_token
-        #       ttbar.authenticity_token form_authenticity_token
-        #     end      
-        #   
-        #     # Columns
-        #     grid.columns do |col|
-        #       col.add &quot;Name&quot;,          &quot;accounts.name&quot;,          :searchable =&gt; false,  :sortable =&gt; true
-        #       col.add &quot;Category Name&quot;, &quot;accounts.category.name&quot;, :sortable =&gt; :false
-        #       col.add &quot;Created At&quot;,    &quot;accounts.created_at&quot;,    :type =&gt; &quot;date&quot;, :format =&gt; &quot;c&quot;, :renderer =&gt; Ext.call(&quot;Ext.Util.DateRenderer&quot;, &quot;m/d/y&quot;)
+        #     grid.id &quot;grid-posts&quot;
+        #     grid.title &quot;List all Post&quot;
+        #     grid.base_path &quot;/backend/posts&quot;
+        #     grid.forgery_protection_token request_forgery_protection_token
+        #     grid.authenticity_token form_authenticity_token
+        #     grid.tbar  :default
+        #     grid.store do |store|
+        #       store.url &quot;/backend/posts.json&quot;
+        #       store.fields @column_store.store_fields
         #     end
-        #   
-        #     # alternative you can simply do 
-        #     # 
-        #     # grid.columns :defaults, Account 
-        #     # and they add all columns of Account Model.
-        #     # 
-        #     # or
-        #     #
-        #     # grid.coumns :default do |col|
-        #     #   col.add &quot;Projects&quot;,      &quot;accounts.projects.collect(&amp;:name).join(&quot;, &quot;)&quot;, :searchable =&gt; false,  :sortable =&gt; true  
-        #     #   col.add &quot;Category Name&quot;, &quot;accounts.category.name&quot;, :sortable =&gt; :false
-        #     #   ...
-        #     # end
-        #     # In this way add other than accounts columns &quot;Projects&quot; and &quot;Category Name&quot;!    
-        #   
-        #     # Extra Examples
-        #     # 
-        #     # Render:
-        #     # 
-        #     # grid.on('dblclick', function(){
-        #     #   Ext.Msg.alert('Title', 'Content');
-        #     # });
-        #     #
-        #
-        #     grid.on &quot;dblclick&quot; do
-        #       Ext.call(&quot;Ext.Msg.alert&quot;, &quot;Title&quot;, &quot;Content&quot;)
-        #     end
-        #   
-        #     grid.on &quot;dblclick&quot; do 
-        #       Ext.call &quot;Ext.Msg.alert&quot;, &quot;Selected the row&quot;, &quot;with name: #{Ext.grid.selected.name}&quot;
-        #     end
-        #   
-        #     grid.columns.first.on(&quot;dblclick&quot;) do
-        #       Ext.call(&quot;Ext.Msg.alert&quot;, &quot;Some&quot;, &quot;One&quot;)
+        #     grid.columns do |columns|
+        #       columns.fields @column_store.column_fields
         #     end
-        #   
-        #     button = grid.buttons.get_by(:title, &quot;Add&quot;)
-        #     button = grid.buttons.get_by(:id, &quot;add&quot;)
-        #     col    = grid.columns.get_by(:id, &quot;category_name&quot;)
-        #   
-        #     button.on(&quot;dblclick&quot;, Ext.fn(&quot;Ext.Msg.alert&quot;, &quot;Hello World&quot;))
-        #   
-        #     grid.append &quot;/backend/accounts/grid_fn.js&quot; # or :controller =&gt; :accounts, :action =&gt; :grid_fn, :format =&gt; :js
+        #     grid.bbar  :store =&gt; grid.get_store, :pageSize =&gt; params[:limit]
         #   end
-        #
+        # 
         def grid(&amp;block)
           self &lt;&lt; Lipsiadmin::Ext::Grid.new(&amp;block)
         end</diff>
      <filename>lib/view/helpers/ext_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,5 @@
 page.grid do |grid|
   grid.id &quot;grid-accounts&quot;
-  grid.var :finocchio
   grid.title &quot;Elenco Accounts&quot;
   grid.base_path &quot;/backend/accounts&quot;
   grid.forgery_protection_token request_forgery_protection_token</diff>
      <filename>lipsiadmin_generators/backend/templates/views/backend/accounts/index.rjs</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,5 @@
 page.grid do |grid|
   grid.id &quot;grid-&lt;%= plural_name %&gt;&quot;
-  grid.var :finocchio
   grid.title &quot;List all &lt;%= model_instance.class.human_name %&gt;&quot;
   grid.base_path &quot;/backend/&lt;%= plural_name %&gt;&quot;
   grid.forgery_protection_token request_forgery_protection_token</diff>
      <filename>lipsiadmin_generators/backend_page/templates/view_index.rjs.erb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>lib/view/helpers/country_select_helper.rb</filename>
    </removed>
    <removed>
      <filename>lib/view/helpers/date_helper.rb</filename>
    </removed>
    <removed>
      <filename>lib/view/helpers/tag_helper.rb</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>053e263e50529bfd6b085b036f6c755fabc5d11e</id>
    </parent>
  </parents>
  <author>
    <name>Davide D'Agostino</name>
    <email>DAddYE@DAddYE.local</email>
  </author>
  <url>http://github.com/Lipsiasoft/lipsiadmin/commit/56ef3d85d9652cee95266421c4f4103c9d8f5602</url>
  <id>56ef3d85d9652cee95266421c4f4103c9d8f5602</id>
  <committed-date>2009-02-25T07:47:03-08:00</committed-date>
  <authored-date>2009-02-25T07:47:03-08:00</authored-date>
  <message>Improved documentation now is online here http://api.lipsiasoft.com
Refactored text_field, text_area, password_field helpers
Refactored country_select helper
Refactored ext_date_select, ext_datetime_select helpers</message>
  <tree>42a38a274026c21606a748290d078b09e9a21d55</tree>
  <committer>
    <name>Davide D'Agostino</name>
    <email>DAddYE@DAddYE.local</email>
  </committer>
</commit>
