class Mobility::Pluggable
Abstract Module subclass with methods to define plugins and defaults. Works with {Mobility::Plugin}. (Subclassed by {Mobility::Translations}.)
Attributes
options[R]
Public Class Methods
defaults()
click to toggle source
# File lib/mobility/pluggable.rb, line 24 def defaults @defaults ||= {} end
included_plugins()
click to toggle source
# File lib/mobility/pluggable.rb, line 20 def included_plugins included_modules.grep(Plugin) end
inherited(klass)
click to toggle source
Calls superclass method
# File lib/mobility/pluggable.rb, line 28 def inherited(klass) super klass.defaults.merge!(defaults) end
new(*, **options)
click to toggle source
# File lib/mobility/pluggable.rb, line 34 def initialize(*, **options) initialize_options(options) validate_options(@options) end
plugin(name, *args)
click to toggle source
# File lib/mobility/pluggable.rb, line 12 def plugin(name, *args) Plugin.configure(self, defaults) { __send__ name, *args } end
plugins(&block)
click to toggle source
# File lib/mobility/pluggable.rb, line 16 def plugins(&block) Plugin.configure(self, defaults, &block) end
Private Instance Methods
initialize_options(options)
click to toggle source
# File lib/mobility/pluggable.rb, line 43 def initialize_options(options) @options = self.class.defaults.merge(options) end
validate_options(options)
click to toggle source
This is overridden by backend plugin to exclude mixed-in backend options.
# File lib/mobility/pluggable.rb, line 48 def validate_options(options) plugin_keys = self.class.included_plugins.map { |p| Plugins.lookup_name(p) } extra_keys = options.keys - plugin_keys raise InvalidOptionKey, "No plugin configured for these keys: #{extra_keys.join(', ')}." unless extra_keys.empty? end