class RssNotifier::Db

Attributes

feeds[RW]
store[R]

Public Class Methods

default() click to toggle source

@return [RssNotifier::Db]

# File lib/rss_notifier/db.rb, line 83
def self.default
  @default or raise "Not initialized"
end
default=(default) click to toggle source
# File lib/rss_notifier/db.rb, line 87
def self.default=(default)
  @default = default
end
load(filename) click to toggle source
# File lib/rss_notifier/db.rb, line 91
def self.load(filename)
  store = YAML::Store.new(filename)
  RssNotifier::Db.default = RssNotifier::Db.new(store)
  RssNotifier::Db.default.load
  RssNotifier::Db.default
end
new(store) click to toggle source
# File lib/rss_notifier/db.rb, line 12
def initialize(store)
  @feeds = {}
  @store = store
end

Public Instance Methods

changed?() click to toggle source
# File lib/rss_notifier/db.rb, line 33
def changed?
  0 < changed_items.size
end
changed_items() click to toggle source

@return [Array] of Item

# File lib/rss_notifier/db.rb, line 38
def changed_items
  ch_items = []
  @items.each do |url, item|
    if item.new_record? || item.changed?
      ch_items << item
    end
  end
  ch_items
end
find_feed(url:) click to toggle source

@return [RssNotifier::Models::Feed]

# File lib/rss_notifier/db.rb, line 66
def find_feed(url:)
  @feeds[url.to_s.strip]
end
get_feed(url:, name:) click to toggle source

@return [RssNotifier::Models::Feed] creates new Feed if not found

# File lib/rss_notifier/db.rb, line 61
def get_feed(url:, name:)
  @feeds[url] ||= RssNotifier::Models::Feed.new(url: url.to_s.strip, name: name)
end
load() click to toggle source
# File lib/rss_notifier/db.rb, line 70
def load
  @feeds = {}
  store.transaction do
    feeds_raw = store['feeds'] || {}
    feeds_raw.each do |url, feed_raw|
      feed = RssNotifier::Models::Feed.new(feed_raw)
      @feeds[feed.url] = feed
    end
  end
  self
end
save() click to toggle source
# File lib/rss_notifier/db.rb, line 48
def save
  return true unless changed?

  @items.each do |url, item|
    item.saved_at = Time.now
  end
  store.transaction do
    store['items'] = @items
  end
  true
end
update(new_items) click to toggle source

@param url [String] @param items [Array] of Item @return [Boolean] changed?

# File lib/rss_notifier/db.rb, line 20
def update(new_items)
  new_items.each do |item|
    if !item.link || item.link.empty?
      RssNotifier.logger.warn "Empty item_url for url #{item.link}"
      next
    end

    old_item = self.items[item.link] ||= Item.new
    old_item.update(item.to_h)
  end
  changed?
end