# Locomotive Plugins [![Build Status](https://secure.travis-ci.org/colibri-software/locomotive_plugins.png)](https://secure.travis-ci.org/colibri-software/locomotive_plugins.png) Create plugins for [Locomotive CMS](http://locomotivecms.com/). ## Installation To create a Locomotive Plugin, create a ruby gem and then install this gem: gem install locomotive_plugins Alternatively if you're using Bundler, add the following line to your Gemfile: gem 'locomotive_plugins' and run `bundle install`. To install the plugin in LocomotiveCMS, simply [create a LocomotiveCMS app](http://doc.locomotivecms.com/installation/getting_started) and add your plugin gem to the app's Gemfile. ## Usage To create a plugin, create a class which includes the `Locomotive::Plugin` module and register it as a plugin: class BasicAuth include Locomotive::Plugin end LocomotivePlugins.register_plugin(BasicAuth) The plugin will automatically be registered under an ID which is its underscored name, in this case, `basic_auth`. To register it under a different ID, simply supply the ID in the `register_plugin` call: LocomotivePlugins::register_plugin(BasicAuth, 'auth') ### Initialization To initialize a plugin object, do not override the `initialize` method because this method is defined by the `Locomotive::Plugin` module and used by Locomotive. Instead, override the `initialize_plugin` method. class MyPlugin include Locomotive::Plugin def initialize_plugin # Custom initialization code end end ### Before filters A plugin may add a before filter which is run before every page load on the website being hosted in Locomotive CMS. The before filter has access to the controller which is being invoked, and a config variable which is set within the Locomotive UI. class BasicAuth include Locomotive::Plugin before_filter :authenticate def authenticate if self.config[:use_basic_auth] self.controller.authenticate_or_request_with_http_basic do |username, password| username = USER_ID && password == PASSWORD end end end end ### Liquid #### Drops A plugin can add a liquid drop which can be accessed from page templates in LocomotiveCMS. To do so, override the `to_liquid` method. Plugin code: class BasicAuth include Locomotive::Plugin def to_liquid { :userid => self.get_authenticated_user_id } end end Liquid code:
Your User ID is: {{ plugins.basic_auth.userid }}
This liquid code assumes that the plugin has been registered under the default ID as described above. #### Filters A plugin can add liquid filters: module Filters def add_http(input) if input.start_with?('http://') input else "http://#{input}" end end end class MyPlugin include Locomotive::Plugin def self.liquid_filters Filters end end Locomotive will automatically prefix the filter with the plugin ID in the liquid code: Click here! #### Tags A plugin may also supply custom liquid tags. The custom tag class may override the `render_disabled` method to specify what should be rendered if the plugin is not enabled. By default, this will be the empty string. For example: # Note that Liquid::Block is a subclass of Liquid::Tag class Paragraph < Liquid::Block def render(context) "#{render_all(@nodelist, context)}
" end def render_disabled(context) render_all(@nodelist, context) end end class Newline < Liquid::Tag def render(context) "Some Text
Some TextMy Hint