class Nucleon::Plugin::Base
Public Class Methods
build_info(namespace, plugin_type, data)
click to toggle source
# File lib/core/plugin/base.rb 346 def self.build_info(namespace, plugin_type, data) 347 plugins = [] 348 349 if data.is_a?(Hash) 350 data = [ data ] 351 end 352 353 logger.debug("Building plugin list of #{plugin_type}") 354 355 if data.is_a?(Array) 356 data.each do |info| 357 unless Util::Data.empty?(info) 358 info = translate(info) 359 360 if Util::Data.empty?(info[:provider]) 361 info[:provider] = Nucleon.type_default(namespace, plugin_type) 362 end 363 364 plugins << info 365 end 366 end 367 end 368 return plugins 369 end
code()
click to toggle source
# File lib/core/plugin/base.rb 142 def self.code 143 Nucleon.code 144 end
codes(*codes)
click to toggle source
# File lib/core/plugin/base.rb 150 def self.codes(*codes) 151 Nucleon.codes(*codes) 152 end
init_plugin_collection(*external_block_methods)
click to toggle source
# File lib/core/plugin/base.rb 407 def self.init_plugin_collection(*external_block_methods) 408 logger.debug("Initializing plugin collection interface at #{Time.now}") 409 410 include Parallel 411 external_block_exec(*external_block_methods) 412 413 include Mixin::Settings 414 include Mixin::SubConfig 415 416 extend Mixin::Macro::PluginInterface 417 end
new(namespace, plugin_type, provider, options)
click to toggle source
All Plugin
classes should directly or indirectly extend Base
Calls superclass method
Nucleon::Core::new
# File lib/core/plugin/base.rb 12 def initialize(namespace, plugin_type, provider, options) 13 @actor = Nucleon.handle(self) 14 15 config = Util::Data.clean(Config.ensure(options), false) 16 name = Util::Data.ensure_value(config.delete(:plugin_name), config.delete(:name, provider)) 17 18 @quiet = config.delete(:quiet, false) 19 20 set_meta(config.delete(:meta, Config.new)) 21 22 # No logging statements above this line!! 23 super(config.import({ :logger => "#{namespace}->#{plugin_type}->#{plugin_provider}" }), {}, true, false, false) 24 myself.plugin_name = name 25 26 logger.debug("Normalizing #{namespace} #{plugin_type} plugin #{plugin_name}") 27 normalize(false) 28 29 @initialized = true 30 end
register_ids()
click to toggle source
# File lib/core/plugin/base.rb 6 def self.register_ids 7 [ :plugin_name, :name ] 8 end
translate(data)
click to toggle source
# File lib/core/plugin/base.rb 373 def self.translate(data) 374 logger.debug("Translating input data to internal plugin structure") 375 return ( data.is_a?(Hash) ? symbol_map(data) : data ) 376 end
translate_reference(reference, editable = false)
click to toggle source
# File lib/core/plugin/base.rb 380 def self.translate_reference(reference, editable = false) 381 # ex: provider:::name 382 if reference && reference.match(/^\s*([a-zA-Z0-9_-]+)(?::::)?(.*)?\s*$/) 383 provider = $1 384 name = $2 385 386 logger.debug("Translating plugin reference: #{provider} #{name}") 387 388 info = { 389 :provider => provider, 390 :name => name 391 } 392 393 logger.debug("Plugin reference info: #{info.inspect}") 394 return info 395 end 396 nil 397 end
Public Instance Methods
admin_exec(return_result = true, &block)
click to toggle source
# File lib/core/plugin/base.rb 438 def admin_exec(return_result = true, &block) 439 if Nucleon.admin? 440 safe_exec(return_result, &block) 441 else 442 warn("The #{plugin_provider} action must be run as a machine administrator", { :i18n => false }) 443 myself.status = code.access_denied 444 end 445 end
ask(message, options = {})
click to toggle source
# File lib/core/plugin/base.rb 217 def ask(message, options = {}) 218 ui.ask(message, options) 219 end
code()
click to toggle source
# File lib/core/plugin/base.rb 146 def code 147 self.class.code 148 end
codes(*codes)
click to toggle source
# File lib/core/plugin/base.rb 154 def codes(*codes) 155 self.class.codes(*codes) 156 end
error(message, options = {})
click to toggle source
# File lib/core/plugin/base.rb 314 def error(message, options = {}) 315 config = Config.new(options).import({ :operation => :error }) 316 317 unless quiet? 318 message = render_message(message, config) 319 ui.error(message, config.export) 320 end 321 message 322 end
extended_config(type, options = {})
click to toggle source
# File lib/core/plugin/base.rb 190 def extended_config(type, options = {}) 191 config = Nucleon.config(type, Config.ensure(options).import({ :plugin => myself })) 192 config.delete(:plugin) 193 config 194 end
extension(hook, options = {}, &code)
click to toggle source
# File lib/core/plugin/base.rb 184 def extension(hook, options = {}, &code) 185 Nucleon.exec(hook_method(hook), Config.ensure(options).import({ :plugin => myself }), &code) 186 end
extension_check(hook, options = {})
click to toggle source
# File lib/core/plugin/base.rb 198 def extension_check(hook, options = {}) 199 Nucleon.check(hook_method(hook), Config.ensure(options).import({ :plugin => myself })) 200 end
extension_collect(hook, options = {})
click to toggle source
# File lib/core/plugin/base.rb 210 def extension_collect(hook, options = {}) 211 Nucleon.collect(hook_method(hook), Config.ensure(options).import({ :plugin => myself })) 212 end
extension_set(hook, value, options = {})
click to toggle source
# File lib/core/plugin/base.rb 204 def extension_set(hook, value, options = {}) 205 Nucleon.value(hook_method(hook), value, Config.ensure(options).import({ :plugin => myself })) 206 end
hook_method(hook)
click to toggle source
# File lib/core/plugin/base.rb 178 def hook_method(hook) 179 "#{plugin_type}_#{plugin_provider}_#{hook}" 180 end
info(message, options = {})
click to toggle source
# File lib/core/plugin/base.rb 290 def info(message, options = {}) 291 config = Config.new(options).import({ :operation => :info }) 292 293 unless quiet? 294 message = render_message(message, config) 295 ui.info(message, config.export) 296 end 297 message 298 end
meta()
click to toggle source
# File lib/core/plugin/base.rb 73 def meta 74 return @meta 75 end
method_missing(method, *args, &block)
click to toggle source
# File lib/core/plugin/base.rb 40 def method_missing(method, *args, &block) 41 return nil 42 end
myself()
click to toggle source
# File lib/core/plugin/base.rb 60 def myself 61 @actor 62 end
Also aliased as: me
normalize(reload)
click to toggle source
# File lib/core/plugin/base.rb 171 def normalize(reload) 172 # Implement in sub classes 173 end
parallel_finalize()
click to toggle source
# File lib/core/plugin/base.rb 34 def parallel_finalize 35 remove_plugin 36 end
password(type, options = {})
click to toggle source
# File lib/core/plugin/base.rb 223 def password(type, options = {}) 224 ui.password(type, options) 225 end
plugin_directory()
click to toggle source
# File lib/core/plugin/base.rb 113 def plugin_directory 114 return meta.get(:directory) 115 end
plugin_file()
click to toggle source
# File lib/core/plugin/base.rb 119 def plugin_file 120 return meta.get(:file) 121 end
plugin_instance_name()
click to toggle source
# File lib/core/plugin/base.rb 125 def plugin_instance_name 126 return meta.get(:instance_name) 127 end
plugin_name()
click to toggle source
# File lib/core/plugin/base.rb 103 def plugin_name 104 return meta.get(:name) 105 end
plugin_name=(plugin_name)
click to toggle source
# File lib/core/plugin/base.rb 107 def plugin_name=plugin_name 108 meta.set(:name, string(plugin_name)) 109 end
plugin_namespace()
click to toggle source
# File lib/core/plugin/base.rb 85 def plugin_namespace 86 return meta.get(:namespace) 87 end
plugin_parent()
click to toggle source
# File lib/core/plugin/base.rb 135 def plugin_parent 136 return meta.get(:parent) 137 end
plugin_parent=(parent)
click to toggle source
# File lib/core/plugin/base.rb 131 def plugin_parent=parent 132 meta.set(:parent, parent) if parent.is_a?(Nucleon::Plugin::Base) 133 end
plugin_provider()
click to toggle source
# File lib/core/plugin/base.rb 97 def plugin_provider 98 return meta.get(:provider) 99 end
plugin_type()
click to toggle source
# File lib/core/plugin/base.rb 91 def plugin_type 92 return meta.get(:type) 93 end
prefixed_message(type, prefix, message, options = {})
click to toggle source
# File lib/core/plugin/base.rb 338 def prefixed_message(type, prefix, message, options = {}) 339 return unless [ :info, :warn, :error, :success ].include?(type.to_sym) 340 send(type, prefix.to_s + render_message(message, Config.new(options).import({ :prefix => false, :operation => type.to_sym }).export), Config.new(options).import({ :i18n => false }).export) 341 end
quiet=(quiet)
click to toggle source
# File lib/core/plugin/base.rb 67 def quiet=quiet 68 @quiet = quiet 69 end
quiet?()
click to toggle source
# File lib/core/plugin/base.rb 53 def quiet? 54 @quiet 55 end
remove_plugin()
click to toggle source
# File lib/core/plugin/base.rb 46 def remove_plugin 47 # Implement in sub classes if needed for cleanup 48 end
render(data, options = {})
click to toggle source
# File lib/core/plugin/base.rb 275 def render(data, options = {}) 276 config = Config.ensure(options) 277 278 if ! quiet? || config[:silent] 279 translator = nil 280 translator = Nucleon.translator({}, config[:format]) if config[:format] 281 data = translator.generate(data) if translator 282 283 ui.dump(data, options) unless data.strip.empty? || config[:silent] 284 end 285 data 286 end
safe_exec(return_result = true, &code)
click to toggle source
# File lib/core/plugin/base.rb 421 def safe_exec(return_result = true, &code) 422 begin 423 result = code.call 424 return result if return_result 425 return true 426 427 rescue => error 428 logger.error(error.inspect) 429 logger.error(error.message) 430 431 error(error.message, { :prefix => false, :i18n => false }) if error.message 432 end 433 return false 434 end
set_meta(meta)
click to toggle source
# File lib/core/plugin/base.rb 79 def set_meta(meta) 80 @meta = Config.ensure(meta) 81 end
status()
click to toggle source
# File lib/core/plugin/base.rb 164 def status 165 meta.get(:status, code.unknown_status) 166 end
status=(status)
click to toggle source
# File lib/core/plugin/base.rb 160 def status=status 161 meta.set(:status, status) 162 end
success(message, options = {})
click to toggle source
# File lib/core/plugin/base.rb 326 def success(message, options = {}) 327 config = Config.new(options).import({ :operation => :success }) 328 329 unless quiet? 330 message = render_message(message, config) 331 ui.success(message, config.export) 332 end 333 message 334 end
translate_reference(reference, editable = false)
click to toggle source
# File lib/core/plugin/base.rb 401 def translate_reference(reference, editable = false) 402 myself.class.translate_reference(reference, editable) 403 end
warn(message, options = {})
click to toggle source
# File lib/core/plugin/base.rb 302 def warn(message, options = {}) 303 config = Config.new(options).import({ :operation => :warn }) 304 305 unless quiet? 306 message = render_message(message, config) 307 ui.warn(message, config.export) 308 end 309 message 310 end
Protected Instance Methods
render_message(message, options = {})
click to toggle source
# File lib/core/plugin/base.rb 248 def render_message(message, options = {}) 249 config = Config.ensure(options) 250 use_prefix = true 251 252 if config.delete(:i18n, true) 253 Nucleon.namespaces.each do |namespace| 254 if message =~ /^#{namespace.to_s.downcase}\./ 255 use_prefix = false 256 break 257 end 258 end 259 260 if use_prefix 261 plugin_namespace = self.class.namespace if self.class.respond_to?(:namespace) 262 operation_id = config.has_key?(:operation) ? config[:operation] : '' 263 prefix = "#{plugin_namespace}.#{plugin_type}.#{render_provider.to_s.gsub('_', '.')}." 264 265 message = prefix + ( operation_id.empty? ? '' : "#{operation_id}." ) + message.sub(/^#{prefix}/, '') 266 end 267 message = I18n.t(message, Util::Data.merge([ Config.ensure(render_options).export, config.export ], true)) 268 end 269 message 270 end
render_options()
click to toggle source
# File lib/core/plugin/base.rb 237 def render_options 238 export.merge({ 239 :plugin_namespace => self.class.respond_to?(:namespace) ? self.class.namespace : plugin_namespace, 240 :plugin_type => plugin_type, 241 :plugin_provider => render_provider 242 }) 243 end
render_provider()
click to toggle source
# File lib/core/plugin/base.rb 230 def render_provider 231 plugin_provider 232 end