Class: RssNotifier::Db

Inherits:
Object
  • Object
show all
Defined in:
lib/rss_notifier/db.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(store) ⇒ Db

Returns a new instance of Db.



12
13
14
15
# File 'lib/rss_notifier/db.rb', line 12

def initialize(store)
  @feeds = {}
  @store = store
end

Instance Attribute Details

#feedsObject

Returns the value of attribute feeds.



9
10
11
# File 'lib/rss_notifier/db.rb', line 9

def feeds
  @feeds
end

#storeObject (readonly)

Returns the value of attribute store.



8
9
10
# File 'lib/rss_notifier/db.rb', line 8

def store
  @store
end

Class Method Details

.defaultRssNotifier::Db

Returns:



83
84
85
# File 'lib/rss_notifier/db.rb', line 83

def self.default
  @default or raise "Not initialized"
end

.default=(default) ⇒ Object



87
88
89
# File 'lib/rss_notifier/db.rb', line 87

def self.default=(default)
  @default = default
end

.load(filename) ⇒ Object



91
92
93
94
95
96
# 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

Instance Method Details

#changed?Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/rss_notifier/db.rb', line 33

def changed?
  0 < changed_items.size
end

#changed_itemsArray

Returns of Item.

Returns:

  • (Array)

    of Item



38
39
40
41
42
43
44
45
46
# 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:) ⇒ RssNotifier::Models::Feed



66
67
68
# File 'lib/rss_notifier/db.rb', line 66

def find_feed(url:)
  @feeds[url.to_s.strip]
end

#get_feed(url:, name:) ⇒ RssNotifier::Models::Feed

Returns creates new Feed if not found.

Returns:



61
62
63
# 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

#loadObject



70
71
72
73
74
75
76
77
78
79
80
# 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

#saveObject



48
49
50
51
52
53
54
55
56
57
58
# 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) ⇒ Boolean

Returns changed?.

Parameters:

  • url (String)
  • items (Array)

    of Item

Returns:

  • (Boolean)

    changed?



20
21
22
23
24
25
26
27
28
29
30
31
# 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