= Tandem CMS Tandme is a content management system (CMS) for Rails 3.1+. We felt like it was needed because too many of the CMS options for Rails are either unpolished—something we wouldn't want to put in front of our clients or bloated and heavy, causing many headaches when trying to integrate into existing applications. Tandem was designed to be as simple as can be to integrate into a larger application. It's a mountable engine that allows you to easily specify how it fits into a larger application and doesn't bring any opinions about how that application is architected. The simplicity doesn't stop there, though. It also has the end user in mind. Through in-place editing, users simply navigate their site like they normally would. If they want to edit something, they simply click on it, edit it, and go on their merry way. It's early in the life of Tandem and we have lots in store, but it's something we find useful and hope you will too. == Getting Started / Installation Has it ever been easier to check off that "CMS functionality" feature story? This assumes you have a rails app already. If you don't, rails new tanem_app 1. Add the tandem gem to your Gemfile gem 'tandem' 2. Install the gem bundle install 3. Generate the tandem files rails g tandem 4. Migrate rake db:migrate 5. Start your app and you're ready to go. rails s == Upgrading Upgrade just like you would any other engine. 1. Update the gem version to the latest version in your gemfile if you specify a version. gem 'tandem', '~> 0.2' 2. Install the updated gem bundle update tandem 3. Copy any new migrations from tandem rake tandem:install:migrations 4. Migrate rake db:migrate 5. Enjoy the new tandem goodness. rails s == Usage By default, Tandem uses your application layout and Tandem's pages/show template to render pages. Both of these can be customized for an individual page. === Custom pages With Tandem, you can easily insert editable content into your page by using the simple helpers, tandem_text_tag and tandem_image_tag. Simply insert those into your templates where you want the user to be able to edit content and Tandem will take care of the rest. The tandem_text_tag defaults to a basic text area. If you'd like to offer a WYSIWYG editor, you can set the editor option to :wysiwyg: <%= tandem_text_tag(:sidebar_text, editor: :wysiwyg) %> === Navigation Tandem comes with a helper method to add a navigation menu. It's not included in the default views, since it will most likely be used in your app's application layout. Adding it is easy, though. <%= tandem_navigation_tag(@page) %> By default, Tandem will produce a nested tree of all your pages. If you just want the top level: <%= tandem_navigation_tag(@page, Tandem::Page.top_level) %> If you want to show just the subnavication for a given page: <%= tandem_navigation_tag(@page, @page.children) %> You can also create submenus easily by passing in a custom collection of pages, e.g. <%= tandem_navigation_tag(@page, Tandem::Page.find_by_title('Services').children) %> == Authentication Now, most apps don't simply want to let anyone edit content. Tandem allows you to easily specify how it should control access. Inside config/initializers/tandem.rb, you can define procs for Tandem to use for authentication and authorization. 1. Tell Tandem how to find the current_user Tandem::Configuration.current_user_proc { |request| User.find(request.session['user_id']) unless request.session['user_id'].blank? } 2. Define what each user can do using CanCan Tandem::Configuration.user_abilities_proc { |user| user ||= User.new # guest user (not logged in) if user.admin? can :manage, :all else can :read, :all end } == Paperclip configuration Tandem uses paperclip for file uploads. If your application needs to modify its settings, simply set the Tandem::Configuration.paperclip_options in /config/initializers/tandem.rb For example, to store images on S3, add the aws-sdk gem to your Gemfile and set paperclip_options to: Tandem::Configuration.paperclip_options = { :styles => { :thumb => "150x150>" }, :storage => :s3, :bucket => Proc.new { Rails.application.engine_name.gsub(/application$/, Rails.env) }, :s3_credentials => { :access_key_id => ENV['S3_KEY'], :secret_access_key => ENV['S3_SECRET'] } } == Other Options By default, Tandem mounts to the root of your application. We're not trying to be pushy, it's just what we find ourselves doing 90% of the time. To change this, simply modify your config/routes.rb to something like: mount Tandem::Engine => "/tandem" To change the url that you wish to serve unauthorized access errors supply a value to: Tandem::Configuration.unauthorized_path By default, the tandem generator copies all tandem layouts to app/views/layouts/tandem. If you wish to move your layouts to another location, supply a value to: Tandem::Configuration.layouts_dir By default, the uploaded images directly in the asset pipeline at :rails_root/public. To change this location, supply a value to: Tandem::Configuration.uploaded_images_dir By default, the uploaded images are stored and accessed via the default "paperclip" conventions (see paperclip gem). To change this behavior, supply a value to: Tandem::Configuration.uploaded_images_template === Styling Every new Tandem default page created has pre-defined classes setup to use either Bootstrap or 960.gs. Here's a preview of what the html looks like: .container_12.row.clearfix p#notice = notice .grid_12.span12 = tandem_image_tag(@page, :default_image) .grid_7.span7 = tandem_text_tag(@page, :tandem_text_block) .grid_5.span5 = tandem_text_tag(@page, :tandem_sidebar) If either of those grid systems are being used those styles will pull in accordingly. == License Tandem is released under the MIT license: * http://www.opensource.org/licenses/MIT