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
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
# File 'lib/sequel_paperclip.rb', line 39
def attachment(name, options)
attr_accessor name
Attachment.preprocess_options(options)
self.attachments = attachments.merge(name => options)
columns = db_schema.keys
unless columns.include?(:"#{name}_filename") || columns.include?(:"#{name}_basename")
raise ArgumentError, "a column named #{name}_filename or #{name}_basename has to exist"
end
if columns.include?(:"#{name}_filename")
if columns.include?(:"#{name}_basename")
raise ArgumentError, "it does not make sense to have a column named #{name}_filename and #{name}_basename"
end
define_method("#{name}_basename") do
filename = send("#{name}_filename")
filename ? filename.gsub(/\..+$/, "") : nil
end
define_method("#{name}_basename=") do |basename|
if basename
old_filename = send("#{name}_filename")
extname = old_filename ? File.extname(old_filename) : ""
send("#{name}_filename=", basename+extname)
else
send("#{name}_filename=", nil)
end
end
define_method("#{name}_extname") do
filename = send("#{name}_filename")
filename ? File.extname(filename) : nil
end
define_method("#{name}_extname=") do |extname|
if extname
old_filename = send("#{name}_filename")
basename = old_filename ? old_filename.gsub(/\..+$/, "") : ""
send("#{name}_filename=", basename+extname)
else
send("#{name}_filename=", nil)
end
end
end
define_method("#{name}") do
@attachment_instances ||= {}
@attachment_instances[name] ||= Attachment.new(self, name, options)
end
define_method("#{name}=") do |value|
attachment = send("#{name}")
attachment.update(nil)
if value
basename = attachment_generate_basename(attachment)
send("#{name}_basename=", basename)
original_filename = File.basename(value.respond_to?(:original_filename) ? value.original_filename : value.path)
if respond_to?("#{name}_filename")
send("#{name}_filename=", basename+File.extname(original_filename).downcase)
end
if respond_to?("#{name}_filesize")
send("#{name}_filesize=", value.size)
end
if respond_to?("#{name}_originalname")
send("#{name}_originalname=", original_filename)
end
else
send("#{name}_basename=", nil)
end
attachment.update(value)
modified!
end
define_method("#{name}?") do
attachment = send("#{name}")
attachment.exists?
end
end
|