Sha256: e730a29fa252351949908ad0875d5b48011635c69557343631fc63e850ad43c2

Contents?: true

Size: 1.46 KB

Versions: 5

Compression:

Stored size: 1.46 KB

Contents

module Virtus
  class Attribute

    # Bolean attribute allows true or false values to be set
    # Additionally it adds boolean reader method, like "admin?"
    #
    # @example
    #   class Post
    #     include Virtus
    #
    #     attribute :published, Boolean
    #   end
    #
    #   post = Post.new(:published => false)
    #   post.published?  # => false
    #
    class Boolean < Object
      primitive       TrueClass
      coercion_method :to_boolean

      # Returns if the given value is either true or false
      #
      # @example
      #   Virtus::Attribute::Boolean.primitive?(true)    # => true
      #   Virtus::Attribute::Boolean.primitive?(false)   # => true
      #   Virtus::Attribute::Boolean.primitive?(1)       # => false
      #   Virtus::Attribute::Boolean.primitive?('true')  # => false
      #
      # @return [Boolean]
      #
      # @api public
      def self.primitive?(value)
        value.equal?(true) || value.equal?(false)
      end

      # Creates standard and boolean attribute reader methods
      #
      # @param [Module] mod
      #
      # @return [self]
      #
      # @api private
      def define_reader_method(mod)
        super

        reader_method_name = "#{name}?"
        attribute          = self

        mod.send(:define_method,    reader_method_name) { attribute.get(self) }
        mod.send(reader_visibility, reader_method_name)

        self
      end

    end # class Boolean
  end # class Attribute
end # module Virtus

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
virtus-0.0.10 lib/virtus/attribute/boolean.rb
virtus-0.0.9 lib/virtus/attribute/boolean.rb
virtus-0.0.8 lib/virtus/attribute/boolean.rb
virtus-0.0.7 lib/virtus/attribute/boolean.rb
virtus-0.0.6 lib/virtus/attribute/boolean.rb