54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
# File 'lib/belongs_to_resource.rb', line 54
def belongs_to_resource(resource_name, options = {})
resource_class = options.fetch(:resource_class) { resource_name.to_s.camelize.constantize }
resource_id = options.fetch(:resource_id, "#{resource_name}_id")
create_reflection :belongs_to, resource_name, { foreign_key: resource_id }, self
send(:class_eval, <<-eoruby, __FILE__, __LINE__ + 1)
def #{resource_name}(use_cache = true)
return unless #{resource_id}
if use_cache
#{resource_name}_cached
else
#{resource_class}.find(#{resource_id}, params: #{resource_name}_params)
end
end
def #{resource_name}=(new_resource)
self.#{resource_id} = new_resource.try(:id)
self.old_#{resource_id} = #{resource_id}
self.#{resource_name}_cache = new_resource
end
def #{resource_id}=(new_id)
self.old_#{resource_id} = #{resource_id}
if self.class.superclass <= ActiveResource::Base
self.attributes[:#{resource_id}] = new_id
else
super
end
end
private
attr_accessor :old_#{resource_id}
attr_accessor :#{resource_name}_cache
def #{resource_name}_cached
if #{resource_id}
if old_#{resource_id} != #{resource_id}
self.#{resource_name}_cache = #{resource_class}.find(#{resource_id}, params: #{resource_name}_params)
self.old_#{resource_id} = #{resource_id}
end
else
self.#{resource_name}_cache = nil
end
#{resource_name}_cache
end
def #{resource_name}_params
{}
end
eoruby
end
|