class Dradis::Plugins::Settings

Attributes

adapter[R]
namespace[R]

Public Class Methods

new(namespace, adapter: :db) click to toggle 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

all() click to toggle 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
is_default?(key, value) click to toggle 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
reset_defaults!() click to toggle 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
respond_to?(name) click to toggle source
Calls superclass method
# File lib/dradis/plugins/settings.rb, line 12
def respond_to?(name)
  super || @dirty_options.key?(name.to_sym)
end
save() click to toggle 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
update_settings(opts = {}) click to toggle 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

assign_adapter(name) click to toggle source

————————————————— /Method missing magic

# 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
dirty_or_stored_or_default(key) click to toggle source

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.

# 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
method_missing(name, *args, &blk) click to toggle source

—————————————————- Method missing magic

Calls superclass method
# 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