X-Git-Url: http://git.osdn.net/view?p=pettanr%2Fpettanr.git;a=blobdiff_plain;f=app%2Fmodels%2Fspeech_balloon_template.rb;h=b5f12e0cbf9af65868d0ce0c149ab91000c60f13;hp=de6d053cdb71c29d9c37528d909b0f5527f30117;hb=aec34f8b39f39ec0794d39c878659487909f0136;hpb=aac8dcaac3363c67a15a6fbd77da900ff4d63dbe diff --git a/app/models/speech_balloon_template.rb b/app/models/speech_balloon_template.rb index de6d053c..b5f12e0c 100644 --- a/app/models/speech_balloon_template.rb +++ b/app/models/speech_balloon_template.rb @@ -1,12 +1,89 @@ class SpeechBalloonTemplate < ActiveRecord::Base - has_many :balloon_templates, :dependent => :destroy - has_many :speech_templates, :dependent => :destroy - accepts_nested_attributes_for :balloon_templates - accepts_nested_attributes_for :speech_templates + has_many :speech_balloons + + validates :name, :presence => true, :uniqueness => true, :length => {:maximum => 50} + validates :classname, :presence => true, :length => {:maximum => 50} + validates :caption, :presence => true, :length => {:maximum => 30} + validates :t, :presence => true, :numericality => {:greater_than_or_equal_to => 0} + validates :settings, :presence => true + before_create :supply_t def supply_t - self.t = SpeechBalloon.maximum(:t).to_i + 1 + m = SpeechBalloonTemplate.maximum(:t) + t = m.blank? ? -1 : m.to_i + self.t = t + 1 + end + + def pic_rehash hash + res = true + hash["templates"].each do |n, v| + d = (v["balloon"] || {})["system_picture"] + next nil if d.blank? + sp = SystemPicture.store Base64.decode64(d.to_s) + unless sp + res = false + break + end + v["balloon"]["system_picture_id"] = sp.id + v["balloon"].delete "system_picture" + end + res + end + + def store hash + res = nil + SpeechBalloonTemplate.transaction do + res = pic_rehash hash + if res + data = {:classname => hash["classname"], :caption => hash["caption"], :settings => hash.to_s} + self.attributes = data + res = self.save + end + raise ActiveRecord::Rollback unless res + end + res + end + + def self.store name, hash + st = SpeechBalloonTemplate.find_by_name name + st = SpeechBalloonTemplate.new(:name => name) unless st + st.store hash + st + end + + def self.parse(data) + res = data + begin + res = JSON.parse(data) if data.is_a?(String) + rescue + return false + end + res + end + + def self.import(data) + d = SpeechBalloonTemplate.parse(data) + return false unless d + res = [] + SpeechBalloonTemplate.transaction do + d.each do |name, hash| + st = SpeechBalloonTemplate.store name, hash + res.push(st) unless st.valid? + end + raise ActiveRecord::Rollback unless res.empty? + end + res + end + + def self.import_file(filename) + t = nil + begin + t = File.open(filename, 'r').read + rescue + return false + end + SpeechBalloonTemplate.import t end end