module IziLightup::SmartPicture
Public Class Methods
render(object, fields = %i[picture], versions = [], params = {}) { |url, params| ... }
click to toggle source
# File lib/izi_lightup/smart_picture.rb, line 8 def render(object, fields = %i[picture], versions = [], params = {}) return '' if object.blank? items = fetch_items(object, fields) return '' if items.blank? versions = Array.wrap(versions) items.each do |item| next unless item.respond_to?(:data) versions.each do |version_name| next unless version_name == :default || item.data.respond_to?(version_name) version = version_name == :default ? item.data : item.data.public_send(version_name) next unless version_exists?(version) url = version.url dimensions = safe_dimentions(item, version) params.merge!(dimensions) if dimensions.present? return image_tag(url, params) unless block_given? yield(url, params) return '' end end '' end
Private Class Methods
fallback_dimentions(item)
click to toggle source
# File lib/izi_lightup/smart_picture.rb, line 46 def fallback_dimentions(item) [item&.width, item&.height].compact end
fetch_items(object, fields)
click to toggle source
# File lib/izi_lightup/smart_picture.rb, line 67 def fetch_items(object, fields) Array.wrap(fields).map do |name| object.respond_to?(name) ? object.public_send(name) : nil end.compact end
safe_dimentions(item, version)
click to toggle source
# File lib/izi_lightup/smart_picture.rb, line 58 def safe_dimentions(item, version) dimensions = fallback_dimentions(item) if version.url =~ /https?:/ dimensions ||= safe_dimentions_extract(item, version) return {} if dimensions.blank? || (dimensions.size != 2) %i[width height].zip(dimensions).to_h end
safe_dimentions_extract(item, version)
click to toggle source
# File lib/izi_lightup/smart_picture.rb, line 50 def safe_dimentions_extract(item, version) begin version.dimensions rescue MiniMagick::Error => _e fallback_dimentions(item) end end
version_exists?(version)
click to toggle source
# File lib/izi_lightup/smart_picture.rb, line 40 def version_exists?(version) return true if version&.url&.present? && version.url =~ /https?:/ version&.file&.exists? && version&.url&.present? end