Sunrise CMS
Open source mini content management system for programmers.
Setup
For rails 7.x.x:
gem 'sunrise-cms', '~> 2.0', require: 'sunrise'
For rails 5.x.x:
gem 'sunrise-cms', '~> 1.1.0', require: 'sunrise'
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 do |form, record|
form.input :notes, as: :text, id: record.id
end
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
private
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"
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) 2025 Fodojo, released under the MIT license