Module: Attribool

Defined in:
lib/attribool.rb,
lib/attribool/value.rb,
lib/attribool/version.rb,
lib/attribool/attribute.rb,
lib/attribool/validators.rb,
lib/attribool/reader_name.rb,
lib/attribool/attribute_list.rb,
lib/attribool/validator_service.rb

Overview

Adds macros for dealing with boolean attributes.

Examples:

require "attribool"
class Person
  extend Attribool
  attr_accessor :name
  bool_reader :name
ends
person = Person.new
person.name?
# false, because @name is nil.
person.name = "John Smith"
person.name
# "John Smith"
person.name?
# true, because @name is truthy.

Defined Under Namespace

Modules: Validators, Version Classes: Attribute, AttributeList, ReaderName, ValidatorService, Value

Constant Summary collapse

VERSION =

The version, as a string.

Returns:

  • (String)
Version.to_s.freeze

Instance Method Summary collapse

Instance Method Details

#bool_accessor(*attributes) ⇒ Object

Creates a simple reader and writer for booleans. This should only be used when the attribute should only ever be true or false.

Parameters:

  • *attributes (Symbol, String)


82
83
84
85
# File 'lib/attribool.rb', line 82

def bool_accessor(*attributes)
  bool_reader(*attributes)
  bool_writer(*attributes)
end

#bool_reader(*attributes, allow_nil: true, method_name: nil, condition: nil) ⇒ Object

Creates methods that return a boolean for attributes that may or may not be booleans themselves. Multiple readers can be created at once

Parameters:

  • *attributes (Symbol, String)


46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/attribool.rb', line 46

def bool_reader(*attributes, allow_nil: true, method_name: nil, condition: nil)
  ValidatorService.call(:method_name, method_name, attributes.size)

  AttributeList.build(*attributes, method_name: method_name).each do |attribute|
    define_method(attribute.reader) do
      instance_variable_get(attribute.ivar).then do |value|
        ValidatorService.call(:nil_attribute, attribute.ivar, value, allow_nil)

        Value.new(value, condition).to_boolean
      end
    end
  end
end

#bool_writer(*attributes, strict: false) ⇒ Object

Creates a writer for boolean attributes. Always coerces to boolean based on truthiness.

Parameters:

  • *attributes (Symbol, String)


67
68
69
70
71
72
73
74
75
# File 'lib/attribool.rb', line 67

def bool_writer(*attributes, strict: false)
  AttributeList.build(*attributes).each do |attribute|
    define_method(attribute.writer) do |value|
      ValidatorService.call(:strict_boolean, value, strict)

      instance_variable_set(attribute.ivar, Value.new(value).to_boolean)
    end
  end
end