Class: Kaiser::Plugin

Inherits:
Object
  • Object
show all
Defined in:
lib/kaiser/plugin.rb

Overview

To implement a Kaiser plugin you must inherit from this class. For example,

class MyPlugin < Plugin
  def on_init
    puts 'My plugin is loaded!'
  end
end

Then in your Kasierfile

plugin :my_plugin

Plugins has access the Kaiserfile DSL. For example,

class Ruby < Plugin
  def on_init
    attach_mount 'Gemfile', '/usr/app/Gemfile'
    attach_mount 'Gemfile.lock', '/usr/app/Gemfile.lock'
  end
end

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(kaiserfile) ⇒ Plugin

Returns a new instance of Plugin.



27
28
29
# File 'lib/kaiser/plugin.rb', line 27

def initialize(kaiserfile)
  @kaiserfile = kaiserfile
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_sym, *arguments, &block) ⇒ Object

rubocop:disable all



58
59
60
# File 'lib/kaiser/plugin.rb', line 58

def method_missing(method_sym, *arguments, &block) # rubocop:disable all
  @kaiserfile.send(method_sym, *arguments, &block)
end

Class Method Details

.all_pluginsObject



50
51
52
# File 'lib/kaiser/plugin.rb', line 50

def self.all_plugins
  @all_plugins ||= {}
end

.inherited(plugin) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/kaiser/plugin.rb', line 35

def self.inherited(plugin)
  super

  puts "INHERITED #{plugin}"

  # underscore class name
  name = plugin.to_s.split('::').last
               .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
               .gsub(/([a-z\d])([A-Z])/, '\1_\2')
               .gsub(/([a-z])(\d)/, '\1_\2')
               .tr('-', '_').downcase

  Plugin.all_plugins[name.to_sym] = plugin
end

.loaded?(name) ⇒ Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/kaiser/plugin.rb', line 31

def self.loaded?(name)
  Plugin.all_plugins.key?(name)
end

Instance Method Details

#on_initObject



54
55
56
# File 'lib/kaiser/plugin.rb', line 54

def on_init
  raise 'Please implement #on_init'
end