pluto 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
File without changes
data/Manifest.txt CHANGED
@@ -1,30 +1,19 @@
1
- History.markdown
1
+ History.md
2
2
  Manifest.txt
3
- README.markdown
3
+ README.md
4
4
  Rakefile
5
5
  bin/pluto
6
+ config/pluto.index.yml
6
7
  lib/pluto.rb
8
+ lib/pluto/cli/main.rb
7
9
  lib/pluto/cli/opts.rb
8
- lib/pluto/cli/runner.rb
9
10
  lib/pluto/connecter.rb
10
11
  lib/pluto/fetcher.rb
11
12
  lib/pluto/formatter.rb
13
+ lib/pluto/installer.rb
14
+ lib/pluto/lister.rb
15
+ lib/pluto/manifest_helpers.rb
12
16
  lib/pluto/models.rb
13
17
  lib/pluto/schema.rb
14
- lib/pluto/server.rb
15
- lib/pluto/server/public/feed-icon-10x10.png
16
- lib/pluto/server/public/style.css
17
- lib/pluto/server/views/_debug.erb
18
- lib/pluto/server/views/_version.erb
19
- lib/pluto/server/views/debug.erb
20
- lib/pluto/server/views/feeds.erb
21
- lib/pluto/server/views/index.erb
22
- lib/pluto/server/views/items.erb
23
- lib/pluto/server/views/layout.erb
24
- lib/pluto/server/views/sites.erb
25
18
  lib/pluto/updater.rb
26
19
  lib/pluto/version.rb
27
- templates/blank.html.erb
28
- templates/blank.top.html.erb
29
- templates/blank.txt
30
- templates/feed-icon-10x10.png
data/README.md ADDED
@@ -0,0 +1,172 @@
1
+ # pluto
2
+
3
+ Another planet generator in ruby - lets you build web pages
4
+ from published web feeds.
5
+
6
+ * home :: [github.com/feedreader/pluto](https://github.com/feedreader/pluto)
7
+ * bugs :: [github.com/feedreader/pluto/issues](https://github.com/feedreader/pluto/issues)
8
+ * gem :: [rubygems.org/gems/pluto](https://rubygems.org/gems/pluto)
9
+ * rdoc :: [rubydoc.info/gems/pluto](http://rubydoc.info/gems/pluto)
10
+
11
+
12
+ ## Usage
13
+
14
+ Use the `pluto` command line tool and pass in one or more planet configuration files.
15
+ Example:
16
+
17
+ pluto build ruby.yml or
18
+ pluto b ruby
19
+
20
+ This will
21
+
22
+ 1) fetch all feeds listed in `ruby.yml` and
23
+
24
+ 2) store all entries in a local database, that is, `ruby.db` in your working folder and
25
+
26
+ 3) generate a planet web page, that is, `ruby.html` using the [`blank` template pack](https://github.com/feedreader/pluto.blank) in your working folder using all feed entries from the local database.
27
+
28
+ Open up `ruby.html` to see your planet web page. Voila!
29
+
30
+
31
+ ### Command Line Tool
32
+
33
+ ~~~~
34
+ NAME
35
+ pluto - another planet generator - lets you build web pages from published web feeds
36
+
37
+ SYNOPSIS
38
+ pluto [global options] command [command options] [arguments...]
39
+
40
+ GLOBAL OPTIONS
41
+ -c, --config=PATH - Configuration Path (default: ~/.pluto)
42
+ -q, --quiet - Only show warnings, errors and fatal messages
43
+ --verbose - (Debug) Show debug messages
44
+ --version - Display the program version
45
+ --help - Show this message
46
+
47
+ COMMANDS
48
+ build, b - Build planet
49
+ install, i - Install template pack
50
+ list, ls, l - List installed template packs
51
+ about, a - (Debug) Show more version info
52
+ help - Shows a list of commands or help for one command
53
+ ~~~~
54
+
55
+ #### `build` Command
56
+
57
+ ~~~
58
+ NAME
59
+ build - Build planet
60
+
61
+ SYNOPSIS
62
+ pluto [global options] build [command options] FILE
63
+
64
+ COMMAND OPTIONS
65
+ -o, --output=PATH - Output Path (default: .)
66
+ -t, --template=MANIFEST - Template Manifest (default: blank)
67
+
68
+ EXAMPLE
69
+ pluto build ruby.yml
70
+ pluto b ruby
71
+ ~~~
72
+
73
+ #### `list` Command
74
+
75
+ ~~~
76
+ NAME
77
+ list - List installed template packs
78
+
79
+ SYNOPSIS
80
+ pluto [global options] list
81
+
82
+ EXAMPLE
83
+ pluto list
84
+ pluto ls
85
+ ~~~
86
+
87
+ #### `install` Command
88
+
89
+ ~~~
90
+ NAME
91
+ install - Install template pack
92
+
93
+ SYNOPSIS
94
+ pluto [global options] install MANIFEST
95
+
96
+ EXAMPLE
97
+ pluto install news # install "river of news" template pack
98
+ ~~~
99
+
100
+
101
+
102
+ ### Planet Configuration Sample
103
+
104
+ `ruby.yml`:
105
+
106
+ ```
107
+ title: Planet Ruby
108
+
109
+ feeds:
110
+ - rubyflow
111
+ - edgerails
112
+ - rubyonrails
113
+ - railstutorial
114
+
115
+ rubyflow:
116
+ title: Ruby Flow
117
+ feed_url: http://feeds.feedburner.com/Rubyflow?format=xml
118
+ url: http://rubyflow.com
119
+
120
+ edgerails:
121
+ title: What's new in Edge Rails?
122
+ feed_url: http://www.edgerails.info/blog.atom
123
+ url: http://www.edgerails.info
124
+
125
+ rubyonrails:
126
+ title: Ruby on Rails Blog
127
+ feed_url: http://weblog.rubyonrails.org/feed/atom.xml
128
+ url: http://weblog.rubyonrails.org
129
+
130
+ railstutorial:
131
+ title: Rails Tutorial News
132
+ feed_url: http://feeds.feedburner.com/railstutorial?format=xml
133
+ url: http://news.railstutorial.org
134
+ ```
135
+
136
+ For more samples, see [`nytimes.yml`](https://github.com/feedreader/pluto.samples/blob/master/nytimes.yml),
137
+ [`js.yml`](https://github.com/feedreader/pluto.samples/blob/master/js.yml),
138
+ [`dart.yml`](https://github.com/feedreader/pluto.samples/blob/master/dart.yml).
139
+
140
+
141
+ ## Install
142
+
143
+ Just install the gem:
144
+
145
+ $ gem install pluto
146
+
147
+
148
+ ## Real World Usage
149
+
150
+ [`pluto.live`](https://github.com/feedreader/pluto.live) - sample planet site; sinatra web app/starter template in ruby using the pluto gem
151
+
152
+
153
+
154
+ ## Alternatives
155
+
156
+ ### Ruby
157
+
158
+ `planet.rb` by Akira Yamada [(Site)](http://planet.rubyforge.org)
159
+
160
+ `Planet.rb` by Pablo Astigarraga [(Site)](https://github.com/pote/planet.rb) - used with jekyll/octopress site generator
161
+
162
+ ### Python
163
+
164
+ 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
165
+
166
+ Planet Venus by Sam Ruby [(Site)](https://github.com/rubys/venus) - cleaned up Planet Planet code
167
+
168
+
169
+ ## License
170
+
171
+ The `pluto` scripts are dedicated to the public domain.
172
+ Use it as you please with no restrictions whatsoever.
data/Rakefile CHANGED
@@ -8,22 +8,27 @@ Hoe.spec 'pluto' do
8
8
  self.summary = 'pluto - Another Planet Generator'
9
9
  self.description = 'pluto - Another Planet Generator (Lets You Build Web Pages from Published Web Feeds)'
10
10
 
11
- self.urls = ['https://github.com/geraldb/pluto']
11
+ self.urls = ['https://github.com/feedreader/pluto']
12
12
 
13
13
  self.author = 'Gerald Bauer'
14
14
  self.email = 'webslideshow@googlegroups.com'
15
15
 
16
16
  # switch extension to .markdown for gihub formatting
17
- self.readme_file = 'README.markdown'
18
- self.history_file = 'History.markdown'
17
+ self.readme_file = 'README.md'
18
+ self.history_file = 'History.md'
19
19
 
20
20
  self.extra_deps = [
21
- ['pakman', '>= 0.5'],
22
- ['fetcher', '>= 0.3'],
23
- ['logutils', '>= 0.6']
21
+ ['pakman', '>= 0.5'],
22
+ ['fetcher', '>= 0.3'],
23
+ ['logutils', '>= 0.6'],
24
+ ['feedutils', '>= 0.3'],
25
+ ['props', '>= 1.0.0'],
26
+ ['textutils', '>= 0.6.8'], # future: add some filters (for include/exclude)
27
+ ['gli', '>= 2.5.6']
24
28
  ## ['activerecord', '~> 3.2'], # NB: soft dependency, will include activesupport,etc.
25
29
  ]
26
30
 
31
+
27
32
  self.licenses = ['Public Domain']
28
33
 
29
34
  self.spec_extras = {
@@ -0,0 +1,19 @@
1
+ #########################################
2
+ # Pluto Update Index for Template Packs
3
+
4
+
5
+ #############
6
+ # shortcuts for fetching template packs
7
+ # maps shortcut to URI
8
+
9
+ blank: https://raw.github.com/feedreader/pluto.blank/master/blank.txt
10
+
11
+ top: https://raw.github.com/feedreader/pluto.top/master/top.txt
12
+
13
+ news: https://raw.github.com/feedreader/pluto.news/master/news.txt
14
+
15
+
16
+ ####
17
+ # all:
18
+ # - add why? why not??
19
+ #
data/lib/pluto.rb CHANGED
@@ -3,28 +3,26 @@
3
3
  #
4
4
  # 1.9.x: ruby -Ilib lib/pakman.rb
5
5
 
6
- # core and stlibs
6
+ # core and stdlibs
7
7
 
8
8
  require 'yaml'
9
9
  require 'json'
10
10
  require 'uri'
11
11
  require 'pp'
12
- require 'logger'
13
12
  require 'optparse'
14
13
  require 'fileutils'
15
14
 
16
15
 
17
-
18
- require 'rss'
19
-
20
- # rubygems
16
+ # 3rd party ruby gems/libs
21
17
 
22
18
  require 'active_record' ## todo: add sqlite3? etc.
23
19
 
24
-
25
20
  require 'logutils'
21
+ require 'props' # manage settings/env
26
22
  require 'fetcher' # fetch (download) files
27
- require 'pakman' # template pack manager
23
+ require 'pakman' # template pack manager
24
+ require 'feedutils'
25
+ require 'textutils'
28
26
 
29
27
 
30
28
  # our own code
@@ -32,13 +30,16 @@ require 'pakman' # template pack manager
32
30
  require 'pluto/version' # let version always get first
33
31
  require 'pluto/schema'
34
32
  require 'pluto/models'
33
+ require 'pluto/manifest_helpers'
35
34
  require 'pluto/connecter'
35
+
36
+ require 'pluto/installer'
36
37
  require 'pluto/updater'
37
38
  require 'pluto/fetcher'
39
+ require 'pluto/lister'
38
40
  require 'pluto/formatter'
39
41
 
40
- require 'pluto/cli/opts'
41
- require 'pluto/cli/runner'
42
+ require 'pluto/cli/opts' ## fix: make sure fetcher/updater etc. do not depend on cli/opts
42
43
 
43
44
  module Pluto
44
45
 
@@ -62,10 +63,11 @@ module Pluto
62
63
  Updater.new.update_feeds
63
64
  end
64
65
 
65
-
66
66
  def self.main
67
- Runner.new.run(ARGV)
67
+ require 'pluto/cli/main'
68
+ ## Runner.new.run(ARGV) - old code
68
69
  end
70
+
69
71
 
70
72
  end # module Pluto
71
73
 
@@ -0,0 +1,213 @@
1
+ # encoding: utf-8
2
+
3
+ require 'gli'
4
+
5
+
6
+ include GLI::App
7
+
8
+ program_desc 'another planet generator (lets you build web pages from published web feeds)'
9
+ version Pluto::VERSION
10
+
11
+
12
+ ## some setup code
13
+
14
+ LogUtils::Logger.root.level = :info # set logging level to info
15
+
16
+ logger = LogUtils::Logger.root
17
+
18
+
19
+ opts = Pluto::Opts.new
20
+
21
+
22
+
23
+ class SysInfo
24
+
25
+ ## todo/fix:
26
+ ## pass in/use config (props)
27
+
28
+ def initialize( opts )
29
+ @opts = opts
30
+ end
31
+
32
+ attr_reader :opts
33
+
34
+
35
+ def dump
36
+ puts <<EOS
37
+
38
+ #{Pluto.banner}
39
+
40
+ Gems versions:
41
+ - pakman #{Pakman::VERSION}
42
+ - fetcher #{Fetcher::VERSION}
43
+ - feedutils #{FeedUtils::VERSION}
44
+ - textutils #{TextUtils::VERSION}
45
+ - props #{Props::VERSION}
46
+
47
+ Env home: #{Env.home}
48
+ Pluto config: #{opts.config_path}
49
+ Pluto root: #{Pluto.root}
50
+
51
+ EOS
52
+
53
+ # dump Pluto settings
54
+ # config.dump
55
+ # puts
56
+
57
+
58
+ ## todo: add more gem version info
59
+ # todo: add logutils version
60
+ # add gli2 version
61
+ end
62
+
63
+ end # class SysInfo
64
+
65
+
66
+
67
+
68
+ ## "global" options (switches/flags)
69
+
70
+ desc '(Debug) Show debug messages'
71
+ switch [:verbose], negatable: false ## todo: use -w for short form? check ruby interpreter if in use too?
72
+
73
+ desc 'Only show warnings, errors and fatal messages'
74
+ switch [:q, :quiet], negatable: false
75
+
76
+
77
+ desc 'Configuration Path'
78
+ arg_name 'PATH'
79
+ default_value opts.config_path
80
+ flag [:c, :config]
81
+
82
+
83
+ desc 'Build planet'
84
+ arg_name 'FILE', multiple: true ## todo/fix: check multiple will not print typeo???
85
+ command [:build, :b] do |c|
86
+
87
+ c.desc 'Output Path'
88
+ c.arg_name 'PATH'
89
+ c.default_value opts.output_path
90
+ c.flag [:o,:output]
91
+
92
+ c.desc 'Template Manifest'
93
+ c.arg_name 'MANIFEST'
94
+ c.default_value opts.manifest
95
+ c.flag [:t, :template]
96
+
97
+
98
+ c.action do |g,o,args|
99
+ logger.debug 'hello from build command'
100
+
101
+ args.each do |arg|
102
+
103
+ name = File.basename( arg, '.*' )
104
+
105
+ db_config = {
106
+ adapter: 'sqlite3',
107
+ database: "#{opts.output_path}/#{name}.db"
108
+ }
109
+
110
+ Pluto::Connecter.new.connect!( db_config )
111
+
112
+ config_path = arg.dup # add .yml file extension if missing (for convenience)
113
+ config_path << '.yml' unless config_path.ends_with?( '.yml' )
114
+
115
+ config = YAML.load_file( config_path )
116
+
117
+ puts "dump >#{config_path}<:"
118
+ pp config
119
+
120
+ Pluto::Fetcher.new( opts, config ).run
121
+ Pluto::Formatter.new( opts, config ).run( name )
122
+
123
+ end
124
+
125
+ puts 'Done.'
126
+ end
127
+ end # command build
128
+
129
+
130
+ desc 'List installed template packs'
131
+ command [:list,:ls,:l] do |c|
132
+
133
+ c.action do |g,o,args|
134
+ logger.debug 'hello from list command'
135
+
136
+ Pluto::Lister.new( opts ).list
137
+ end
138
+ end
139
+
140
+
141
+ desc 'Install template pack'
142
+ arg_name 'MANIFEST', multiple: true
143
+ command [:install,:i] do |c|
144
+
145
+ c.action do |g,o,args|
146
+ logger.debug 'hello from install command'
147
+
148
+ args.each do |arg|
149
+ Pluto::Installer.new( opts ).install( arg ) ## todo: remove opts merge into config
150
+ end
151
+ end
152
+ end
153
+
154
+
155
+ desc '(Debug) Show more version info'
156
+ skips_pre
157
+ command [:about,:a] do |c|
158
+ c.action do
159
+ logger.debug 'hello from about command'
160
+
161
+ SysInfo.new( opts ).dump
162
+ end
163
+ end
164
+
165
+
166
+ desc '(Debug) Show global options, options, arguments for test command'
167
+ command :test do |c|
168
+ c.action do |g,o,args|
169
+ puts 'hello from test command'
170
+ puts 'g/global_options:'
171
+ pp g
172
+ puts 'o/options:'
173
+ pp o
174
+ puts 'args:'
175
+ pp args
176
+ end
177
+ end
178
+
179
+
180
+
181
+ pre do |g,c,o,args|
182
+ opts.merge_gli_options!( g )
183
+ opts.merge_gli_options!( o )
184
+
185
+ puts Pluto.banner
186
+
187
+ LogUtils::Logger.root.level = :debug if opts.verbose?
188
+
189
+ logger.debug " executing command #{c.name}"
190
+ true
191
+ end
192
+
193
+
194
+ post do |global,c,o,args|
195
+ logger.debug " executed command #{c.name}"
196
+ true
197
+ end
198
+
199
+
200
+ on_error do |e|
201
+ puts
202
+ puts "*** error: #{e.message}"
203
+ puts
204
+
205
+ ## todo/fix: find a better way to print; just raise exception e.g. raise e - why? why not??
206
+ ## puts e.backtrace.inspect if opts.verbose?
207
+ raise e if opts.verbose?
208
+
209
+ false # skip default error handling
210
+ end
211
+
212
+
213
+ exit run(ARGV)