module Served::Resource::Configurable::ClassMethods

Private Instance Methods

class_configurable(name, options = {}, &block) click to toggle source

Declare a configurable attribute. This is used to declare the configuration methods used in Served::Resource::Base

# File lib/served/resource/configurable.rb, line 28
def class_configurable(name, options = {}, &block)
  instance_eval do
    instance_variable_set(:"@_c_#{name}", options[:default]) if options[:default]
    instance_variable_set(:"@_c_#{name}", block) if block_given? && !instance_variable_get(:"@#{name}")

    define_singleton_method(name) do |value = nil|
      instance_variable_set(:"@_c_#{name}", value) if value
      value ||= instance_variable_get(:"@_c_#{name}")
      return instance_eval(&value) if value.is_a? Proc
      value
    end

    define_method(name) do
      self.class.send(name)
    end
  end
end