Class: PgSerializable::Visitors::Validation
- Inherits:
-
Base
- Object
- Base
- PgSerializable::Visitors::Validation
show all
- Defined in:
- lib/pg_serializable/visitors/validation.rb
Instance Method Summary
collapse
Methods inherited from Base
#visit, #visit_method_for, #visit_other, #visit_record, #visit_scope
Instance Method Details
#visit_association_node(subject, **kwargs) ⇒ Object
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/pg_serializable/visitors/validation.rb', line 37
def visit_association_node(subject, **kwargs)
klass = subject.klass
name = subject.name
if klass.reflect_on_association(name).nil?
raise PgSerializable::AssociationError.new("association `#{name.to_s}` doesn't exist for class #{klass}")
end
if subject.target.trait_manager.get_trait(subject.trait).nil?
raise PgSerializable::AssociationError.new("trait `#{subject.trait}` doesn't exist for class #{subject.target}")
end
end
|
#visit_attribute_node(subject, **kwargs) ⇒ Object
29
30
31
32
33
34
35
|
# File 'lib/pg_serializable/visitors/validation.rb', line 29
def visit_attribute_node(subject, **kwargs)
klass = subject.klass
column_name = subject.column_name
unless klass.column_names.include? column_name.to_s
raise PgSerializable::AttributeError.new("column `#{column_name}` doesn't exist for class #{klass}")
end
end
|
#visit_class(subject, **kwargs) ⇒ Object
4
5
6
|
# File 'lib/pg_serializable/visitors/validation.rb', line 4
def visit_class(subject, **kwargs)
visit subject.trait_manager
end
|
#visit_node(subject, **kwargs) ⇒ Object
19
20
21
22
23
24
25
26
27
|
# File 'lib/pg_serializable/visitors/validation.rb', line 19
def visit_node(subject, **kwargs)
if subject.is_a? PgSerializable::Nodes::Attribute
visit_attribute_node(subject, **kwargs)
elsif subject.is_a? PgSerializable::Nodes::Association
visit_association_node(subject, **kwargs)
else
raise UnknownAttributeError.new('validation visitor called with unknow node type')
end
end
|
#visit_trait(subject, **kwargs) ⇒ Object
14
15
16
17
|
# File 'lib/pg_serializable/visitors/validation.rb', line 14
def visit_trait(subject, **kwargs)
subject.attribute_nodes.each { |attribute_node| visit attribute_node }
ensure_no_cycles!(subject)
end
|
#visit_trait_manager(subject, **kwargs) ⇒ Object
8
9
10
11
12
|
# File 'lib/pg_serializable/visitors/validation.rb', line 8
def visit_trait_manager(subject, **kwargs)
subject.traits.each do |_, value|
visit value
end
end
|