Module: Predicates

Defined in:
lib/predicates.rb,
lib/predicates/version.rb

Defined Under Namespace

Classes: NameError

Constant Summary collapse

VERSION =
"0.1.5"

Instance Method Summary collapse

Instance Method Details

#predicate(method) ⇒ Object

Defines a predicate (truth accessor) for a given attribute. If the attribute has not been predefined, an attribute writer will be created along with the predicate.

Class Example

class User
  extend Predicates

  predicate :confirmed?
end

user = User.new
user.confirmed = 1
user.confirmed? #=> true
user.confirmed = nil
user.confirmed? #=> false

Ohm Model Example

class User < Ohm::Model
  include Predicates

  attribute :confirmed
  predicate :confirmed?
end

user = User.new
user.confirmed = 1
user.confirmed? #=> true
user.confirmed = nil
user.confirmed? #=> false


38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/predicates.rb', line 38

def predicate(method)
  if method.to_s =~ /(.*?)\?+$/
    attribute = $1.to_sym
  else
    raise NameError
  end

  attr_writer attribute unless method_defined? attribute

  if method_defined? attribute
    define_method method do
      !!send(attribute)
    end
  else
    define_method method do
      !!instance_variable_get(:"@#{attribute}")
    end
  end
end