Sunrise CMS

Open source mini content management system for programmers.

Setup

For rails 4.x.x:

  gem "sunrise-cms", :require => "sunrise"

For rails 3.x.x:

  gem "sunrise-cms", "~> 0.7.x" :require => "sunrise"

Instructions

ActiveRecord

$> rails g devise:install
$> rails g sunrise:install --orm=active_record

Copy db migrations files:

$> rake sunrise:install:migrations
$> rake page_parts_engine:install:migrations
$> rake meta_manager_engine:install:migrations
$> rails g public_activity:migration

Mongoid

$> rails g sunrise:install --orm=mongoid

Usage

Just create class:

class SunriseProduct < Sunrise::AbstractModel
  self.resource_name = "Product"

  association :structure

  after_sort :clear_cache

  index :thumbs do
    scope { Product.includes(:picture) }
    preview lambda { |product| product.picture.try(:url, :thumb) }

    field :title
    field :price
    field :total_stock
  end

  export do
    scope { Product.includes(:picture).recently.with_state(:finished) }

    field :id
    field :product_title
    field :size
    field :started_at
    field :finished_at
    field :unique_accounts_count
    field :total_points
  end

  show do
    field :title
    field :price
    field :total_stock
    field :sort_order
    field :is_visible
  end

  form do
    field :title
    field :price
    field :total_stock
    field :notes

    group :sidebar, :holder => :sidebar do
      field :sale_limit_id, :collection => lambda { SaleLimit.all }, :include_blank => false
      field :sort_order
      field :is_visible, :boolean => true
    end

    group :bottom, :holder => :bottom do
      nested_attributes :variants, :multiply => true do
        field :size
        field :total_stock, :html => { :style => 'width:100%;clear:both;' }
        field :item_model_id, :collection => lambda { ItemModel.all }, :include_blank => false
      end

      nested_attributes :project_fields, multiply: true, sort: true do
        field :name
        field :value
      end

      field :picture, :as => :uploader
    end
  end

  protected

    def clear_cache
      Rails.cache.clear
    end
end

Assets uploading detect ccurrent user by request.env['warden'].user. To overwrite it use:

class Asset
  def uploader_user(request)
    request.env['warden'].user(:account) || request.env['warden'].user(:user)
  end
end

Export data

XML, JSON, CSV

  GET /manage/users/export.xml
  GET /manage/users/export.csv

JSON

  GET /manage/users/export.json

For more info look at jbuilder https://rubygems.org/gems/jbuilder.

Excel

  gem "ruby2xlsx", "~> 0.0.1"

  GET /manage/users/export.xlsx

Strong parameters

Now in sunrise file you can perform attributes check. By default permited_attributes allow edit all attributes.

class SunrisePost < Sunrise::AbstractModel
  self.resource_name = "Post"
  edit do
    # Default value
    # permited_attributes :all 

    # Pre user check
    permited_attributes lambda { |user| 
      user.admin? ? :all : [:title, :content] 
    }
  end
end

Include additional js codes

For example your want to include ckeditor editor. In "Gemfile" include gem:

gem "ckeditor"

Create file "app/assets/javascripts/sunrise/plugins.js":

//= require ckeditor/init

Layout for devise login page

# config/application.rb
config.to_prepare do
  Devise::SessionsController.layout "sunrise/devise"
  Devise::PasswordsController.layout "sunrise/devise"
  Devise::ConfirmationsController.layout "sunrise/devise"
end

Copyright (c) 2014 Fodojo, released under the MIT license