Writing Plugins

When writing plugins, it is very important to be protected from unauthorized access. If you are using Magento 2, you can do magento 2 security updates in one place by true professionals. We advise you to update the security settings first, and then proceed to the tutorial below.

Lookup plugins are loaded as jerakia/lookup/plugin/pluginname from the ruby load path, meaning they can be shipped as a rubygem or placed under jerakia/lookup/plugin relative to the plugindir option in the configuration file. The boilerplate template for a plugin is formed by creating a module with a name corresponding to your plugin name in the Jerakia::Lookup::Plugin class… in reality that looks a lot simpler than it sounds

class Jerakia::Lookup::Plugin
  module Mystuff

We can now define methods inside this plugin that will be exposed to our lookups in the plugin.mystuff namespace. For this example we are going to generate a dynamic hierarchy based on a top level variable role. The variable contains a colon delimited string, and starting with the deepest level construct a hierarchy to the top. For example, if the role variable is set to web::frontend::application_foo we want to generate a search hierarchy of;


To do this, we will write a method in our plugin class called role_hierarchy and then use it in our lookup. First, let’s add the method;

class Jerakia::Lookup::Plugin
  module Mystuff

    def role_hierarchy
      role = scope[:role].split(/::/)
      tree = []
      until role.empty?
        tree << "role/#{role.join('/')}}"

We can now use this within our module by loading the mystuff plugin and calling our method as plugins.mystuff.role_hierarchy. Here is the final lookup policy using our new plugin;

lookup :default, :use => :mystuff do
  datasource :file, {
    format      => :yaml
    docroot     => "/var/lib/jerakia",
    searchpath  => [