pluto-update 1.5.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 49adc91fcbc3b7df6d0ee5aed048fa0df4abb186
4
- data.tar.gz: 16b22d7a9993c287f592176acd9991ac5d42e3c5
3
+ metadata.gz: 3cab5151cc7be3216603e278be99cf277f8272e3
4
+ data.tar.gz: f263272dc082e8711c86b35b483d5c728ae3e84b
5
5
  SHA512:
6
- metadata.gz: c0db8f9b7dcb72009df75b4cc001fe522e579f4b55bc8292b7ab5d19f4166aead75084b0da9356444dddd00b999a372e9972abaedf9230497706db138d766f80
7
- data.tar.gz: 0fc2ba83226d96ca4b9a71829079c7232322997963230a99cda0948ae4591dc4071725ddc287a2485dcdb083ec8fc1015c0399a50238ff78901f0dd39d908d00
6
+ metadata.gz: c9f15b1922b07931ced857ae9da048cce89d13fe3bde2fdec09600869752aaa9424fca3dd1e42d6f2ae159b59e797c8fc8cc5cdc6533bbab0d70cb0c0776855d
7
+ data.tar.gz: 2d3a986e53d7d81a8817753ed9272056b0fe59cf7835af224237d9fc595de2be3fd0f4770b4b042ec03ddd16a4aa8b27577225f8ffc8c0e1fac17c6700a579e4
@@ -6,9 +6,7 @@ lib/pluto/update.rb
6
6
  lib/pluto/update/feed_refresher.rb
7
7
  lib/pluto/update/site_fetcher.rb
8
8
  lib/pluto/update/site_refresher.rb
9
- lib/pluto/update/site_updater.rb
10
9
  lib/pluto/update/version.rb
11
10
  test/data/ruby.ini
12
11
  test/helper.rb
13
12
  test/test_refresh.rb
14
- test/test_site.rb
data/Rakefile CHANGED
@@ -18,7 +18,7 @@ Hoe.spec 'pluto-update' do
18
18
  self.history_file = 'HISTORY.md'
19
19
 
20
20
  self.extra_deps = [
21
- ['pluto-models', '>= 1.3.2'],
21
+ ['pluto-models', '>= 1.4.0'],
22
22
  ['pluto-feedfetcher', '>= 0.1.0'],
23
23
  ['fetcher', '>= 0.4.4'],
24
24
  ['preproc', '>= 0.1.0'],
@@ -15,7 +15,6 @@ require 'pluto/update/version' # Note: let version always go first
15
15
  require 'pluto/update/feed_refresher'
16
16
  require 'pluto/update/site_refresher'
17
17
  require 'pluto/update/site_fetcher'
18
- require 'pluto/update/site_updater'
19
18
 
20
19
 
21
20
 
@@ -69,7 +69,7 @@ private
69
69
  # on error or if http-not modified etc. skip update/processing
70
70
  return if feed_xml.nil?
71
71
 
72
- feed = FeedUtils::Parser.parse( feed_xml )
72
+ feed = FeedParser::Parser.parse( feed_xml )
73
73
 
74
74
  ## fix/todo: reload feed_red - fetched date updated etc.
75
75
  ## check if needed for access to fetched date
@@ -93,17 +93,8 @@ private
93
93
 
94
94
  ## fix/todo: pass debug flag as opts - debug: true|false !!!!!!
95
95
  # fix/todo: find a better name - why? why not?? => use update_from_struct!
96
- feed_rec.save_from_struct!( feed )
97
-
98
- # update cached value last published for item
99
- last_item_rec = feed_rec.items.latest.limit(1).first # note limit(1) will return relation/arrar - use first to get first element or nil from ary
100
- if last_item_rec.present?
101
- if last_item_rec.published?
102
- feed_rec.update_attributes!( last_published: last_item_rec.published )
103
- else # try touched
104
- feed_rec.update_attributes!( last_published: last_item_rec.touched )
105
- end
106
- end
96
+ feed_rec.deep_update_from_struct!( feed )
97
+
107
98
  end # method refresh_feed_worker
108
99
 
109
100
  end # class FeedRefresher
@@ -50,15 +50,8 @@ private
50
50
 
51
51
  site_config = INI.load( site_text )
52
52
 
53
- site_updater = SiteUpdater.new
54
- site_updater.debug = debug? ? true : false # pass along debug flag
55
-
56
- ### todo/fix:
57
- ## allow passing in as first arg database rec!!!
58
- ## - if passed in database rec - do NOT lookup record by site_config.key!!!
59
- ## use existing key (lets you change/update key without creating a new duplicate site entry, for example)
60
- ## - or use a new method (instead of overloading arg) ?? - why? why not??
61
- site_updater.update_subscriptions_for( site_rec.key, site_config )
53
+ ### site_rec.debug = debug? ? true : false # pass along debug flag
54
+ site_rec.deep_update_from_hash!( site_config )
62
55
  end
63
56
 
64
57
  end # class SiteRefresher
@@ -4,7 +4,7 @@
4
4
  module PlutoUpdate
5
5
 
6
6
  MAJOR = 1
7
- MINOR = 5
7
+ MINOR = 6
8
8
  PATCH = 0
9
9
  VERSION = [MAJOR,MINOR,PATCH].join('.')
10
10
 
@@ -19,8 +19,7 @@ class TestRefresh < MiniTest::Test
19
19
  site_text = File.read( "#{PlutoUpdate.root}/test/data/ruby.ini")
20
20
  site_config = INI.load( site_text )
21
21
 
22
- site_updater = Pluto::SiteUpdater.new
23
- site_updater.update_subscriptions_for( 'ruby', site_config )
22
+ Site.deep_create_or_update_from_hash!( 'ruby', site_config )
24
23
  end
25
24
 
26
25
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pluto-update
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-11 00:00:00.000000000 Z
11
+ date: 2015-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pluto-models
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 1.3.2
19
+ version: 1.4.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 1.3.2
26
+ version: 1.4.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: pluto-feedfetcher
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -112,12 +112,10 @@ files:
112
112
  - lib/pluto/update/feed_refresher.rb
113
113
  - lib/pluto/update/site_fetcher.rb
114
114
  - lib/pluto/update/site_refresher.rb
115
- - lib/pluto/update/site_updater.rb
116
115
  - lib/pluto/update/version.rb
117
116
  - test/data/ruby.ini
118
117
  - test/helper.rb
119
118
  - test/test_refresh.rb
120
- - test/test_site.rb
121
119
  homepage: https://github.com/feedreader/pluto.update
122
120
  licenses:
123
121
  - Public Domain
@@ -145,5 +143,4 @@ signing_key:
145
143
  specification_version: 4
146
144
  summary: pluto-update - planet feed 'n' subscription updater
147
145
  test_files:
148
- - test/test_site.rb
149
146
  - test/test_refresh.rb
@@ -1,162 +0,0 @@
1
- # encoding: utf-8
2
-
3
-
4
- module Pluto
5
-
6
- class SiteUpdater
7
-
8
- include LogUtils::Logging
9
- include Models
10
-
11
- def debug=(value) @debug = value; end
12
- def debug?() @debug || false; end
13
-
14
-
15
- def update_subscriptions_for( name, config, opts={} )
16
-
17
- ## note: allow (optional) config of site key too
18
- site_key = config['key'] || config['slug']
19
- if site_key.nil?
20
- ## if no key configured; use (file)name; remove -_ chars
21
- ## e.g. jekyll-meta becomes jekyllmeta etc.
22
- site_key = name.downcase.gsub( /[\-_]/, '' )
23
- end
24
-
25
- site_attribs = {
26
- title: config['title'] || config['name'], # support either title or name
27
- url: config['source'] || config['url'], # support source or url for source url for auto-update (optional)
28
- author: config['author'] || config['owner'],
29
- email: config['email'],
30
- updated: Time.now, ## track last_update via pluto (w/ update_subscription_for fn)
31
- }
32
-
33
- logger.debug "site_attribs: #{site_attribs.inspect}"
34
-
35
- site_rec = Site.find_by_key( site_key )
36
- if site_rec.nil?
37
- site_rec = Site.new
38
- site_attribs[ :key ] = site_key
39
-
40
- ## use object_id: site.id and object_type: Site
41
- ## change - model/table/schema!!!
42
- Activity.create!( text: "new site >#{site_key}< - #{site_attribs[ :title ]}" )
43
- end
44
- site_rec.update_attributes!( site_attribs )
45
-
46
- # -- log update activity
47
- Activity.create!( text: "update subscriptions for site >#{site_key}<" )
48
-
49
- #### todo/fix:
50
- ## double check - how to handle delete
51
- ## feeds might get referenced by other sites
52
- ## cannot just delete feeds; only save to delete join table (subscriptions)
53
- ## check if feed "lingers" on with no reference (to site)???
54
-
55
- # clean out subscriptions and add again
56
- logger.debug "before site.subscriptions.delete_all - count: #{site_rec.subscriptions.count}"
57
- site_rec.subscriptions.destroy_all # note: use destroy_all NOT delete_all (delete_all tries by default only nullify)
58
- logger.debug "after site.subscriptions.delete_all - count: #{site_rec.subscriptions.count}"
59
-
60
- config.each do |key, value|
61
-
62
- ## todo: downcase key - why ??? why not???
63
-
64
- # skip "top-level" feed keys e.g. title, etc. or planet planet sections (e.g. planet,defaults)
65
- next if ['key','slug',
66
- 'title','name','name2','title2','subtitle',
67
- 'source', 'url',
68
- 'include','includes','exclude','excludes',
69
- 'feeds',
70
- 'author', 'owner', 'email',
71
- 'planet','defaults'].include?( key )
72
-
73
- ### todo/check:
74
- ## check value - must be hash
75
- # check if url or feed_url present
76
- # that is, check for required props/key-value pairs
77
-
78
- feed_key = key.to_s.dup
79
- feed_hash = value
80
-
81
- # todo/fix: use title from feed?
82
- # e.g. fill up auto_title, auto_url, etc.
83
-
84
- feed_attribs = {
85
- feed_url: feed_hash[ 'feed' ] || feed_hash[ 'feed_url' ] || feed_hash[ 'xml_url' ],
86
- url: feed_hash[ 'link' ] || feed_hash[ 'url' ] || feed_hash[ 'html_url' ],
87
- title: feed_hash[ 'title' ] || feed_hash[ 'name' ],
88
- title2: feed_hash[ 'title2' ] || feed_hash[ 'name2' ] || feed_hash[ 'subtitle'],
89
- includes: feed_hash[ 'includes' ] || feed_hash[ 'include' ],
90
- excludes: feed_hash[ 'excludes' ] || feed_hash[ 'exclude' ],
91
- author: feed_hash[ 'author' ] || feed_hash[ 'owner' ],
92
- email: feed_hash[ 'email' ],
93
- avatar: feed_hash[ 'avatar' ] || feed_hash[ 'face'],
94
- github: feed_hash[ 'github' ],
95
- twitter: feed_hash[ 'twitter' ],
96
- ## meetup: feed_hash[ 'meetup' ], -- remove from schema - virtual attrib ?? - why? why not??
97
- }
98
- feed_attribs[:encoding] = feed_hash['encoding']||feed_hash['charset'] if feed_hash['encoding']||feed_hash['charset']
99
-
100
- #####
101
- ##
102
- # auto-fill; convenience helpers
103
-
104
- if feed_hash['meetup']
105
- ## link/url = http://www.meetup.com/vienna-rb
106
- ## feed/feed_url = http://www.meetup.com/vienna-rb/events/rss/vienna.rb/
107
-
108
- feed_attribs[:url] = "http://www.meetup.com/#{feed_hash['meetup']}" if feed_attribs[:url].nil?
109
- feed_attribs[:feed_url] = "http://www.meetup.com/#{feed_hash['meetup']}/events/rss/#{feed_hash['meetup']}/" if feed_attribs[:feed_url].nil?
110
- end
111
-
112
- if feed_hash['googlegroups']
113
- ## link/url = https://groups.google.com/group/beerdb or
114
- ## https://groups.google.com/forum/#!forum/beerdb
115
- ## feed/feed_url = https://groups.google.com/forum/feed/beerdb/topics/atom.xml?num=15
116
-
117
- feed_attribs[:url] = "https://groups.google.com/group/#{feed_hash['googlegroups']}" if feed_attribs[:url].nil?
118
- feed_attribs[:feed_url] = "https://groups.google.com/forum/feed//#{feed_hash['googlegroups']}/topics/atom.xml?num=15" if feed_attribs[:feed_url].nil?
119
- end
120
-
121
- if feed_hash['github'] && feed_hash['github'].index('/') ## e.g. jekyll/jekyll
122
- ## link/url = https://github.com/jekyll/jekyll
123
- ## feed/feed_url = https://github.com/jekyll/jekyll/commits/master.atom
124
-
125
- feed_attribs[:url] = "https://github.com/#{feed_hash['github']}" if feed_attribs[:url].nil?
126
- feed_attribs[:feed_url] = "https://github.com/#{feed_hash['github']}/commits/master.atom" if feed_attribs[:feed_url].nil?
127
- end
128
-
129
- if feed_hash['rubygems']
130
- ## link/url = http://rubygems.org/gems/jekyll
131
- ## feed/feed_url = http://rubygems.org/gems/jekyll/versions.atom
132
-
133
- feed_attribs[:url] = "http://rubygems.org/gems/#{feed_hash['rubygems']}" if feed_attribs[:url].nil?
134
- feed_attribs[:feed_url] = "http://rubygems.org/gems/#{feed_hash['rubygems']}/versions.atom" if feed_attribs[:feed_url].nil?
135
- end
136
-
137
-
138
- puts "Updating feed subscription >#{feed_key}< - >#{feed_attribs[:feed_url]}<..."
139
-
140
- feed_rec = Feed.find_by_key( feed_key )
141
- if feed_rec.nil?
142
- feed_rec = Feed.new
143
- feed_attribs[:key] = feed_key
144
-
145
- ## use object_id: feed.id and object_type: Feed
146
- ## change - model/table/schema!!!
147
- ## todo: add parent_action_id - why? why not?
148
- Activity.create!( text: "new feed >#{feed_key}< - #{feed_attribs[:title]}" )
149
- end
150
-
151
- feed_rec.update_attributes!( feed_attribs )
152
-
153
- # add subscription record
154
- # note: subscriptions get cleaned out on update first (see above)
155
- site_rec.subscriptions.create!( feed_id: feed_rec.id )
156
- end
157
-
158
- end # method update_subscriptions_for
159
-
160
- end # class SiteUpdater
161
-
162
- end # module Pluto
@@ -1,47 +0,0 @@
1
- # encoding: utf-8
2
-
3
- ###
4
- # to run use
5
- # ruby -I ./lib -I ./test test/test_site.rb
6
- # or better
7
- # rake test
8
-
9
- require 'helper'
10
-
11
- class TestSite < MiniTest::Test
12
-
13
- def setup
14
- Site.delete_all
15
- Feed.delete_all
16
- Item.delete_all
17
- Subscription.delete_all
18
- end
19
-
20
-
21
- def test_site_updater
22
- site_text = File.read( "#{PlutoUpdate.root}/test/data/ruby.ini")
23
- site_config = INI.load( site_text )
24
- pp site_config
25
-
26
- assert_equal 0, Site.count
27
- assert_equal 0, Feed.count
28
-
29
- site_updater = Pluto::SiteUpdater.new
30
- site_updater.update_subscriptions_for( 'ruby', site_config )
31
-
32
- assert_equal 1, Site.count
33
- assert_equal 3, Feed.count
34
-
35
- ruby = Site.find_by_key!( 'ruby' )
36
- assert_equal 'Planet Ruby', ruby.title
37
- assert_equal 3, ruby.subscriptions.count
38
- assert_equal 3, ruby.feeds.count
39
-
40
- rubylang = Feed.find_by_key!( 'rubylang' )
41
- assert_equal 'Ruby Lang News', rubylang.title
42
- assert_equal 'http://www.ruby-lang.org/en/news', rubylang.url
43
- assert_equal 'http://www.ruby-lang.org/en/feeds/news.rss', rubylang.feed_url
44
- end
45
-
46
- end # class TestSite
47
-