class FeedProcessorUtils::FeedPostBuilder
Public Class Methods
config()
click to toggle source
# File lib/feed_processor_utils/feed_post_builder.rb, line 113 def self.config @@config ||= YAML.load(File.read(@@config_file)) end
dimensions_ok?(dimensions)
click to toggle source
# File lib/feed_processor_utils/feed_post_builder.rb, line 48 def self.dimensions_ok?(dimensions) ratio = (0.5..2.5).cover?(dimensions.first.to_f / dimensions.last.to_f) unless dimensions.last.to_i == 0 ratio ||= false ratio && have_minimum_size?(dimensions) end
ensure_absolute(url, host)
click to toggle source
# File lib/feed_processor_utils/feed_post_builder.rb, line 17 def self.ensure_absolute(url, host) url[0] == "/" ? "http://"+ host + url : url end
get_image_dimensions(uri)
click to toggle source
# File lib/feed_processor_utils/feed_post_builder.rb, line 32 def self.get_image_dimensions(uri) begin match = match_based64?(uri) if match base64 = uri.split(",").last img = Magick::Image.read_inline(base64)[0] else img = Magick::Image.read(uri)[0] end [img.columns, img.rows] rescue [0,0] end end
get_images(item_data, is_news, customized = "default")
click to toggle source
# File lib/feed_processor_utils/feed_post_builder.rb, line 59 def self.get_images(item_data, is_news, customized = "default") customized ||= "default" image_urls = [] domain = URI.parse(URI.encode(item_data[:url] || item_data[:id])) specific_images = if customized == "default" [:og_image, :image] elsif customized == "og_image" [:og_image] elsif customized == "html_images" [:image] else [] end specific_images.each do |key| url = item_data[key] if url url = ensure_absolute(url.to_s, domain.to_s) if have_minimum_size?(get_image_dimensions(url)) break if image_urls << url end end end if ["default", "lazy_images", "html_images"].include?(customized) nominated_images = if (customized == "lazy_images") && item_data[:lazy_image_tags].present? item_data[:lazy_image_tags] else item_data[:images_in_text] end with_size = nominated_images.map do |url| {url: url, dim: get_image_dimensions(url)} end largest_img = with_size.sort_by do |img| dim = img[:dim] dim ? dim[0] * dim[1] : 0 end.last if largest_img if is_news image_urls << largest_img[:url] if largest_img[:dim] && have_minimum_size?(largest_img[:dim]) else image_urls.unshift(largest_img[:url]) if largest_img[:dim] && dimensions_ok?(largest_img[:dim]) end end end image_urls end
get_videos(item_data)
click to toggle source
# File lib/feed_processor_utils/feed_post_builder.rb, line 105 def self.get_videos(item_data) item_data[:videos_in_text].map do |video| video = "http:" + video if video[0..1] == "//" # sometimes the protocol is omitted from video url video end end
have_minimum_size?(dimensions)
click to toggle source
# File lib/feed_processor_utils/feed_post_builder.rb, line 55 def self.have_minimum_size?(dimensions) dimensions.first.to_i >= 300 && dimensions.last.to_i >= 150 end
longest_content(*strings)
click to toggle source
# File lib/feed_processor_utils/feed_post_builder.rb, line 25 def self.longest_content(*strings) strings.sort_by! do |string| string.to_s.gsub(/[\n\r]/,' ').gsub(/ /, " ").gsub(/(<\/?[^<>]+>)/,' ').gsub(/\s{2,}/, ' ').gsub(/ / ,' ').split(' ').size end strings.last end
match_based64?(uri)
click to toggle source
# File lib/feed_processor_utils/feed_post_builder.rb, line 21 def self.match_based64?(uri) /data:\w+\/\w+;base64,/.match(uri) end
replacements(options = {})
click to toggle source
# File lib/feed_processor_utils/feed_post_builder.rb, line 117 def self.replacements(options = {}) config[:replacements] end
sanitize(text, options = {})
click to toggle source
# File lib/feed_processor_utils/feed_post_builder.rb, line 9 def self.sanitize(text, options = {}) return nil unless text replacements(options).each do |pattern, replacement| text.gsub!(pattern, replacement) end text end