class Dradis::Plugins::Settings
Attributes
Public Class Methods
Source
# File lib/dradis/plugins/settings.rb, line 5 def initialize(namespace, adapter: :db) @namespace = namespace @dirty_options ||= {} @default_options ||= { enabled: true }.with_indifferent_access assign_adapter(adapter) end
Public Instance Methods
Source
# File lib/dradis/plugins/settings.rb, line 16 def all @default_options.except(:enabled).map do |key, value| { name: key.to_sym, value: value = dirty_or_stored_or_default(key.to_sym), default: is_default?(key, value) } end.sort_by{ |o| o[:name] } end
Source
# File lib/dradis/plugins/settings.rb, line 48 def is_default?(key, value) value.to_s == @default_options[key.to_sym].to_s end
Source
# File lib/dradis/plugins/settings.rb, line 41 def reset_defaults! @dirty_options = {} @default_options.each do |key, value| delete(key) if exists?(key) end end
Source
# File lib/dradis/plugins/settings.rb, line 12 def respond_to?(name) super || @dirty_options.key?(name.to_sym) end
Calls superclass method
Source
# File lib/dradis/plugins/settings.rb, line 26 def save @dirty_options.reject do |k, v| v.present? && v == read(k) end.each do |k, v| write(k, v) end end
Source
# File lib/dradis/plugins/settings.rb, line 34 def update_settings(opts = {}) opts.select{ |k, v| @default_options.key?(k) }.each do |k, v| @dirty_options[k.to_sym] = v end save end
Private Instance Methods
Source
# File lib/dradis/plugins/settings.rb, line 70 def assign_adapter(name) adapters = { db: Adapters::Db, encrypted_configuration: Adapters::EncryptedConfiguration } if adapters.key?(name) @adapter = adapters[name].new(namespace) else raise ArgumentError end end
————————————————— /Method missing magic
Source
# File lib/dradis/plugins/settings.rb, line 82 def dirty_or_stored_or_default(key) if @dirty_options.key?(key) @dirty_options[key] elsif exists?(key) read(key) else @default_options[key] end end
This method looks up in the configuration repository DB to see if the user has provided a value for the given setting. If not, the default value is returned.
Source
# File lib/dradis/plugins/settings.rb, line 57 def method_missing(name, *args, &blk) if name.to_s =~ /^default_(.*)=$/ @default_options[$1.to_sym] = args.first elsif name.to_s =~ /=$/ @dirty_options[$`.to_sym] = args.first elsif @default_options.key?(name) dirty_or_stored_or_default(name) else super end end
—————————————————- Method missing magic
Calls superclass method