class Backup::Config::DSL

Context for loading user config.rb and model files.

Constants

Model

Attributes

_config_options[R]

Public Class Methods

new() click to toggle source
# File lib/backup/config/dsl.rb, line 74
def initialize
  @_config_options = {}
end

Private Class Methods

add_dsl_constants() click to toggle source

List the available database, storage, syncer, compressor, encryptor and notifier constants. These are used to define constant names within Backup::Config::DSL so that users may use a constant instead of a string. Nested namespaces are represented using Hashs. Deep nesting supported.

Example, instead of:

database "MySQL" do |mysql|
sync_with "RSync::Local" do |rsync|

You can do:

database MySQL do |mysql|
sync_with RSync::Local do |rsync|
# File lib/backup/config/dsl.rb, line 24
def add_dsl_constants
  create_modules(
    DSL,
    [ # Databases
      ["MySQL", "PostgreSQL", "MongoDB", "Redis", "Riak", "OpenLDAP", "SQLite"],
      # Storages
      ["S3", "CloudFiles", "Ninefold", "Dropbox", "FTP",
       "SFTP", "SCP", "RSync", "Local"],
      # Compressors
      ["Gzip", "Bzip2", "Custom", "Pbzip2", "Lzma"],
      # Encryptors
      ["OpenSSL", "GPG"],
      # Syncers
      [
        { "Cloud" => ["CloudFiles", "S3"] },
        { "RSync" => ["Push", "Pull", "Local"] }
      ],
      # Notifiers
      ["Mail", "Twitter", "Campfire", "Prowl",
       "Hipchat", "PagerDuty", "Pushover", "HttpPost", "Nagios",
       "Slack", "FlowDock", "Zabbix", "Ses", "DataDog", "Command"]
    ]
  )
end
create_modules(scope, names) click to toggle source
# File lib/backup/config/dsl.rb, line 49
def create_modules(scope, names)
  names.flatten.each do |name|
    if name.is_a?(Hash)
      name.each do |key, val|
        create_modules(get_or_create_empty_module(scope, key), [val])
      end
    else
      get_or_create_empty_module(scope, name)
    end
  end
end
get_or_create_empty_module(scope, const) click to toggle source
# File lib/backup/config/dsl.rb, line 61
def get_or_create_empty_module(scope, const)
  if scope.const_defined?(const)
    scope.const_get(const)
  else
    scope.const_set(const, Module.new)
  end
end

Public Instance Methods

preconfigure(name, &block) click to toggle source

Allows users to create preconfigured models.

# File lib/backup/config/dsl.rb, line 84
def preconfigure(name, &block)
  unless name.is_a?(String) && name =~ /^[A-Z]/
    raise Error, "Preconfigured model names must be given as a string " \
                  "and start with a capital letter."
  end

  if DSL.const_defined?(name)
    raise Error, "'#{name}' is already in use " \
                  "and can not be used for a preconfigured model."
  end

  DSL.const_set(name, Class.new(Model))
  DSL.const_get(name).preconfigure(&block)
end