pluto 0.8.2 → 0.8.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gemtest +0 -0
- data/Manifest.txt +4 -0
- data/README.md +87 -17
- data/Rakefile +3 -3
- data/lib/pluto.rb +5 -3
- data/lib/pluto/cli/main.rb +94 -58
- data/lib/pluto/fetcher.rb +2 -20
- data/lib/pluto/formatter.rb +17 -9
- data/lib/pluto/refresher.rb +186 -0
- data/lib/pluto/subscriber.rb +85 -0
- data/lib/pluto/template_helpers.rb +104 -11
- data/lib/pluto/updater.rb +18 -233
- data/lib/pluto/version.rb +1 -1
- data/test/helper.rb +18 -0
- data/test/test_helpers.rb +75 -0
- metadata +30 -24
data/.gemtest
ADDED
File without changes
|
data/Manifest.txt
CHANGED
@@ -14,7 +14,11 @@ lib/pluto/installer.rb
|
|
14
14
|
lib/pluto/lister.rb
|
15
15
|
lib/pluto/manifest_helpers.rb
|
16
16
|
lib/pluto/models.rb
|
17
|
+
lib/pluto/refresher.rb
|
17
18
|
lib/pluto/schema.rb
|
19
|
+
lib/pluto/subscriber.rb
|
18
20
|
lib/pluto/template_helpers.rb
|
19
21
|
lib/pluto/updater.rb
|
20
22
|
lib/pluto/version.rb
|
23
|
+
test/helper.rb
|
24
|
+
test/test_helpers.rb
|
data/README.md
CHANGED
@@ -28,6 +28,11 @@ This will
|
|
28
28
|
Open up `ruby.html` to see your planet web page. Voila!
|
29
29
|
|
30
30
|
|
31
|
+
Note: If you pass in no planet configuration files, the `pluto` command line tool will look
|
32
|
+
for the default planet configuration files,
|
33
|
+
that is, `pluto.ini`, `pluto.yml`, `planet.ini`, `planet.yml`.
|
34
|
+
|
35
|
+
|
31
36
|
### Command Line Tool
|
32
37
|
|
33
38
|
~~~~
|
@@ -48,10 +53,13 @@ COMMANDS
|
|
48
53
|
build, b - Build planet
|
49
54
|
install, i - Install template pack
|
50
55
|
list, ls, l - List installed template packs
|
56
|
+
fetch, f - Fetch planet feeds
|
57
|
+
merge, m - Merge planet template pack
|
51
58
|
about, a - (Debug) Show more version info
|
52
59
|
help - Shows a list of commands or help for one command
|
53
60
|
~~~~
|
54
61
|
|
62
|
+
|
55
63
|
#### `build` Command
|
56
64
|
|
57
65
|
~~~
|
@@ -68,8 +76,10 @@ COMMAND OPTIONS
|
|
68
76
|
EXAMPLE
|
69
77
|
pluto build ruby.yml
|
70
78
|
pluto b ruby
|
79
|
+
pluto b # will use pluto.ini|pluto.yml|planet.ini|planet.yml if present
|
71
80
|
~~~
|
72
81
|
|
82
|
+
|
73
83
|
#### `list` Command
|
74
84
|
|
75
85
|
~~~
|
@@ -84,6 +94,7 @@ EXAMPLE
|
|
84
94
|
pluto ls
|
85
95
|
~~~
|
86
96
|
|
97
|
+
|
87
98
|
#### `install` Command
|
88
99
|
|
89
100
|
~~~
|
@@ -98,34 +109,85 @@ EXAMPLE
|
|
98
109
|
~~~
|
99
110
|
|
100
111
|
|
112
|
+
#### `fetch` Command
|
113
|
+
|
114
|
+
~~~
|
115
|
+
NAME
|
116
|
+
fetch - Fetch planet feeds
|
117
|
+
|
118
|
+
SYNOPSIS
|
119
|
+
pluto [global options] fetch FILE
|
120
|
+
|
121
|
+
EXAMPLE
|
122
|
+
pluto fetch ruby.yml
|
123
|
+
pluto f ruby
|
124
|
+
~~~
|
125
|
+
|
126
|
+
|
127
|
+
#### `merge` Command
|
128
|
+
|
129
|
+
~~~
|
130
|
+
NAME
|
131
|
+
merge - Merge planet template pack
|
132
|
+
|
133
|
+
SYNOPSIS
|
134
|
+
pluto [global options] merge [command options] FILE
|
135
|
+
|
136
|
+
COMMAND OPTIONS
|
137
|
+
-o, --output=PATH - Output Path (default: .)
|
138
|
+
-t, --template=MANIFEST - Template Manifest (default: blank)
|
139
|
+
|
140
|
+
EXAMPLE
|
141
|
+
pluto merge ruby.yml
|
142
|
+
pluto m ruby
|
143
|
+
~~~
|
144
|
+
|
145
|
+
|
146
|
+
|
101
147
|
|
102
148
|
### Planet Configuration Sample
|
103
149
|
|
104
|
-
`ruby.
|
150
|
+
`ruby.ini`:
|
151
|
+
|
152
|
+
```
|
153
|
+
title = Planet Ruby
|
154
|
+
|
155
|
+
[rubyflow]
|
156
|
+
title = Ruby Flow
|
157
|
+
feed_url = http://feeds.feedburner.com/Rubyflow?format=xml
|
158
|
+
url = http://rubyflow.com
|
159
|
+
|
160
|
+
[rubyonrails]
|
161
|
+
title = Ruby on Rails Blog
|
162
|
+
feed_url = http://weblog.rubyonrails.org/feed/atom.xml
|
163
|
+
url = http://weblog.rubyonrails.org
|
164
|
+
|
165
|
+
[viennarb]
|
166
|
+
title = vienna.rb Blog
|
167
|
+
url = http://vienna-rb.at
|
168
|
+
feed_url = http://vienna-rb.at/atom.xml
|
169
|
+
```
|
170
|
+
|
171
|
+
or `ruby.yml`:
|
105
172
|
|
106
173
|
```
|
107
174
|
title: Planet Ruby
|
108
175
|
|
109
176
|
|
110
177
|
rubyflow:
|
111
|
-
title:
|
178
|
+
title: Ruby Flow
|
112
179
|
feed_url: http://feeds.feedburner.com/Rubyflow?format=xml
|
113
|
-
url:
|
114
|
-
|
115
|
-
edgerails:
|
116
|
-
title: What's new in Edge Rails?
|
117
|
-
feed_url: http://www.edgerails.info/blog.atom
|
118
|
-
url: http://www.edgerails.info
|
180
|
+
url: http://rubyflow.com
|
119
181
|
|
120
182
|
rubyonrails:
|
121
|
-
title:
|
183
|
+
title: Ruby on Rails Blog
|
122
184
|
feed_url: http://weblog.rubyonrails.org/feed/atom.xml
|
123
|
-
url:
|
185
|
+
url: http://weblog.rubyonrails.org
|
124
186
|
|
125
|
-
|
126
|
-
title:
|
127
|
-
|
128
|
-
|
187
|
+
viennarb:
|
188
|
+
title: vienna.rb Blog
|
189
|
+
url: http://vienna-rb.at
|
190
|
+
feed_url: http://vienna-rb.at/atom.xml
|
129
191
|
```
|
130
192
|
|
131
193
|
For more samples, see [`nytimes.yml`](https://github.com/feedreader/pluto.samples/blob/master/nytimes.yml),
|
@@ -152,16 +214,24 @@ Just install the gem:
|
|
152
214
|
|
153
215
|
`planet.rb` by Akira Yamada [(Site)](http://planet.rubyforge.org)
|
154
216
|
|
155
|
-
`
|
217
|
+
`planet.rb` by Pablo Astigarraga [(Site)](https://github.com/pote/planet.rb) - used with jekyll/octopress site generator
|
218
|
+
|
219
|
+
Planet Mars by Sam Ruby [(Site)](https://github.com/rubys/mars) - first draft of cleaned up Planet Planet code; last change in 2008
|
156
220
|
|
157
221
|
### Python
|
158
222
|
|
159
|
-
Planet Planet by Scott James Remnant n Jeff Waugh [(Site)](http://www.planetplanet.org) - uses Mark Pilgrim's universal feed parser (RDF, RSS and Atom) and Tomas Styblo's templating engine
|
223
|
+
Planet Planet by Scott James Remnant n Jeff Waugh [(Site)](http://www.planetplanet.org) - uses Mark Pilgrim's universal feed parser (RDF, RSS and Atom) and Tomas Styblo's templating engine; last release version 2.0 in 2006
|
160
224
|
|
161
|
-
Planet Venus by Sam Ruby [(Site)](https://github.com/rubys/venus) - cleaned up Planet Planet code
|
225
|
+
Planet Venus by Sam Ruby [(Site)](https://github.com/rubys/venus) - cleaned up Planet Planet code; last change in 2010
|
162
226
|
|
163
227
|
|
164
228
|
## License
|
165
229
|
|
166
230
|
The `pluto` scripts are dedicated to the public domain.
|
167
231
|
Use it as you please with no restrictions whatsoever.
|
232
|
+
|
233
|
+
## Questions? Comments?
|
234
|
+
|
235
|
+
Questions? Comments?
|
236
|
+
Send them along to the [Planet Pluto and Friends Forum/Mailing List](http://groups.google.com/group/feedreader).
|
237
|
+
Thanks!
|
data/Rakefile
CHANGED
@@ -11,7 +11,7 @@ Hoe.spec 'pluto' do
|
|
11
11
|
self.urls = ['https://github.com/feedreader/pluto']
|
12
12
|
|
13
13
|
self.author = 'Gerald Bauer'
|
14
|
-
self.email = '
|
14
|
+
self.email = 'feedreader@googlegroups.com'
|
15
15
|
|
16
16
|
# switch extension to .markdown for gihub formatting
|
17
17
|
self.readme_file = 'README.md'
|
@@ -21,8 +21,8 @@ Hoe.spec 'pluto' do
|
|
21
21
|
['pakman', '>= 0.5'],
|
22
22
|
['fetcher', '>= 0.3'],
|
23
23
|
['logutils', '>= 0.6'],
|
24
|
-
['feedutils', '>= 0.3'],
|
25
|
-
['props', '>= 1.0.
|
24
|
+
['feedutils', '>= 0.3.2'], # use min. 0.3.2 - added fix for rss.item.guid missing; no more auto-summary in atom
|
25
|
+
['props', '>= 1.0.2'], # use min. 1.0.2 - added ini support
|
26
26
|
['textutils', '>= 0.6.8'], # future: add some filters (for include/exclude)
|
27
27
|
['gli', '>= 2.5.6']
|
28
28
|
## ['activerecord', '~> 3.2'], # NB: soft dependency, will include activesupport,etc.
|
data/lib/pluto.rb
CHANGED
@@ -36,8 +36,10 @@ require 'pluto/manifest_helpers'
|
|
36
36
|
require 'pluto/connecter'
|
37
37
|
|
38
38
|
require 'pluto/installer'
|
39
|
-
require 'pluto/updater'
|
40
39
|
require 'pluto/fetcher'
|
40
|
+
require 'pluto/refresher'
|
41
|
+
require 'pluto/subscriber'
|
42
|
+
require 'pluto/updater'
|
41
43
|
require 'pluto/lister'
|
42
44
|
require 'pluto/template_helpers'
|
43
45
|
require 'pluto/formatter'
|
@@ -59,11 +61,11 @@ module Pluto
|
|
59
61
|
end
|
60
62
|
|
61
63
|
def self.update_subscriptions( config )
|
62
|
-
|
64
|
+
Subscriber.new.update_subscriptions( config )
|
63
65
|
end
|
64
66
|
|
65
67
|
def self.update_feeds
|
66
|
-
|
68
|
+
Refresher.new.update_feeds
|
67
69
|
end
|
68
70
|
|
69
71
|
def self.main
|
data/lib/pluto/cli/main.rb
CHANGED
@@ -64,6 +64,86 @@ end # class SysInfo
|
|
64
64
|
|
65
65
|
|
66
66
|
|
67
|
+
######
|
68
|
+
# begin
|
69
|
+
# move to pluto for reuse (e.g. in rakefile)
|
70
|
+
|
71
|
+
def load_config( name )
|
72
|
+
extname = File.extname( name ) # return '' or '.ini' or '.yml' etc.
|
73
|
+
|
74
|
+
config = extname == '.ini' ? INI.load_file( name ) :
|
75
|
+
YAML.load_file( name )
|
76
|
+
|
77
|
+
puts "dump >#{name}<:"
|
78
|
+
pp config
|
79
|
+
|
80
|
+
config
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
def find_default_config_path
|
85
|
+
candidates = [ 'pluto.ini',
|
86
|
+
'pluto.yml',
|
87
|
+
'planet.ini',
|
88
|
+
'planet.yml' ]
|
89
|
+
|
90
|
+
candidates.each do |candidate|
|
91
|
+
return candidate if File.exists?( candidate ) ## todo: use ./candidate -- why? why not??
|
92
|
+
end
|
93
|
+
|
94
|
+
puts "*** note: no default planet configuration found, that is, no #{candidates.join('|')} found in working folder"
|
95
|
+
nil # return nil; no conifg existing candidate found/present; sorry
|
96
|
+
end
|
97
|
+
|
98
|
+
|
99
|
+
def find_config_path( name )
|
100
|
+
extname = File.extname( name ) # return '' or '.ini' or '.yml' etc.
|
101
|
+
|
102
|
+
return name if extname.present? # nothing to do; extension already present
|
103
|
+
|
104
|
+
candidates = [ '.ini', '.yml' ]
|
105
|
+
|
106
|
+
candidates.each do |candidate|
|
107
|
+
return "#{name}#{candidate}" if File.exists?( "#{name}#{candidate}" )
|
108
|
+
end
|
109
|
+
|
110
|
+
# no extensions matching; sorry
|
111
|
+
puts "*** note: no configuration found w/ extensions #{candidates.join('|')} for '#{name}'"
|
112
|
+
# todo/check/fix - ?? -skip; remove from arg - or just pass through ???
|
113
|
+
nil # return nil; no config found/present; sorry
|
114
|
+
end
|
115
|
+
|
116
|
+
# end
|
117
|
+
# move to pluto for reuse (e.g. in rakefile)
|
118
|
+
###########################
|
119
|
+
|
120
|
+
|
121
|
+
def expand_config_args( args )
|
122
|
+
|
123
|
+
# 1) no args - try to find default config e.g. pluto.ini etc.
|
124
|
+
if args.length == 0
|
125
|
+
new_arg = find_default_config_path
|
126
|
+
|
127
|
+
return [] if new_arg.nil?
|
128
|
+
return [new_arg] # create a new args w/ one item e.g. ['pluto.yml']
|
129
|
+
end
|
130
|
+
|
131
|
+
# 2) expand extname if no extname and config present
|
132
|
+
|
133
|
+
new_args = []
|
134
|
+
args.each do |arg|
|
135
|
+
new_arg = find_config_path( arg )
|
136
|
+
if new_arg.nil?
|
137
|
+
# skip for now
|
138
|
+
else
|
139
|
+
new_args << new_arg
|
140
|
+
end
|
141
|
+
end
|
142
|
+
new_args
|
143
|
+
|
144
|
+
end # method expand_config_args
|
145
|
+
|
146
|
+
|
67
147
|
|
68
148
|
## "global" options (switches/flags)
|
69
149
|
|
@@ -99,18 +179,10 @@ command [:merge, :m] do |c|
|
|
99
179
|
c.action do |g,o,args|
|
100
180
|
logger.debug 'hello from merge command'
|
101
181
|
|
102
|
-
|
103
|
-
if File.exists?( 'pluto.yml' ) # check if pluto.yml exists, if yes add/use it
|
104
|
-
args = ['pluto.yml'] # create a new args w/ one item
|
105
|
-
elsif File.exists?( 'planet.yml' ) # check if planet.yml exists, if yes add/use it
|
106
|
-
args = ['planet.yml'] # create a new args w/ one item
|
107
|
-
else
|
108
|
-
puts '*** note: no arg passed in; no pluto.yml or planet.yml found in working folder'
|
109
|
-
end
|
110
|
-
end
|
182
|
+
args = expand_config_args( args ) # add missing .ini|.yml extension if missing or add default config (e.g. pluto.ini)
|
111
183
|
|
112
184
|
args.each do |arg|
|
113
|
-
name
|
185
|
+
name = File.basename( arg, '.*' )
|
114
186
|
|
115
187
|
#####
|
116
188
|
# todo: add into method for reuse for build/merge/fetch
|
@@ -120,16 +192,10 @@ command [:merge, :m] do |c|
|
|
120
192
|
adapter: 'sqlite3',
|
121
193
|
database: "#{opts.output_path}/#{name}.db"
|
122
194
|
}
|
123
|
-
|
124
|
-
Pluto::Connecter.new.connect!( db_config )
|
125
195
|
|
126
|
-
|
127
|
-
config_path << '.yml' unless config_path.ends_with?( '.yml' )
|
196
|
+
Pluto::Connecter.new.connect!( db_config )
|
128
197
|
|
129
|
-
config =
|
130
|
-
|
131
|
-
puts "dump >#{config_path}<:"
|
132
|
-
pp config
|
198
|
+
config = load_config( arg )
|
133
199
|
|
134
200
|
Pluto::Formatter.new( opts, config ).run( name )
|
135
201
|
end
|
@@ -147,18 +213,10 @@ command [:fetch, :f] do |c|
|
|
147
213
|
c.action do |g,o,args|
|
148
214
|
logger.debug 'hello from fetch command'
|
149
215
|
|
150
|
-
|
151
|
-
if File.exists?( 'pluto.yml' ) # check if pluto.yml exists, if yes add/use it
|
152
|
-
args = ['pluto.yml'] # create a new args w/ one item
|
153
|
-
elsif File.exists?( 'planet.yml' ) # check if planet.yml exists, if yes add/use it
|
154
|
-
args = ['planet.yml'] # create a new args w/ one item
|
155
|
-
else
|
156
|
-
puts '*** note: no arg passed in; no pluto.yml or planet.yml found in working folder'
|
157
|
-
end
|
158
|
-
end
|
216
|
+
args = expand_config_args( args ) # add missing .ini|.yml extension if missing or add default config (e.g. pluto.ini)
|
159
217
|
|
160
218
|
args.each do |arg|
|
161
|
-
name
|
219
|
+
name = File.basename( arg, '.*' )
|
162
220
|
|
163
221
|
#####
|
164
222
|
# todo: add into method for reuse for build/merge/fetch
|
@@ -168,18 +226,12 @@ command [:fetch, :f] do |c|
|
|
168
226
|
adapter: 'sqlite3',
|
169
227
|
database: "#{opts.output_path}/#{name}.db"
|
170
228
|
}
|
171
|
-
|
229
|
+
|
172
230
|
Pluto::Connecter.new.connect!( db_config )
|
173
231
|
|
174
|
-
|
175
|
-
config_path << '.yml' unless config_path.ends_with?( '.yml' )
|
232
|
+
config = load_config( arg )
|
176
233
|
|
177
|
-
|
178
|
-
|
179
|
-
puts "dump >#{config_path}<:"
|
180
|
-
pp config
|
181
|
-
|
182
|
-
Pluto::Fetcher.new( opts, config ).run
|
234
|
+
Pluto::Updater.new( opts, config ).run
|
183
235
|
end
|
184
236
|
|
185
237
|
puts 'Done.'
|
@@ -206,38 +258,22 @@ command [:build, :b] do |c|
|
|
206
258
|
c.action do |g,o,args|
|
207
259
|
logger.debug 'hello from build command'
|
208
260
|
|
209
|
-
|
210
|
-
if File.exists?( 'pluto.yml' ) # check if pluto.yml exists, if yes add/use it
|
211
|
-
args = ['pluto.yml'] # create a new args w/ one item
|
212
|
-
elsif File.exists?( 'planet.yml' ) # check if planet.yml exists, if yes add/use it
|
213
|
-
args = ['planet.yml'] # create a new args w/ one item
|
214
|
-
else
|
215
|
-
puts '*** note: no arg passed in; no pluto.yml or planet.yml found in working folder'
|
216
|
-
end
|
217
|
-
end
|
261
|
+
args = expand_config_args( args ) # add missing .ini|.yml extension if missing or add default config (e.g. pluto.ini)
|
218
262
|
|
219
263
|
args.each do |arg|
|
264
|
+
name = File.basename( arg, '.*' )
|
220
265
|
|
221
|
-
name = File.basename( arg, '.*' )
|
222
|
-
|
223
266
|
db_config = {
|
224
267
|
adapter: 'sqlite3',
|
225
268
|
database: "#{opts.output_path}/#{name}.db"
|
226
269
|
}
|
227
|
-
|
270
|
+
|
228
271
|
Pluto::Connecter.new.connect!( db_config )
|
229
272
|
|
230
|
-
|
231
|
-
config_path << '.yml' unless config_path.ends_with?( '.yml' )
|
273
|
+
config = load_config( arg )
|
232
274
|
|
233
|
-
|
234
|
-
|
235
|
-
puts "dump >#{config_path}<:"
|
236
|
-
pp config
|
237
|
-
|
238
|
-
Pluto::Fetcher.new( opts, config ).run
|
275
|
+
Pluto::Updater.new( opts, config ).run
|
239
276
|
Pluto::Formatter.new( opts, config ).run( name )
|
240
|
-
|
241
277
|
end
|
242
278
|
|
243
279
|
puts 'Done.'
|
data/lib/pluto/fetcher.rb
CHANGED
@@ -3,26 +3,8 @@ module Pluto
|
|
3
3
|
|
4
4
|
class Fetcher
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
def initialize( opts, config )
|
9
|
-
@opts = opts
|
10
|
-
@config = config
|
11
|
-
end
|
12
|
-
|
13
|
-
attr_reader :opts, :config
|
14
|
-
|
15
|
-
|
16
|
-
def run
|
17
|
-
updater = Updater.new
|
18
|
-
|
19
|
-
# pass along debug/verbose setting/switch
|
20
|
-
updater.debug = true if opts.verbose?
|
21
|
-
|
22
|
-
updater.update_subscriptions( config )
|
23
|
-
updater.update_feeds
|
24
|
-
end # method run
|
25
|
-
|
6
|
+
## todo: add fetch_feed machinery here
|
7
|
+
# now in refresher
|
26
8
|
|
27
9
|
end # class Fetcher
|
28
10
|
|