pluto 0.8.2 → 0.8.3
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/.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
|
|