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.



31
32
33
# File 'lib/bound.rb', line 31

def initialize(name)
  @name = name
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



28
29
30
# File 'lib/bound.rb', line 28

def name
  @name
end

#nested_classObject

Returns the value of attribute nested_class.



29
30
31
# File 'lib/bound.rb', line 29

def nested_class
  @nested_class
end

#valueObject (readonly)

Returns the value of attribute value.



28
29
30
# File 'lib/bound.rb', line 28

def value
  @value
end

Instance Method Details

#assign(value) ⇒ Object



35
36
37
38
39
40
41
42
# File 'lib/bound.rb', line 35

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

#assign_nested(value) ⇒ Object



44
45
46
47
# File 'lib/bound.rb', line 44

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

#call_on(object) ⇒ Object



49
50
51
52
53
54
55
56
# File 'lib/bound.rb', line 49

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



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

def inspect
  @value.inspect
end

#is_assigned?Boolean

Returns:

  • (Boolean)


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

def is_assigned?
  !!@assigned
end

#required?Boolean

Returns:

  • (Boolean)


62
63
64
# File 'lib/bound.rb', line 62

def required?
  false
end

#valid?Boolean

Returns:

  • (Boolean)


58
59
60
# File 'lib/bound.rb', line 58

def valid?
  !required? || is_assigned?
end