pluto 0.7.0 → 0.8.0

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.
data/lib/pluto/updater.rb CHANGED
@@ -22,6 +22,9 @@ class Updater
22
22
  end
23
23
 
24
24
  def fetch_feed( url )
25
+
26
+ ### fix: use worker.get( url ) # check http response code etc.
27
+
25
28
  xml = worker.read( url )
26
29
 
27
30
  ###
@@ -42,60 +45,77 @@ class Updater
42
45
  end
43
46
 
44
47
 
45
- def parse_feed( xml )
46
- parser = RSS::Parser.new( xml )
47
- parser.do_validate = false
48
- parser.ignore_unknown_element = true
49
-
50
- puts "Parsing feed..."
51
- feed = parser.parse
52
-
53
- puts " feed.class=#{feed.class.name}"
54
- feed
55
- end
56
-
57
-
58
48
  def update_subscriptions( config, opts={} )
59
49
 
60
50
  ## for now - use single site w/ key planet -- fix!! allow multiple sites (planets)
61
51
 
52
+ site_attribs = {
53
+ title: config[ 'title' ]
54
+ }
55
+
62
56
  site_key = 'planet'
63
57
  site_rec = Site.find_by_key( site_key )
64
58
  if site_rec.nil?
65
- site_rec = Site.new
66
- site_rec.key = site_key
59
+ site_rec = Site.new
60
+ site_attribs[ :key ] = site_key
61
+
62
+ ## use object_id: site.id and object_type: Site
63
+ ## change - model/table/schema!!!
64
+ Action.create!( title: 'new site', object: site_attribs[ :title ] )
67
65
  end
68
- site_rec.title = config[ 'title' ]
69
- site_rec.save!
66
+ site_rec.update_attributes!( site_attribs )
67
+
68
+ # -- log update action
69
+ Action.create!( title: 'update subscriptions' )
70
70
 
71
71
 
72
72
  config[ 'feeds' ].each do |feed_key|
73
73
 
74
74
  feed_hash = config[ feed_key ]
75
- feed_url = feed_hash[ 'feed_url' ]
76
-
77
- puts "Updating feed subscription >#{feed_key}< - >#{feed_url}<..."
75
+
76
+ feed_attribs = {
77
+ feed_url: feed_hash[ 'feed_url' ],
78
+ url: feed_hash[ 'url' ],
79
+ title: feed_hash[ 'title' ] # todo: use title from feed?
80
+ }
81
+
82
+ puts "Updating feed subscription >#{feed_key}< - >#{feed_attribs[:feed_url]}<..."
78
83
 
79
84
  feed_rec = Feed.find_by_key( feed_key )
80
85
  if feed_rec.nil?
81
- feed_rec = Feed.new
82
- feed_rec.key = feed_key
86
+ feed_rec = Feed.new
87
+ feed_attribs[ :key ] = feed_key
88
+
89
+ ## use object_id: feed.id and object_type: Feed
90
+ ## change - model/table/schema!!!
91
+ ## todo: add parent_action_id - why? why not?
92
+ Action.create!( title: 'new feed', object: feed_attribs[ :title ] )
83
93
  end
84
- feed_rec.feed_url = feed_url
85
- feed_rec.url = feed_hash[ 'url' ]
86
- feed_rec.title = feed_hash[ 'title' ] # todo: use title from feed?
87
- feed_rec.save!
94
+
95
+ feed_rec.update_attributes!( feed_attribs )
88
96
 
89
97
  ## todo:
90
98
  # add subscription records (feed,site) - how?
91
99
  end
92
100
 
93
101
  end # method update_subscriptions
94
-
95
-
102
+
103
+
96
104
  def update_feeds( opts={} )
97
105
 
98
- logger.debug "using stdlib RSS::VERSION #{RSS::VERSION}"
106
+ ### move to feedutils
107
+ ### logger.debug "using stdlib RSS::VERSION #{RSS::VERSION}"
108
+
109
+ # -- log update action
110
+ Action.create!( title: 'update feeds' )
111
+
112
+ #####
113
+ # -- update fetched_at timestamps for all sites
114
+ feeds_fetched_at = Time.now
115
+ Site.all.each do |site|
116
+ site.fetched_at = feeds_fetched_at
117
+ site.save!
118
+ end
99
119
 
100
120
  Feed.all.each do |feed_rec|
101
121
 
@@ -117,108 +137,64 @@ class Updater
117
137
 
118
138
  puts "Before parsing feed >#{feed_key}<..."
119
139
 
120
- feed = parse_feed( feed_xml )
140
+ ## fix/todo: check for feed.nil? -> error parsing!!!
141
+ # or throw exception
142
+ feed = FeedUtils::Parser.parse( feed_xml )
121
143
 
122
- if feed.class == RSS::Atom::Feed
123
- puts "== #{feed.title.content} =="
124
- else ## assume RSS::Rss::Feed
125
- puts "== #{feed.channel.title} =="
126
- end
144
+ feed_fetched_at = Time.now
127
145
 
128
- feed.items.each do |item|
129
- if feed.class == RSS::Atom::Feed
130
- item_attribs = handle_feed_item_atom( item )
131
- else ## assume RSS::Rss::Feed
132
- item_attribs = handle_feed_item_rss( item )
133
- end
146
+ ## todo/check: move feed_rec update to the end (after item updates??)
134
147
 
135
- # add feed_id fk_ref
136
- item_attribs[ :feed_id ] = feed_rec.id
148
+ # update feed attribs e.g.
149
+ # generator
150
+ # published_at,built_at,touched_at,fetched_at
151
+ # summary,title2
152
+ feed_attribs = {
153
+ fetched_at: feed_fetched_at,
154
+ format: feed.format,
155
+ published_at: feed.published? ? feed.published : nil,
156
+ touched_at: feed.updated? ? feed.updated : nil,
157
+ built_at: feed.built? ? feed.built : nil,
158
+ summary: feed.summary? ? feed.summary : nil,
159
+ title2: feed.title2? ? feed.title2 : nil,
160
+ generator: feed.generator
161
+ }
137
162
 
138
- rec = Item.find_by_guid( item_attribs[ :guid ] )
139
- if rec.nil?
140
- rec = Item.new
141
- puts "** NEW"
142
- else
143
- puts "UPDATE"
144
- end
145
-
146
- rec.update_attributes!( item_attribs )
147
- end # each item
163
+ feed_rec.update_attributes!( feed_attribs )
148
164
 
149
- end # each feed
150
-
151
- end # method run
152
165
 
166
+ feed.items.each do |item|
153
167
 
154
- def handle_feed_item_atom( item )
155
-
156
- ## todo: if content.content empty use summary for example
157
168
  item_attribs = {
158
- title: item.title.content,
159
- url: item.link.href,
160
- published_at: item.updated.content.utc.strftime( "%Y-%m-%d %H:%M" ),
161
- # content: item.content.content,
169
+ fetched_at: feed_fetched_at,
170
+ title: item.title,
171
+ url: item.url,
172
+ summary: item.summary? ? item.summary : nil,
173
+ content: item.content? ? item.content : nil,
174
+ published_at: item.published? ? item.published : nil,
175
+ touched_at: item.updated? ? item.updated : nil,
176
+ feed_id: feed_rec.id # add feed_id fk_ref
162
177
  }
163
178
 
164
- item_attribs[ :guid ] = item.id.content
165
-
166
- if item.summary
167
- item_attribs[ :content ] = item.summary.content
179
+ rec = Item.find_by_guid( item.guid )
180
+ if rec.nil?
181
+ rec = Item.new
182
+ item_attribs[ :guid ] = item.guid
183
+ puts "** NEW | #{item.title}"
168
184
  else
169
- if item.content
170
- text = item.content.content.dup
171
- ## strip all html tags
172
- text = text.gsub( /<[^>]+>/, '' )
173
- text = text[ 0..400 ] # get first 400 chars
174
- ## todo: check for length if > 400 add ... at the end???
175
- item_attribs[ :content ] = text
176
- end
185
+ ## todo: check if any attribs changed
186
+ puts "UPDATE | #{item.title}"
177
187
  end
178
188
 
179
- puts "- #{item.title.content}"
180
- puts " link >#{item.link.href}<"
181
- puts " id (~guid) >#{item.id.content}<"
182
-
183
- ### todo: use/try published first? why? why not?
184
- puts " updated (~pubDate) >#{item.updated.content}< >#{item.updated.content.utc.strftime( "%Y-%m-%d %H:%M" )}< : #{item.updated.content.class.name}"
185
- puts
186
-
187
- # puts "*** dump item:"
188
- # pp item
189
-
190
- item_attribs
191
- end
189
+ rec.update_attributes!( item_attribs )
190
+ end # each item
192
191
 
193
- def handle_feed_item_rss( item )
192
+ end # each feed
194
193
 
195
- item_attribs = {
196
- title: item.title,
197
- url: item.link,
198
- published_at: item.pubDate.utc.strftime( "%Y-%m-%d %H:%M" ),
199
- # content: item.content_encoded,
200
- }
201
-
202
- # if item.content_encoded.nil?
203
- # puts " using description for content"
204
- item_attribs[ :content ] = item.description
205
- # end
206
-
207
- item_attribs[ :guid ] = item.guid.content
208
-
209
- puts "- #{item.title}"
210
- puts " link (#{item.link})"
211
- puts " guid (#{item.guid.content})"
212
- puts " pubDate >#{item.pubDate}< >#{item.pubDate.utc.strftime( "%Y-%m-%d %H:%M" )}< : #{item.pubDate.class.name}"
213
- puts
214
-
215
- # puts "*** dump item:"
216
- # pp item
217
-
218
- item_attribs
219
- end
194
+ end # method run
220
195
 
221
196
 
197
+
222
198
  end # class Fetcher
223
199
 
224
200
  end # module Pluto
data/lib/pluto/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
2
  module Pluto
3
- VERSION = '0.7.0'
3
+ VERSION = '0.8.0'
4
4
  end
5
5
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pluto
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-12 00:00:00.000000000 Z
12
+ date: 2013-09-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pakman
16
- requirement: &73611800 !ruby/object:Gem::Requirement
16
+ requirement: &82365260 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0.5'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *73611800
24
+ version_requirements: *82365260
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: fetcher
27
- requirement: &73611130 !ruby/object:Gem::Requirement
27
+ requirement: &82364940 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0.3'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *73611130
35
+ version_requirements: *82364940
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: logutils
38
- requirement: &73610460 !ruby/object:Gem::Requirement
38
+ requirement: &82364710 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,54 @@ dependencies:
43
43
  version: '0.6'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *73610460
46
+ version_requirements: *82364710
47
+ - !ruby/object:Gem::Dependency
48
+ name: feedutils
49
+ requirement: &82364390 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0.3'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *82364390
58
+ - !ruby/object:Gem::Dependency
59
+ name: props
60
+ requirement: &82364120 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: 1.0.0
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *82364120
69
+ - !ruby/object:Gem::Dependency
70
+ name: textutils
71
+ requirement: &82363830 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: 0.6.8
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *82363830
80
+ - !ruby/object:Gem::Dependency
81
+ name: gli
82
+ requirement: &82363570 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: 2.5.6
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: *82363570
47
91
  - !ruby/object:Gem::Dependency
48
92
  name: rdoc
49
- requirement: &73609750 !ruby/object:Gem::Requirement
93
+ requirement: &82363260 !ruby/object:Gem::Requirement
50
94
  none: false
51
95
  requirements:
52
96
  - - ~>
@@ -54,10 +98,10 @@ dependencies:
54
98
  version: '3.10'
55
99
  type: :development
56
100
  prerelease: false
57
- version_requirements: *73609750
101
+ version_requirements: *82363260
58
102
  - !ruby/object:Gem::Dependency
59
103
  name: hoe
60
- requirement: &73609370 !ruby/object:Gem::Requirement
104
+ requirement: &82362910 !ruby/object:Gem::Requirement
61
105
  none: false
62
106
  requirements:
63
107
  - - ~>
@@ -65,7 +109,7 @@ dependencies:
65
109
  version: '3.3'
66
110
  type: :development
67
111
  prerelease: false
68
- version_requirements: *73609370
112
+ version_requirements: *82362910
69
113
  description: pluto - Another Planet Generator (Lets You Build Web Pages from Published
70
114
  Web Feeds)
71
115
  email: webslideshow@googlegroups.com
@@ -74,45 +118,33 @@ executables:
74
118
  extensions: []
75
119
  extra_rdoc_files:
76
120
  - Manifest.txt
77
- - templates/blank.txt
78
121
  files:
79
- - History.markdown
122
+ - History.md
80
123
  - Manifest.txt
81
- - README.markdown
124
+ - README.md
82
125
  - Rakefile
83
126
  - bin/pluto
127
+ - config/pluto.index.yml
84
128
  - lib/pluto.rb
129
+ - lib/pluto/cli/main.rb
85
130
  - lib/pluto/cli/opts.rb
86
- - lib/pluto/cli/runner.rb
87
131
  - lib/pluto/connecter.rb
88
132
  - lib/pluto/fetcher.rb
89
133
  - lib/pluto/formatter.rb
134
+ - lib/pluto/installer.rb
135
+ - lib/pluto/lister.rb
136
+ - lib/pluto/manifest_helpers.rb
90
137
  - lib/pluto/models.rb
91
138
  - lib/pluto/schema.rb
92
- - lib/pluto/server.rb
93
- - lib/pluto/server/public/feed-icon-10x10.png
94
- - lib/pluto/server/public/style.css
95
- - lib/pluto/server/views/_debug.erb
96
- - lib/pluto/server/views/_version.erb
97
- - lib/pluto/server/views/debug.erb
98
- - lib/pluto/server/views/feeds.erb
99
- - lib/pluto/server/views/index.erb
100
- - lib/pluto/server/views/items.erb
101
- - lib/pluto/server/views/layout.erb
102
- - lib/pluto/server/views/sites.erb
103
139
  - lib/pluto/updater.rb
104
140
  - lib/pluto/version.rb
105
- - templates/blank.html.erb
106
- - templates/blank.top.html.erb
107
- - templates/blank.txt
108
- - templates/feed-icon-10x10.png
109
- homepage: https://github.com/geraldb/pluto
141
+ homepage: https://github.com/feedreader/pluto
110
142
  licenses:
111
143
  - Public Domain
112
144
  post_install_message:
113
145
  rdoc_options:
114
146
  - --main
115
- - README.markdown
147
+ - README.md
116
148
  require_paths:
117
149
  - lib
118
150
  required_ruby_version: !ruby/object:Gem::Requirement