Class: Bound::BoundClass::Attribute

Inherits:
Object
  • Object
show all
Defined in:
lib/bound.rb

Direct Known Subclasses

RequiredAttribute

Constant Summary collapse

NotImplemented =
Class.new(RuntimeError)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Attribute

Returns a new instance of Attribute.



41
42
43
# File 'lib/bound.rb', line 41

def initialize(name)
  @name = name
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



38
39
40
# File 'lib/bound.rb', line 38

def name
  @name
end

#nested_classObject

Returns the value of attribute nested_class.



39
40
41
# File 'lib/bound.rb', line 39

def nested_class
  @nested_class
end

#valueObject (readonly)

Returns the value of attribute value.



38
39
40
# File 'lib/bound.rb', line 38

def value
  @value
end

Instance Method Details

#assign(value) ⇒ Object



45
46
47
48
49
50
51
52
# File 'lib/bound.rb', line 45

def assign(value)
  @assigned = true
  if nested_class
    @value = assign_nested(value)
  else
    @value = value
  end
end

#assign_nested(value) ⇒ Object



54
55
56
57
# File 'lib/bound.rb', line 54

def assign_nested(value)
  nested_attribute = NestedAttribute.new(nested_class)
  nested_attribute.resolve(value)
end

#call_on(object) ⇒ Object



59
60
61
62
63
64
65
66
# File 'lib/bound.rb', line 59

def call_on(object)
  method = @name
  if object.respond_to?(method)
    object.send method
  else
    raise NotImplemented, "undefined method `#{method}' for #{object}"
  end
end

#inspectObject



80
81
82
# File 'lib/bound.rb', line 80

def inspect
  @value.inspect
end

#is_assigned?Boolean

Returns:

  • (Boolean)


76
77
78
# File 'lib/bound.rb', line 76

def is_assigned?
  !!@assigned
end

#required?Boolean

Returns:

  • (Boolean)


72
73
74
# File 'lib/bound.rb', line 72

def required?
  false
end

#valid?Boolean

Returns:

  • (Boolean)


68
69
70
# File 'lib/bound.rb', line 68

def valid?
  !required? || is_assigned?
end