class SmartOptions::Options

Public Class Methods

new(params = {}) click to toggle source
# File lib/smart_options/options.rb, line 16
def initialize(params = {})
  wrong_keys = params.keys - @@__options__.keys

  raise "Wrong options supplied: #{wrong_keys}" if !wrong_keys.empty?

  required_options = @@__options__.select { |k, v| v[:required] }
  missing_options_keys = required_options.keys - params.keys

  raise "Missing required options: #{missing_options_keys}" if !missing_options_keys.empty?

  params.each do |k, v|
    instance_variable_set("@#{k}", v)
  end
end
option(name, params) click to toggle source
# File lib/smart_options/options.rb, line 3
def self.option(name, params)
  @@__options__ ||= {}
  @@__options__[name] = params

  define_method name do
    instance_variable_get("@#{name}") || params[:default]
  end

  define_method :"#{name}=" do |value|
    instance_variable_set("@#{name}", value)
  end
end