Lolita

Great Rails CMS, that turns your business logic into good-looking, fully functional workspace. Works with Rails 3.2, 4.0, 4.1

Build Status Code Climate

How it looks

Lolita new document

Installation

First add Lolita gem to your Gemfile

gem 'lolita', '~> 4.0.1'

Then go to your rails project and

rails g lolita:install

That will create initializer and copy all assets. Also it will call install on all added modules to lolita. So if you in Gemfile have following

gem "lolita"
gem "lolita-file-upload"

It will also call lolita_file_upload:install.

Usage

To make your model use Lolita do like this

class Post < ActiveRecord::Base
  include Lolita::Configuration
  lolita
end

Then in routes.rb file make resources accessable for lolita with

lolita_for :posts

This will make routes like /lolita/posts /lolita/posts/1/edit /lolita/posts/new or open /lolita and it will redirect to first available resource list view.

For more detailed usage read Usage at wiki.

Add authorization to Lolita

Easiest way to add authentication is with Devise. First install Devise as gem, than add it to your project. Make Devise model, lets say, User. After that add these lines in /config/initializers/lolita.rb

config.user_classes << User
config.authentication = :authenticate_user!

This will make before each Lolita requests call before filter, that than will call authenticate_user! that is Devise method for authenticating user. Without it Lolita will be acessable for everyone. You can also add any other authentication method like

config.authentication = :authenticate_admin

And than put this method for common use in ApplicationController or in some other place that is accessable to all controllers.

Using hooks

Lolita define hooks for RestController and for components.

RestController hooks

There are two kind of hooks for all actions - before_[action name] and after_[action name]. Define callbacks for those hooks outside of controller. This will call User#log_action each time when #destroy action is requested.

Lolita::RestController.before_destroy do
  User.log_action("Going to delete #{params[:id]}")
end

Also you can define callbacks in your controllers that extend Lolita::RestController. This will call #set_default_params each time #new action is requested.

class PostController < Lolita::RestController
  before_new :set_default_params

  private

  def set_default_params
    params[:post][:title]="-Your title goes here-"
  end
end

Component hooks

Components have three hooks - before, after and around. Component hooks are different from controller hooks with names. Each component has it's own name, that is used to call component, like

render_component :"lolita/configuration/list/display"
#same as
render_component :"lolita/configuration/list", :display

and this name is used to add callback for component. As components is not related to specific class, then there are only one way to define callback for them.

Lolita::Hooks.component(:"/lolita/configuration/list/display").before do
  "<div>My Custom text</div>"
end

That what are inside of blocks depends on place where you define callback if it is in .rb file, than you should put HTML in quotes, if in .erb and similar files then there is no need for that. Also blocks with Ruby code only return last line, so you should probably define HTML as shown in previous example. For around callback if you pass block, then original content will be replaced with that, but if you want to let original content inside of your block content than it is done like this with #let_content method.

Lolita::Hooks.component(:"/lolita/configuration/list/display").around do
  "<div style='color:red'>#{let_content}</div>"
end

Tests

To run all specs run rake, it will run all specs for all supported ORM's.

$ rake

License

Lolita is under MIT license. See LICENSE.txt