Start now

It provides scaffolding generators and helper functions to quickly create a lightweight CRUD interface for your data, along with a pre-rolled user authentication system.
Casein is designed to be completely decoupled from the front-end. Therefore it may be added to new or existing Rails projects, or even used as a standalone CMS to drive platforms built on other technologies.
→ Casein on GitHub
(Download or fork the source, and browse documentation)
Generate a modern and minimal CRUD interface for your data using the supplied Rails generators.
The generated views and controller logic can be infinitely customised as required. Casein comes with a range of helper functions to get you started.
User authentication and basic management to support developers and clients is pre-rolled and ready to go.
While the central mission of Casein is to provide developers with a basic CMS platform and the freedom to customise as required, we do have ideas of future features that may find their way into the project core.
If you're using Casein and are working to add additional functionality then let us know.
In the meantime, this is our current roadmap:
Here are some example websites and applications running on Casein. Do you have a project built with Casein? Let us know and we will add it to the list.

Multi-lingual website with many different functionalities implemented. Developed by Spoiled Milk.
→ www.popscan.com

Web application in Flash for an art-promoting organization. Developed by Spoiled Milk.
→ www.sound-development.com

Website for Swiss music sensation with various media management. Developed by Spoiled Milk.
→ www.stressmusic.com

Portfolio website for sound designer Martin Straka. Developed by Pixelate.
→ www.martinstraka.de

A subscription-based app delivering stories, films, interviews and comics is driven by a Casein server platform. Developed by Russell Quinn.
→ iphone.mcsweeneys.net

Online hall of fame backend for Mr. Bounce iPhone game managed with Casein. Developed by Pixelate.
→ www.pixelate.de/games/mr-bounce-iphone/
yield statement. Whenever a yieldis executed, it invokes the code in the block. When the block exits, control picks back up immediately after the yield.[Programming-language buffs will be pleased to know that the keyword yield was chosen to echo the yield function in Liskov's language CLU, a language that is over 20 years old and yet contains features that still haven't been widely exploited by the CLU-less.] Let's start with a trivial example.
def threeTimes
yield
yield
yield
end
threeTimes { puts "Hello" }
|
Hello Hello Hello |
threeTimes. Within this method, yield is called three times in a row. Each time, it invokes the code in the block, and a cheery greeting is printed. What makes blocks interesting, however, is that you can pass parameters to them and receive values back from them.