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(/&nbsp;/, " ").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