module AttrBool::Ext

Benchmarks are kind of meaningless, but after playing around with some, I found the following to be the case on my system:

To run benchmark code:

$ bundle exec rake benchmark

@author Jonathan Bradley Whited @since 0.2.0

Public Instance Methods

attr_accessor?(*var_ids,default: nil,reader: nil,writer: nil,&block) click to toggle source
# File lib/attr_bool.rb, line 32
def attr_accessor?(*var_ids,default: nil,reader: nil,writer: nil,&block)
  if block
    reader = block if reader.nil?
    writer = block if writer.nil?
  end

  if default.nil? && reader.nil?
    last = var_ids[-1]

    if !last.is_a?(String) && !last.is_a?(Symbol)
      default = var_ids.pop
    end
  end

  attr_reader?(*var_ids,default: default,&reader)
  attr_writer?(*var_ids,&writer)
end
attr_bool(*var_ids,default: nil,reader: nil,writer: nil,&block) click to toggle source
# File lib/attr_bool.rb, line 100
def attr_bool(*var_ids,default: nil,reader: nil,writer: nil,&block)
  if block
    reader = block if reader.nil?
    writer = block if writer.nil?
  end

  if default.nil? && reader.nil?
    last = var_ids[-1]

    if !last.is_a?(String) && !last.is_a?(Symbol)
      default = var_ids.pop
    end
  end

  attr_bool?(*var_ids,default: default,&reader)
  attr_booler(*var_ids,&writer)
end
Also aliased as: attr_boolor
attr_bool?(*var_ids,default: nil,&block) click to toggle source
# File lib/attr_bool.rb, line 119
def attr_bool?(*var_ids,default: nil,&block)
  no_default = default.nil?

  if no_default
    no_default = !block

    if no_default
      last = var_ids[-1]

      if !last.is_a?(String) && !last.is_a?(Symbol)
        default = var_ids.pop ? true : false
        no_default = false
      end
    end
  else
    default = default ? true : false
  end

  var_ids.each do |var_id|
    var_id_q = :"#{var_id}?"

    if no_default
      define_method(var_id_q) do
        instance_variable_get(:"@#{var_id}") ? true : false
      end
    else
      if block
        define_method(var_id_q,&block)
      else
        at_var_id = :"@#{var_id}"

        define_method(var_id_q) do
          if instance_variable_defined?(at_var_id)
            instance_variable_get(at_var_id) ? true : false
          else
            default
          end
        end
      end
    end
  end
end
attr_booler(*var_ids,&block) click to toggle source
# File lib/attr_bool.rb, line 162
def attr_booler(*var_ids,&block)
  if !block
    last = var_ids[-1]

    if !last.is_a?(String) && !last.is_a?(Symbol)
      raise ArgumentError,'default value not allowed for writer'
    end
  end

  var_ids.each do |var_id|
    var_id_eq = :"#{var_id}="

    if block
      define_method(var_id_eq,&block)
    else
      define_method(var_id_eq) do |value|
        instance_variable_set(:"@#{var_id}",value ? true : false)
      end
    end
  end
end
attr_boolor(*var_ids,default: nil,reader: nil,writer: nil,&block)
Alias for: attr_bool
attr_reader?(*var_ids,default: nil,&block) click to toggle source
# File lib/attr_bool.rb, line 50
def attr_reader?(*var_ids,default: nil,&block)
  no_default = (default.nil? && !block)

  if no_default
    last = var_ids[-1]

    if !last.is_a?(String) && !last.is_a?(Symbol)
      default = var_ids.pop
      no_default = false
    end
  end

  var_ids.each do |var_id|
    var_id_q = :"#{var_id}?"

    if no_default
      define_method(var_id_q) do
        instance_variable_get(:"@#{var_id}")
      end
    else
      if block
        define_method(var_id_q,&block)
      else
        at_var_id = :"@#{var_id}"

        define_method(var_id_q) do
          instance_variable_defined?(at_var_id) ? instance_variable_get(at_var_id) : default
        end
      end
    end
  end
end
attr_writer?(*var_ids,&block) click to toggle source

This should only be used when you want to pass in a block/proc.

# File lib/attr_bool.rb, line 84
def attr_writer?(*var_ids,&block)
  if block
    var_ids.each do |var_id|
      define_method(:"#{var_id}=",&block)
    end
  else
    last = var_ids[-1]

    if !last.is_a?(String) && !last.is_a?(Symbol)
      raise ArgumentError,'default value not allowed for writer'
    end

    attr_writer(*var_ids)
  end
end