Module: RSence::Plugins::PluginBase

Included in:
Plugin__, Servlet__
Defined in:
lib/rsence/plugins/plugin_base.rb

Overview

This module contains common functionality included in the Plugin, GUIPlugin and the Servlet base classes.

Extension hooks for server events

These methods are provided as the basic server event hooks:

  • #init – Use instead of initialize

  • #open – Extend to open objects

  • #flush – Extend to write the state and to flush buffers

  • #close – Extend to close objects

Utility methods

These are general utility methods not intended to be extended.

See also

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(sym, *args, &block) ⇒ Object

When a method is missing, tries a call via pluginmanager. (Eliminates plugins.plugin_name.method_name calls -> plugin_name.method_name)



40
41
42
# File 'lib/rsence/plugins/plugin_base.rb', line 40

def method_missing( sym, *args, &block )
  @plugins.method_missing( sym, *args, &block )
end

Instance Method Details

#bundle_path(path = false, prefix = false, suffix = false) ⇒ String

Path utility

Makes a full, absolute path using the plugin bundle as the default path when a relative path is given. Returns just the bundle’s local path, if no parameters given.

Parameters:

  • path (String, false) (defaults to: false)

    The path is relative to the bundle path by default, unless it starts with ‘/’ or ‘..’.

  • prefix (String, false) (defaults to: false)

    Alternative root path if path is specified as a relative path.

  • suffix (String, false) (defaults to: false)

    The file suffix, like the the extension.

Returns:

  • (String)

    Full absolute path.



160
161
162
163
164
165
166
167
168
169
170
# File 'lib/rsence/plugins/plugin_base.rb', line 160

def bundle_path( path=false, prefix=false, suffix=false )
  return @path if not path
  if suffix
    path = "#{path}#{suffix}" unless path.end_with?(suffix)
  end
  if prefix
    path = File.join( prefix, path )
  end
  path = File.expand_path( path, @path )
  return path
end

#closenil

Extend to close objects like streams and database connections.

It is called by the PluginManager when the plugin is about to be destructed, so don’t expect any events after it has been called.

Returns:

  • (nil)


77
78
# File 'lib/rsence/plugins/plugin_base.rb', line 77

def close
end

#file_read(path) ⇒ false, String

File reader utility

Reads the contents of the file given in the path.

Parameters:

  • path (String)

    The path is relative to the bundle path by default, unless it starts with ‘/’ or ‘..’; it’s simply processed by #bundle_path before reading the file.

Returns:

  • (false)

    If there is no file, returns false

  • (String)

    The contents of the file.



88
89
90
91
92
# File 'lib/rsence/plugins/plugin_base.rb', line 88

def file_read( path )
  path = bundle_path( path )
  return false unless File.exist?( path )
  return File.read( path )
end

#file_write(path, data) ⇒ true, false Also known as: file_save

Flie writer utility.

Writes the contents of the data into the file given in the path.

Parameters:

  • path (String)

    The path is relative to the bundle path by default, unless it starts with ‘/’ or ‘..’; it’s simply processed by #bundle_path before writing the file.

  • data (#to_s)

    The data to write.

Returns:

  • (true, false)

    A success code of the operation (false for failure and true for success).



128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/rsence/plugins/plugin_base.rb', line 128

def file_write( path, data )
  path = bundle_path( path )
  begin
    datafile = File.open( path, 'wb' )
    datafile.write( data.to_s )
    datafile.close
    return true
  rescue => e
    warn "file_write error for path #{path} #{e}"
    return false
  end
end

#flushnil

Extend to save your plugin state, write or flush any data that needs to be stored.

It is called by the PluginManager before #close, but doesn’t always mean a close event is imminent.

Returns:

  • (nil)


69
70
# File 'lib/rsence/plugins/plugin_base.rb', line 69

def flush
end

#httime(time = false) ⇒ String

Utility for returning the time in the HTTP RFC specification format, like:

Sun, 04 Jul 2010 06:20:53 EEST

Parameters:

  • time (Time, false) (defaults to: false)

    An Time object to format. Uses the current date/time by default.

Returns:

  • (String)

    The date/time formatted according to the HTTP RFC specification.



179
180
181
182
# File 'lib/rsence/plugins/plugin_base.rb', line 179

def httime(time=false)
  time = Time.new unless time 
  return time.gmtime.strftime('%a, %d %b %Y %H:%M:%S %Z')
end

#initnil

Extend this method do any initial configuration instead of extending the initialize constructor, which should never be done in plugins.

It is called by the PluginManager when the plugin has been constructed and registered.

Returns:

  • (nil)


53
54
# File 'lib/rsence/plugins/plugin_base.rb', line 53

def init
end

#opennil

Extend to open objects like streams and database connections.

It is called by the PluginManager after the #init method, when everything is constructed after all plugins are loaded.

Returns:

  • (nil)


61
62
# File 'lib/rsence/plugins/plugin_base.rb', line 61

def open
end

#yaml_read(path) ⇒ false, Object

YAML reader utility

Reads the contents of the YAML file given in the path and returns as a parsed structure of the contents of the file.

Parameters:

  • path (String)

    The path is relative to the bundle path by default, unless it starts with ‘/’ or ‘..’; it’s simply processed by #bundle_path before reading the file.

Returns:

  • (false)

    If the is no file, returns false

  • (Object)

    Any valid structure defined by the YAML file, parsed to a Ruby object.



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/rsence/plugins/plugin_base.rb', line 102

def yaml_read( path )
  file_data = file_read( path )
  if not file_data
    return false
  else
    begin
      return YAML.load( file_data )
    rescue Psych::SyntaxError => e
      warn "Syntax Error in YAML file: #{path} (#{e.message})"
      return false
    rescue => e
      warn "An exception occurred while parsing YAML file: #{path}"
      warn e.message
      warn "  #{e.backtrace.join("\n  ")}"
      return false
    end
  end
end

#yaml_write(path, data) ⇒ Object

Yaml writer utility.

Wrapper for #file_write Converts data to yaml and then calls file_write with the result.



146
147
148
# File 'lib/rsence/plugins/plugin_base.rb', line 146

def yaml_write( path, data )
  file_write( path, data.to_yaml )
end