Class: Bound::BoundClass::Attribute

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

Direct Known Subclasses

RequiredAttribute

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Attribute

Returns a new instance of Attribute.



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

def initialize(name)
  @name = name
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



36
37
38
# File 'lib/bound.rb', line 36

def name
  @name
end

#nested_classObject

Returns the value of attribute nested_class.



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

def nested_class
  @nested_class
end

#valueObject (readonly)

Returns the value of attribute value.



36
37
38
# File 'lib/bound.rb', line 36

def value
  @value
end

Instance Method Details

#assign(value) ⇒ Object



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

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

#assign_nested(value) ⇒ Object



52
53
54
55
# File 'lib/bound.rb', line 52

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

#call_on(object) ⇒ Object



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

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

#inspectObject



78
79
80
# File 'lib/bound.rb', line 78

def inspect
  @value.inspect
end

#is_assigned?Boolean

Returns:

  • (Boolean)


74
75
76
# File 'lib/bound.rb', line 74

def is_assigned?
  !!@assigned
end

#required?Boolean

Returns:

  • (Boolean)


70
71
72
# File 'lib/bound.rb', line 70

def required?
  false
end

#valid?Boolean

Returns:

  • (Boolean)


66
67
68
# File 'lib/bound.rb', line 66

def valid?
  !required? || is_assigned?
end