module Clerq::Properties

Public Instance Methods

property(name, options = {}, &validation) click to toggle source
# File lib/clerq/properties.rb, line 4
def property(name, options = {}, &validation)
  default_value = options[:default]
  define_method name do
    instance_variable_get("@#{name}") || default_value
  end

  define_method "#{name}=" do |val|
    if validation && !validation.call(val)
      raise ArgumentError, "Invalid property value #{name}: #{val}"
    end
    instance_variable_set("@#{name}", val)
  end
end