class Metacode < ActiveRecord::Base has_many :in_metacode_sets has_many :metacode_sets, :through => :in_metacode_sets has_many :topics # This method associates the attribute ":aws_icon" with a file attachment has_attached_file :aws_icon, :styles => { :ninetysix => ['96x96#', :png], }, :default_url => 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_wildcard.png' # Validate the attached icon is image/jpg, image/png, etc validates_attachment_content_type :aws_icon, :content_type => /\Aimage\/.*\Z/ validate :aws_xor_manual_icon validate :manual_icon_https before_create do self.manual_icon = nil if self.manual_icon == "" end def icon(*args) if manual_icon.present? manual_icon else aws_icon(*args) end end def as_json(options={}) default = super(options) default[:icon] = icon default.except('aws_icon_file_name', 'aws_icon_content_type', 'aws_icon_file_size', 'aws_icon_updated_at', 'manual_icon') end def hasSelected(user) return true if user.settings.metacodes.include? self.id.to_s return false end def inMetacodeSet(metacode_set) return true if self.metacode_sets.include? metacode_set return false end private def aws_xor_manual_icon if aws_icon.blank? && manual_icon.blank? errors.add(:base, "Either aws_icon or manual_icon is required") end if aws_icon.present? && manual_icon.present? errors.add(:base, "Specify aws_icon or manual_icon, not both") end end def manual_icon_https if manual_icon.present? unless manual_icon.starts_with? 'https' errors.add(:base, "Manual icon must begin with https") end end end end