class Mwkrom::BlogReader

Copyright© MW Krom LLC, All Rights Reserved

Attributes

expires_in[RW]
feed_url[RW]
key[RW]

Public Instance Methods

articles_for(tags) click to toggle source
# File lib/mwkrom/blog_reader.rb, line 12
def articles_for(tags)
  ActiveSupport::JSON.decode(json_articles_for(tags))
end
internal_articles_for(tags) click to toggle source
# File lib/mwkrom/blog_reader.rb, line 28
def internal_articles_for(tags)
  d = latest_feed_dom
  if d.blank?  # bad connection; empty data; etc.
    return []
  end
  items = (d/:item).select do |item|
    tags.empty? || ((item/:category).any? {|x| tags.include?(x.inner_text)})
  end
  items.map do |item|
    {:url => item.at('link').inner_html,
      :title => item.at('title').inner_html,
      :pubDate => (item.at('pubDate') && item.at('pubDate').inner_html),
      :creator => (item.at('dc:creator') && item.at('dc:creator').inner_html),
      :description => item.at('description').inner_text}
  end
end
json_articles_for(tags) click to toggle source
# File lib/mwkrom/blog_reader.rb, line 16
def json_articles_for(tags)
  tkey = tags.join(":").gsub(' ', '')
  cache_key = "blog_reader_tags:#{tkey}:#{key}"
  Rails.cache.fetch(cache_key, :expires_in => use_expires_in) do
    json_internal_articles_for(tags)
  end
end
json_internal_articles_for(tags) click to toggle source
# File lib/mwkrom/blog_reader.rb, line 24
def json_internal_articles_for(tags)
  internal_articles_for(tags).to_json
end
latest_feed_dom() click to toggle source
# File lib/mwkrom/blog_reader.rb, line 57
def latest_feed_dom
  latest_feed_xml.present? && Hpricot::XML(latest_feed_xml)
end
latest_feed_xml() click to toggle source
# File lib/mwkrom/blog_reader.rb, line 45
def latest_feed_xml
  cache_key = "blog_reader_all:#{key}"
  Rails.cache.fetch(cache_key, :expires_in => use_expires_in) do
    begin
      res = Net::HTTP.get_response(URI.parse(feed_url))
      res && res.body
    rescue Errno::ECONNREFUSED => e
      ""
    end
  end
end
use_expires_in() click to toggle source
# File lib/mwkrom/blog_reader.rb, line 8
def use_expires_in
  expires_in || 10.minutes
end