X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=app%2Fmodels%2Foriginal_picture.rb;fp=app%2Fmodels%2Foriginal_picture.rb;h=e323eb6485c17ac4447daf62f8024c670baf26e1;hb=305ee1ab4982332ba8e3b4f9d0f7299903c0a665;hp=d178db2066244c3976a7e6880a996018791c8525;hpb=6a9d02a32b5c300f00b3a69dd0ee7669cf8dac34;p=pettanr%2Fpettanr.git diff --git a/app/models/original_picture.rb b/app/models/original_picture.rb index d178db20..e323eb64 100644 --- a/app/models/original_picture.rb +++ b/app/models/original_picture.rb @@ -3,6 +3,13 @@ class OriginalPicture < ActiveRecord::Base belongs_to :license has_one :resource_picture + validates :ext, :presence => true, :length => {:maximum => 4}, :inclusion => {:in => ['png', 'jpeg', 'gif']} + validates :width, :presence => true, :numericality => true, :natural_number => true + validates :height, :presence => true, :numericality => true, :natural_number => true + validates :filesize, :presence => true, :numericality => {:greater_than => 0, :less_than_or_equal_to => 2000000}, :natural_number => true + validates :artist_id, :presence => true, :numericality => true, :existence => true + validates :license_id, :presence => true, :numericality => true, :existence => true + before_destroy :destroy_with_file def validate @@ -87,14 +94,20 @@ class OriginalPicture < ActiveRecord::Base '/original_pictures/' + filename end - def store(picture_data, art, lid = nil) - res = false + def data_to_mgk picture_data begin mgk = Magick::Image.from_blob(picture_data).shift rescue self.errors.add :base, 'magick failed' return false end + mgk + end + + def store(picture_data, art, lid = nil) + mgk = data_to_mgk picture_data + return false unless mgk + res = false self.attributes = {:ext => mgk.format.downcase, :width => mgk.columns, :height => mgk.rows, :filesize => mgk.filesize, :artist_id => art.id, :license_id => lid.blank? ? art.default_license_id : lid.to_i @@ -104,10 +117,12 @@ class OriginalPicture < ActiveRecord::Base if res = PictureIO.original_picture_io.put(picture_data, self.filename) rp = ResourcePicture.update_picture(self) unless rp.store(mgk) + res = false PictureIO.original_picture_io.delete(self.filename) self.errors.add :base, 'resource picture copying error' raise ActiveRecord::Rollback end + res = true else self.errors.add :base, 'original picture io does not work' raise ActiveRecord::Rollback