module Greybox::Configurable::ClassMethods

Attributes

required_properties[RW]

Private Class Methods

inspect()
Alias for: to_s
properties() click to toggle source
# File lib/greybox/configurable.rb, line 47
def properties
  instance_methods(false).reject { |m| m.to_s.end_with? "=" }
end
to_s() click to toggle source
# File lib/greybox/configurable.rb, line 42
def to_s
  "Properties(#{properties.join(", ")})"
end
Also aliased as: inspect

Public Instance Methods

def_property(name, args = {}) click to toggle source
# File lib/greybox/configurable.rb, line 7
def def_property(name, args = {})
  setter = "#{name}=".to_sym
  getter = name
  (@defaults ||= {})[name] = args[:default] if args.has_key? :default
  (@required_properties ||= Set.new) << name if args[:required]

  # Stolen from RubyTapas episodes 27 and 28
  mod = if const_defined?(:Properties, false)
          const_get(:Properties)
        else
          const_set(:Properties, new_blank_properties_module)
        end

  mod.module_eval %Q{
    def #{setter}(value)
      @properties ||= {}
      @properties[:#{name}] = value
    end

    def #{getter}
      get_prop(:#{name})
    end
  }

  include mod
end
defaults() click to toggle source
# File lib/greybox/configurable.rb, line 34
def defaults
  @defaults || {}
end

Private Instance Methods

new_blank_properties_module() click to toggle source
# File lib/greybox/configurable.rb, line 39
def new_blank_properties_module
  Module.new do
    class << self
      def to_s
        "Properties(#{properties.join(", ")})"
      end
      alias_method :inspect, :to_s

      def properties
        instance_methods(false).reject { |m| m.to_s.end_with? "=" }
      end
    end
  end
end