Sha256: c38f798688efcc90424ebea81175604e30c9ad1747a106eaab504743f4612e0b

Contents?: true

Size: 1.77 KB

Versions: 1

Compression:

Stored size: 1.77 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 usage:
    #
    #   class Post
    #     include Virtus
    #
    #     attribute :published, Boolean
    #   end
    #
    #   post = Post.new(:published => false)
    #   post.published? # => false
    #
    class Boolean < Object
      primitive TrueClass

      # 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 [TrueClass,FalseClass]
      #
      # @api semipublic
      def self.primitive?(value)
        value.equal?(true) || value.equal?(false)
      end

      # Coerce value into true or false
      #
      # @see Virtus::Typecast::Boolean.call
      #
      # @return [TrueClass,FalseClass]
      #
      # @api private
      def typecast_to_primitive(value)
        Typecast::Boolean.call(value)
      end

      # Creates standard and boolean attribute reader methods
      #
      # @return [NilClass]
      #
      # @api private
      def add_reader_method(model)
        super

        name        = self.name
        method_name = "#{name}?"

        model.class_eval <<-RUBY, __FILE__, __LINE__ + 1
          module AttributeMethods
            def #{method_name}
              #{name}
            end
          end
          include AttributeMethods
        RUBY

        model.send(reader_visibility, method_name)
      end

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

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
virtus-0.0.4 lib/virtus/attribute/boolean.rb