Class: RssNotifier::Db
- Inherits:
-
Object
- Object
- RssNotifier::Db
- Defined in:
- lib/rss_notifier/db.rb
Instance Attribute Summary collapse
-
#feeds ⇒ Object
Returns the value of attribute feeds.
-
#store ⇒ Object
readonly
Returns the value of attribute store.
Class Method Summary collapse
Instance Method Summary collapse
- #changed? ⇒ Boolean
-
#changed_items ⇒ Array
Of Item.
- #find_feed(url:) ⇒ RssNotifier::Models::Feed
-
#get_feed(url:, name:) ⇒ RssNotifier::Models::Feed
Creates new Feed if not found.
-
#initialize(store) ⇒ Db
constructor
A new instance of Db.
- #load ⇒ Object
- #save ⇒ Object
-
#update(new_items) ⇒ Boolean
Changed?.
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
#feeds ⇒ Object
Returns the value of attribute feeds.
9 10 11 |
# File 'lib/rss_notifier/db.rb', line 9 def feeds @feeds end |
#store ⇒ Object (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
.default ⇒ RssNotifier::Db
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
33 34 35 |
# File 'lib/rss_notifier/db.rb', line 33 def changed? 0 < changed_items.size end |
#changed_items ⇒ Array
Returns 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.
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 |
#load ⇒ Object
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 |
#save ⇒ Object
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?.
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 |