Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/drgcms/drg-cms
DRG CMS: Content management system for Ruby, Rails and MongoDB
https://github.com/drgcms/drg-cms
Last synced: about 1 month ago
JSON representation
DRG CMS: Content management system for Ruby, Rails and MongoDB
- Host: GitHub
- URL: https://github.com/drgcms/drg-cms
- Owner: drgcms
- License: mit
- Created: 2015-05-10T18:21:31.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2024-03-24T10:59:22.000Z (9 months ago)
- Last Synced: 2024-08-05T08:07:40.933Z (5 months ago)
- Language: Ruby
- Size: 2.6 MB
- Stars: 6
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: MIT-LICENSE
Awesome Lists containing this project
- Open-Source-Ruby-and-Rails-Apps - drgCMS - Content management system for Ruby, Rails and MongoDB 🔥 ✅ (Happy Exploring 🤘)
README
# drg-cms
[![Gem Version](http://img.shields.io/gem/v/drg_cms.svg)](https://rubygems.org/gems/drg_cms)
[![Gem Downloads](https://img.shields.io/gem/dt/drg_cms.svg)](https://rubygems.org/gems/drg_cms)DRG CMS simplifies the programming of business applications.
Minimal database experience and only basic programming skills are needed
to create a data entry program. You can do it in 6 simple steps.Step 1: Create Model
Step 2: Generate DRG Form
Step 3: Edit Form
Step 4: Define Labels and Help Text
Step 5: Create Controls File (if required)
Step 6: Include in application menuMost of the time, you will end up with two source files.
Model: Model file is a database document definition file written in Ruby
language. Model file holds fields definitions,
index definitions, dependencies, validations, callbacks and transformations
for a database document (record).An example of a typical model file app/models/note.rb
```ruby
class Note
include Mongoid::Document
include Mongoid::Timestampsfield :title, type: String
field :body, type: String
field :time_begin, type: DateTime
field :duration, type: Integer
field :search, type: Stringfield :user_id, type: BSON::ObjectId
index user_id: 1
validates :title, presence: true
validates :time_begin, presence: true
validates :duration, presence: trueend
```Form: DRG Form file is a text file, written in the YAML markup language. It consists
of three main parts.index: Which defines actions performed on database documents or
set of document.
result_set: Defines set of documents, document fields and actions
which can be performed on a document.
form: Defines data entry fields for editing and viewing a single document.Example of form file for Note model app/forms/note.yaml
```yaml
table: noteindex:
filter: search as text_field
actions: standardresult_set:
filter: current_users_documents
actions:
1: editcolumns:
10:
name: title
width: 25%
20:
name: time_started
width: 10%
format: '%d.%m.%Y'
30:
name: durationform:
fields:
10:
name: user_id
type: readonly
eval: dc_name4_id,dc_user,name
default:
eval: 'session[:user_id]'
20:
name: title
type: text_field
size: 50
30:
name: time_started
type: datetime_picker
options:
step: 15
40:
name: duration
type: select
50:
name: body
type: html_field
options: "height: 500"
```Add labels and help text to your project locales files.
```yaml
en:
helpers:
label:
diary:
tabletitle: Diary
choices4_duration: "10 min:10,15 min:15,20 min:20,30 min:30,45 min:45,1 hour:60,1 hour 30 min:90,2 hours:120,2 hours 30 min:150,3 hours:180,4 hours:240,5 hours:300,6 hours:360,7 hours:420,8 hours:480"title: Title
body: Description
time_started: Start time
duration: Duration
search: Search
user_id: Ownerhelp:
diary:
title: Short title
body: Description of event or note
time_started: Time or date when note is created or event started
duration: Duration of event
search: Data used for searching data
user_id: Owner of the note
```
Combination of two source files and localisation data makes application
data entry program. Application data entry program implements all data
entry operations on a database:
Add it into your application menu with this code:
```ruby
dc_link_to('Notes', 'book', { table: 'note' }, target: 'iframe_edit')
```
And when you need advanced program logic, you will implement it in
the control file. Control files code is injected into cmsedit
controller during form load, and provides additional program logic required
by data entry program.
```ruby
######################################################################
# Drgcms controls for Notes application
######################################################################
module NoteControl
######################################################################
# Fill in currently logged user on new record action.
######################################################################
def dc_new_record
@record.user_id = session[:user_id]
@record.time_started = Time.now.localtime
end
###########################################################################
# Allow only current user documents to be displayed
###########################################################################
def current_user_documents
user_filter_options(Note).and(user_id: session[:user_id]).order_by(id: -1)
end
end
```
Visit [gallery](https://www.drgcms.org/gallery) of DRG Forms
usage in production.
## Features
DRG CMS uses Ruby on Rails, one of the most popular frameworks for
building web sites. Ruby on Rails guarantees highest level of application security and huge base of extensions which will help you when your application grows.
DRG CMS uses MongoDB, leading NO-SQL document database, as database
back-end with a help of mongoid gem. Mongoid's flexible document model
defines all document fields, indexes, dependencies, validations in a
single model file with no database migrations required.
DRG CMS has built-in user friendly role based database access system. Administrator
defines roles and roles rights (no access, can read, can edit) as web site policies.
Roles are then assigned to users and policies can be assigned to documents (web pages)
or even parts of a documents.
DRG CMS can coexist with other frameworks which use MongoDB as database
back-end. Use your favorite framework for data presentation and
use DRG Forms for rapid development of data entry forms.
DRG CMS can coexist with other databases and Rails controllers. I can
highly recommend using DRG CMS in heterogeneous database Intranet
projects. For the last few years, DRG has been used for development of
an in-house Intranet portal which uses MongoDB as primary database and
connects frequently to Oracle and MS-SQL databases.
## Installation
Go and [jumpstart](https://github.com/drgcms/drg-portal-jumpstart)
internal portal application with DRG CMS in just few minutes.
Project Tracking
----------------
* [Visit DRG CMS web site](http://www.drgcms.org)
Compatibility
-------------
DRG CMS is being actively developed since 2012 and has been live tested in production
since beginning. It runs against latest technology Ruby (3.1), Rails (7.0)
and MongoDB (5.0) and had so far little or no problems advancing to latest versions
of required programs.
Documentation
-------------
Please see the DRG CMS website for up-to-date documentation:
[www.drgcms.org](http://www.drgcms.org)
License (MIT LICENCE)
---------------------
Copyright (c) 2012-2022 Damjan Rems
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Credits
-------
Damjan Rems: damjan dot rems at gmail dot com