44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/universe_compiler/entity/field_constraint_management.rb', line 44
def field(field_name, *options)
['', '='].each do |suffix|
method_name = '%s%s' % [field_name, suffix]
if instance_methods.include? method_name
raise UniverseCompiler::Error,
"'#{method_name}' method cannot be defined on '#{self}' as it is already defined !"
end
end
define_constraint field_name if options.empty?
options.each do |option|
case option
when Symbol || String
if BOOLEAN_CONSTRAINTS.include? option.to_sym
send option, field_name
else
raise UniverseCompiler::Error, "Unknown field option '#{option}' !"
end
when Hash
option.each do |constraint_name, value|
if PARAMETRIZED_CONSTRAINTS.include? constraint_name.to_sym
send constraint_name, field_name, value
else
raise UniverseCompiler::Error, "Unknown field option '#{constraint_name}' !"
end
end
else
raise UniverseCompiler::Error, "Invalid option for '#{field_name}': #{option.class.name} => #{option.to_s}"
end
end
end
|