Sha256: 1bc41572b729c05d9735d66c68061b40447b3a70ce95ec0762aeebfadba3a304

Contents?: true

Size: 627 Bytes

Versions: 1

Compression:

Stored size: 627 Bytes

Contents

module CaptainPlanet
  module Configurable
    def self.included(base)
      base.send :extend,  ClassMethods
      base.send :include, InstanceMethods
    end
    
    module InstanceMethods
    end
    
    module ClassMethods
      def attr_configurable(*attrs, &block)
        attrs.each do |attr|
          class_variable_set("@@__default_#{attr}", block)
          
          class_eval %(
            def #{attr}(val=nil)
              return @#{attr} || (@@__default_#{attr}.call if @@__default_#{attr}.respond_to?(:call)) unless val
              @#{attr} = val
            end)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
captain_planet-0.2.0 lib/captain_planet/configurable.rb