Sha256: 7fea9d5e072bea2f1302851e2927b6081b91fe32d2d8ff57f0afe34a9a82557d
Contents?: true
Size: 1.74 KB
Versions: 5
Compression:
Stored size: 1.74 KB
Contents
# frozen_string_literal: true module GravatarImageTag class << self attr_accessor :configuration end def self.configuration @configuration ||= Configuration.new end def self.configure yield(configuration) end class Configuration attr_accessor :default_image, :filetype, :rating, :size end def self.included(base) GravatarImageTag.configure { |_c| nil } base.send :include, InstanceMethods end module InstanceMethods def gravatar_image_tag(email, options = {}) raise ArgumentError, "Options must be a hash, got #{options.inspect}" unless options.is_a? Hash options[:alt] ||= 'Gravatar' image_tag(GravatarImageTag.gravatar_url(email, options.delete(:gravatar)), options) end end def self.gravatar_url(email, overrides = {}) overrides ||= {} gravatar_params = { default: GravatarImageTag.configuration.default_image, filetype: GravatarImageTag.configuration.filetype, rating: GravatarImageTag.configuration.rating, size: GravatarImageTag.configuration.size }.merge(overrides).delete_if { |_key, value| value.nil? } "#{gravatar_url_base}/#{gravatar_id(email, gravatar_params.delete(:filetype))}#{url_params(gravatar_params)}" end def self.gravatar_url_base 'https://gravatar.com/avatar' end def self.gravatar_id(email, filetype = nil) "#{Digest::MD5.hexdigest(email)}#{".#{filetype}" unless filetype.nil?}" unless email.nil? end def self.url_params(gravatar_params) return nil if gravatar_params.keys.empty? "?#{gravatar_params.map { |key, value| "#{key}=#{CGI.escape(value.is_a?(String) ? value : value.to_s)}" }.join('&')}" end end ActionView::Base.include GravatarImageTag if defined?(ActionView::Base)
Version data entries
5 entries across 5 versions & 1 rubygems