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
|
# File 'lib/tessa/model.rb', line 55
def asset(name, args={})
field = tessa_fields[name] = Field.new(args.merge(name: name))
dynamic_extensions = Module.new
dynamic_extensions.send(:define_method, name) do
if instance_variable_defined?(ivar = "@#{name}")
instance_variable_get(ivar)
else
instance_variable_set(
ivar,
fetch_tessa_remote_assets(field.id(on: self))
)
end
end
dynamic_extensions.send(:define_method, "#{name}=") do |value|
change_set = field.change_set_for(value)
if !(field.multiple? && value.is_a?(AssetChangeSet))
new_ids = change_set.scoped_changes.select(&:add?).map(&:id)
change_set += field.difference_change_set(new_ids, on: self)
end
pending_tessa_change_sets[name] += change_set
field.apply(change_set, on: self)
end
include dynamic_extensions
end
|