pluto-models 1.5.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Manifest.txt +1 -0
- data/lib/pluto/models/feed.rb +31 -0
- data/lib/pluto/version.rb +1 -1
- data/test/test_delete_removed.rb +66 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b81d3634465206e2bac108bcff1629627a250fd0
|
4
|
+
data.tar.gz: c5b02063eb4ac615fd6e2be6fef55847a24be435
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c925c6718b7ee40814b4bda67fb99fb19347adc5cba20a030ea1dcddb1d48311050cc3c358e77e103459c9fc650aa38641ea3c6200b32eb03e2d7497e9944264
|
7
|
+
data.tar.gz: 61364d47455fca58c1cc02282d712f846df860162a1455327c774ce73e6cd73af9545f2f5c2fad5effa7b0519e6e192d13302f9e80af29c8b1f56a12665d911d
|
data/Manifest.txt
CHANGED
data/lib/pluto/models/feed.rb
CHANGED
@@ -125,6 +125,37 @@ class Feed < ActiveRecord::Base
|
|
125
125
|
end # each item
|
126
126
|
|
127
127
|
|
128
|
+
###
|
129
|
+
# delete (old) feed items if no longer in feed AND
|
130
|
+
# date range is in (lastest/current) feed list
|
131
|
+
#
|
132
|
+
# thanks to Harry Wood
|
133
|
+
# see https://github.com/feedreader/pluto/pull/16
|
134
|
+
# for more comments
|
135
|
+
|
136
|
+
#
|
137
|
+
# todo/fix: use a delete feature/command line flag to make it optional - why? why not?
|
138
|
+
|
139
|
+
|
140
|
+
guids_in_feed = data.items.map {|item| item.guid}
|
141
|
+
earliest_still_in_feed = data.items.min_by(&:published).published
|
142
|
+
|
143
|
+
items_no_longer_present =
|
144
|
+
Item
|
145
|
+
.where(feed_id: id)
|
146
|
+
.where.not(published: nil)
|
147
|
+
.where("published > ?", earliest_still_in_feed)
|
148
|
+
.where.not(guid: guids_in_feed)
|
149
|
+
|
150
|
+
unless items_no_longer_present.empty?
|
151
|
+
logger.info "#{items_no_longer_present.size} items no longer present in the feed (presumed removed at source). Deleting from pluto db"
|
152
|
+
items_no_longer_present.each do |item|
|
153
|
+
logger.info "** DELETE | #{item.title}"
|
154
|
+
item.destroy
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
|
128
159
|
# update cached value last published for item
|
129
160
|
## todo/check: force reload of items - why? why not??
|
130
161
|
last_item_rec = items.latest.limit(1).first # note limit(1) will return relation/arrar - use first to get first element or nil from ary
|
data/lib/pluto/version.rb
CHANGED
@@ -0,0 +1,66 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# to run use
|
5
|
+
# ruby -I ./lib -I ./test test/test_delete_removed.rb
|
6
|
+
# or better
|
7
|
+
# rake test
|
8
|
+
|
9
|
+
require 'helper'
|
10
|
+
|
11
|
+
class TestDeleteRemoved < MiniTest::Test
|
12
|
+
|
13
|
+
def test_delete_removed
|
14
|
+
|
15
|
+
feed = Feed.create!(
|
16
|
+
key: 'test',
|
17
|
+
title: 'Feed title'
|
18
|
+
)
|
19
|
+
|
20
|
+
feed_data = FeedParser::Feed.new
|
21
|
+
feed_data.title = 'Feed data title'
|
22
|
+
feed_data.items = []
|
23
|
+
|
24
|
+
item_data = FeedParser::Item.new
|
25
|
+
item_data.guid = 'https://myblog.com/?p=1113'
|
26
|
+
item_data.title = 'Good post #3'
|
27
|
+
item_data.published = Time.now
|
28
|
+
feed_data.items << item_data
|
29
|
+
|
30
|
+
item_data = FeedParser::Item.new
|
31
|
+
item_data.guid = 'https://myblog.com/?p=1112'
|
32
|
+
item_data.title = 'Spam post #2'
|
33
|
+
item_data.published = Time.now - 10.minutes
|
34
|
+
feed_data.items << item_data
|
35
|
+
|
36
|
+
item_data = FeedParser::Item.new
|
37
|
+
item_data.guid = 'https://myblog.com/?p=1111'
|
38
|
+
item_data.title = 'Good post #1'
|
39
|
+
item_data.published = Time.now - 20.minutes
|
40
|
+
|
41
|
+
feed_data.items << item_data
|
42
|
+
|
43
|
+
feed.deep_update_from_struct!( feed_data )
|
44
|
+
|
45
|
+
assert_equal(3, Item.count)
|
46
|
+
|
47
|
+
|
48
|
+
feed_data.items = []
|
49
|
+
|
50
|
+
item_data = FeedParser::Item.new
|
51
|
+
item_data.guid = 'https://myblog.com/?p=1113'
|
52
|
+
item_data.title = 'Good post #2'
|
53
|
+
item_data.published = Time.now
|
54
|
+
feed_data.items << item_data
|
55
|
+
|
56
|
+
item_data = FeedParser::Item.new
|
57
|
+
item_data.guid = 'https://myblog.com/?p=1111'
|
58
|
+
item_data.title = 'Good post #1'
|
59
|
+
item_data.published = Time.now - 20.minutes
|
60
|
+
feed_data.items << item_data
|
61
|
+
|
62
|
+
feed.deep_update_from_struct!( feed_data )
|
63
|
+
|
64
|
+
assert_equal(2, Item.count)
|
65
|
+
end
|
66
|
+
end # class TestDeleteRemoved
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pluto-models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: props
|
@@ -203,6 +203,7 @@ files:
|
|
203
203
|
- lib/pluto/version.rb
|
204
204
|
- test/data/ruby.ini
|
205
205
|
- test/helper.rb
|
206
|
+
- test/test_delete_removed.rb
|
206
207
|
- test/test_filter.rb
|
207
208
|
- test/test_helpers.rb
|
208
209
|
- test/test_site.rb
|