28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/arrest/attributes/belongs_to.rb', line 28
def belongs_to(*args)
arg = args[0]
name = arg.to_s.downcase
class_name = StringUtils.classify(name)
foreign_key = "#{StringUtils.underscore(ClassUtils.simple_name(self))}_id"
params = args[1] unless args.length < 2
actions = [:create, :retrieve, :update, :delete]
if params
actions = params[:actions] if params[:actions]
polymorphic = !!params[:polymorphic]
class_name = params[:class_name].to_s unless params[:class_name] == nil
foreign_key = params[:foreign_key].to_s unless params[:foreign_key] == nil
end
field_name = create_field_name(name, params, polymorphic)
create_and_add_attribute(field_name, polymorphic, actions, foreign_key, class_name)
send :define_method, name do
val = self.send(field_name)
if val.blank?
return nil
end
@belongs_tos ||= {}
@belongs_tos[name] ||=
begin
if polymorphic
clazz = self.class.json_type_to_class(val.type)
id = val.id
else
clazz = Arrest::Source.mod.const_get(class_name)
id = val
end
clazz.find(self.context, id)
end
end
end
|