Sha256: a2bd6fe28ff20eb05d0d1e514caf0e5cac660cd5fd9085653f7c5c5d8d0d3de3

Contents?: true

Size: 834 Bytes

Versions: 28

Compression:

Stored size: 834 Bytes

Contents

class Class
  def define_option(name, default=nil)
    sym = name.to_sym
    cattr_reader(sym)
    cattr_writer(sym)
    send("#{name.to_s}=", default)
  end
  
  def blockable_attr_accessor(sym)
    module_eval(<<-EVAL, __FILE__, __LINE__)
      def #{sym}(&block)
        if block_given?
          @#{sym} = block
        else
          @#{sym}
        end
      end
      def #{sym}=(value)
        @#{sym} = value
      end
    EVAL
  end
end

class Module
  def attr_accessor_with_default(sym, default = nil, &block)
    raise 'Default value or block required' unless !default.nil? || block
    define_method(sym, block_given? ? block : Proc.new { default })
    module_eval(<<-EVAL, __FILE__, __LINE__)
      def #{sym}=(value)
        class << self; attr_reader :#{sym} end
        @#{sym} = value
      end
    EVAL
  end
end

Version data entries

28 entries across 26 versions & 8 rubygems

Version Path
aslakjo-aslakjo-comatose-2.0.5.1 lib/support/class_options.rb
aslakjo-comatose-2.0.5.2 lib/support/class_options.rb
aslakjo-comatose-2.0.5.3 lib/support/class_options.rb
darthapo-comatose-2.0.3 lib/support/class_options.rb
darthapo-comatose-2.0.4 lib/support/class_options.rb
darthapo-comatose-2.0.5 lib/support/class_options.rb
darthapo-comatose-2.0 lib/support/class_options.rb
jcnetdev-comatose-2.0.1 lib/support/class_options.rb
staugaard-comatose-2.0.2 lib/support/class_options.rb
staugaard-comatose-2.0.3 lib/support/class_options.rb
comatose-rubyisbeautiful-3.0.5 lib/support/class_options.rb
comatose-rubyisbeautiful-3.0.4 lib/support/class_options.rb
comatose-rubyisbeautiful-3.0.3 lib/support/class_options.rb
comatose-rubyisbeautiful-3.0.2 lib/support/class_options.rb
comatose-rubyisbeautiful-3.0.1 lib/support/class_options.rb
comatose-rubyisbeautiful-3.0.0 lib/support/class_options.rb
comatose-2.0.5 lib/support/class_options.rb
comatose-2.0.1 lib/support/class_options.rb
aslakjo-comatose-2.0.5.12 lib/support/class_options.rb
aslakjo-comatose-2.0.5.11 lib/support/class_options.rb