Sha256: 8c4c3fe3b39cf4ad6814d29c74039cabf946f668159da36761c2ceea8d6a3695
Contents?: true
Size: 1.19 KB
Versions: 1
Compression:
Stored size: 1.19 KB
Contents
module Observed module Configurable def initialize(args={}) configure(args) end def configure(args={}) if @attributes @attributes.merge! args else @attributes ||= args.dup end self end module ClassMethods # @param [String|Symbol] name def attribute(name, options={}) define_method(name) do instance_variable_get("@#{name.to_s}") || @attributes[name] || self.class.defaults[name] || fail_for_not_configured_parameter(name) end default_value = options && options[:default] default name => default_value if default_value end def default(args) @defaults = defaults.merge(args) end def defaults @defaults ||= {} end def create(args) self.new(args) end end class NotConfiguredError < RuntimeError; end class << self def included(klass) klass.extend ClassMethods end end private def fail_for_not_configured_parameter(name) fail NotConfiguredError.new("The parameter `#{name}` is not configured. attributes=#{@attributes}, defaults=#{self.class.defaults}") end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
observed-0.1.1 | lib/observed/configurable.rb |