crewmate/crewmate

View on GitHub
app/models/user/avatar.rb

Summary

Maintainability
A
1 hr
Test Coverage
# -*- encoding : utf-8 -*-
class User

  AvatarSizes = {
    :micro    => [24, 24],
    :thumb    => [48, 48],
    :profile  => [278, 500]
  }

  has_attached_file :avatar,
    :url  => "/avatars/:id/:style.png",
    :path => (Teambox.config.amazon_s3 ? "avatars/:id/:style.png" : ":rails_root/public/avatars/:id/:style.png"),
    :styles => AvatarSizes.each_with_object({}) { |(name, size), all|
        all[name] = ["%dx%d%s" % [size[0], size[1], size[0] < size[1] ? '>' : '#'], :png]
      }

  attr_accessible :avatar, :avatar_destroy

  #validates_attachment_presence :avatar, :unless => Proc.new { |user| user.new_record? }
  validates_attachment_size :avatar, :less_than => 2.megabytes
  validates_attachment_content_type :avatar,
    :content_type => %w[image/jpeg image/pjpeg image/png image/x-png image/gif]

  def cropping?
    !crop_x.blank? && !crop_y.blank? && !crop_w.blank? && !crop_h.blank?
  end

  def avatar_geometry(style = :original)
    @geometry ||= {}
    @geometry[style] ||= Paperclip::Geometry.from_file(avatar.path(style))
  end

  def avatar_or_gravatar_path(size, secure = false)
    (avatar? ? avatar.url(size) : gravatar(size, secure)).tap do |avatar_url|
      avatar_url.sub! 'http:', 'https:' if secure
    end
  end

  def avatar_or_gravatar_url(size = :thumb, secure = false)
    avatar_or_gravatar_path(size, secure).tap do |url|
      if url.starts_with? 'http'
        scheme = secure ? 'https:' : 'http:'
        url.sub('http:', scheme)
      else
        scheme = secure ? 'https:' : 'http:'
        url.replace '%s//%s%s' % [scheme, Teambox.config.app_domain, url]
      end
    end
  end

  def avatar_destroy
    false
  end

  def avatar_destroy=(value)
    self.avatar = nil if value and value != '0'
  end

  private

    def gravatar_id
      Digest::MD5.hexdigest email.downcase
    end

    def gravatar(size, secure = false, default = Teambox.config.gravatar_default)
      (secure ? 'https://secure.' : 'http://www.').tap do |url|
        url << "gravatar.com/avatar/#{gravatar_id}?size=#{AvatarSizes[size][0]}"
        url << "&default=#{default}" if default
      end
    end

end