bwkfanboy 1.4.1 → 2.0.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/.gitignore +4 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +51 -0
- data/Procfile +1 -0
- data/README.rdoc +40 -77
- data/Rakefile +13 -48
- data/bin/bwkfanboy +47 -166
- data/bin/bwkfanboy_generate +7 -19
- data/bin/bwkfanboy_parse +21 -17
- data/bwkfanboy.gemspec +40 -0
- data/config.ru +3 -0
- data/doc/NEWS.rdoc +21 -79
- data/doc/plugin.rdoc +63 -79
- data/etc/bwkfanboy.yaml +2 -0
- data/etc/sinatra.rb +34 -0
- data/lib/bwkfanboy/cliconfig.rb +141 -0
- data/lib/bwkfanboy/cliutils.rb +114 -0
- data/lib/bwkfanboy/fetch.rb +22 -24
- data/lib/bwkfanboy/generator.rb +78 -0
- data/lib/bwkfanboy/home.rb +53 -0
- data/lib/bwkfanboy/meta.rb +5 -2
- data/lib/bwkfanboy/plugin.rb +247 -0
- data/lib/bwkfanboy/plugin_skeleton.erb +19 -23
- data/lib/bwkfanboy/server.rb +73 -0
- data/lib/bwkfanboy/utils.rb +39 -129
- data/plugins/bwk.rb +25 -0
- data/plugins/econlib.rb +22 -0
- data/plugins/freebsd-ports-update.rb +73 -0
- data/plugins/inc.rb +29 -0
- data/plugins/test.rb +29 -0
- data/public/.gitattributes +1 -0
- data/public/favicon.ico +0 -0
- data/public/jquery-1.7.2.min.js +0 -0
- data/public/list.js +111 -0
- data/public/loading.gif +0 -0
- data/public/style.css +54 -0
- data/shotgun.rb +20 -0
- data/test/example/.gitattributes +1 -0
- data/test/example/.gitignore +1 -0
- data/test/example/02/plugins/bwk.html +0 -0
- data/test/{plugins → example/02/plugins}/empty.rb +0 -0
- data/test/example/02/plugins/garbage.rb +1 -0
- data/test/example/02/plugins/inc.html +0 -0
- data/test/helper.rb +30 -27
- data/test/helper_cliutils.rb +34 -0
- data/test/test_cli.rb +86 -0
- data/test/test_fetch.rb +49 -18
- data/test/test_generate.rb +43 -16
- data/test/test_home.rb +33 -0
- data/test/test_plugin.rb +141 -0
- data/test/test_server.rb +21 -32
- data/views/list.haml +38 -0
- metadata +223 -110
- data/bin/bwkfanboy_fetch +0 -13
- data/bin/bwkfanboy_server +0 -126
- data/doc/README.erb +0 -114
- data/doc/README.rdoc +0 -141
- data/doc/TODO +0 -7
- data/doc/bwkfanboy_fetch.rdoc +0 -4
- data/doc/bwkfanboy_generate.rdoc +0 -7
- data/doc/bwkfanboy_parse.rdoc +0 -7
- data/doc/bwkfanboy_server.rdoc +0 -35
- data/doc/rakefile.rb +0 -59
- data/lib/bwkfanboy/generate.rb +0 -63
- data/lib/bwkfanboy/parser.rb +0 -156
- data/lib/bwkfanboy/plugins/bwk.rb +0 -33
- data/lib/bwkfanboy/plugins/econlib.rb +0 -34
- data/lib/bwkfanboy/plugins/freebsd-ports-update.rb +0 -76
- data/lib/bwkfanboy/plugins/inc.rb +0 -37
- data/lib/bwkfanboy/schema.js +0 -39
- data/test/popen4.sh +0 -4
- data/test/rake_git.rb +0 -36
- data/test/semis/Rakefile +0 -35
- data/test/semis/bwk.html +0 -393
- data/test/semis/bwk.json +0 -82
- data/test/semis/econlib.html +0 -21
- data/test/semis/inc.html +0 -1067
- data/test/semis/links.txt +0 -4
- data/test/test_parse.rb +0 -27
- data/test/xml-clean.sh +0 -8
- data/web/bwkfanboy.cgi +0 -36
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
bwkfanboy (2.0.0)
|
5
|
+
haml (~> 3.1.4)
|
6
|
+
msgpack (~> 0.4.6)
|
7
|
+
nokogiri (~> 1.5.2)
|
8
|
+
open4 (~> 1.1.0)
|
9
|
+
rake (~> 0.9.2.2)
|
10
|
+
rdoc (~> 3.12)
|
11
|
+
sinatra (~> 1.3.2)
|
12
|
+
|
13
|
+
GEM
|
14
|
+
remote: https://rubygems.org/
|
15
|
+
specs:
|
16
|
+
daemons (1.1.8)
|
17
|
+
eventmachine (0.12.10)
|
18
|
+
fakefs (0.4.0)
|
19
|
+
haml (3.1.4)
|
20
|
+
json (1.6.6)
|
21
|
+
minitest (2.12.1)
|
22
|
+
msgpack (0.4.6)
|
23
|
+
nokogiri (1.5.2)
|
24
|
+
open4 (1.1.0)
|
25
|
+
rack (1.4.1)
|
26
|
+
rack-protection (1.2.0)
|
27
|
+
rack
|
28
|
+
rack-test (0.6.1)
|
29
|
+
rack (>= 1.0)
|
30
|
+
rake (0.9.2.2)
|
31
|
+
rdoc (3.12)
|
32
|
+
json (~> 1.4)
|
33
|
+
sinatra (1.3.2)
|
34
|
+
rack (~> 1.3, >= 1.3.6)
|
35
|
+
rack-protection (~> 1.2)
|
36
|
+
tilt (~> 1.3, >= 1.3.3)
|
37
|
+
thin (1.3.1)
|
38
|
+
daemons (>= 1.0.9)
|
39
|
+
eventmachine (>= 0.12.6)
|
40
|
+
rack (>= 1.0.0)
|
41
|
+
tilt (1.3.3)
|
42
|
+
|
43
|
+
PLATFORMS
|
44
|
+
ruby
|
45
|
+
|
46
|
+
DEPENDENCIES
|
47
|
+
bwkfanboy!
|
48
|
+
fakefs (~> 0.4.0)
|
49
|
+
minitest (~> 2.12.1)
|
50
|
+
rack-test (~> 0.6.1)
|
51
|
+
thin (~> 1.3.1)
|
data/Procfile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
web: bundle exec rackup config.ru -p $PORT
|
data/README.rdoc
CHANGED
@@ -1,15 +1,17 @@
|
|
1
1
|
= About
|
2
2
|
|
3
|
+
A live example: http://bwkfanboy.herokuapp.com
|
4
|
+
|
3
5
|
bwkfanboy is a converter from a raw HTML to an Atom feed. You can use it
|
4
6
|
to watch sites that do not provide its own feed.
|
5
7
|
|
6
8
|
The converter is not a magick tool: you'll need to write a plugin (in
|
7
|
-
Ruby) for each site you want to watch. bwkfanboy gives guidelines and
|
8
|
-
general assistance.
|
9
|
+
Ruby) for an each site you want to watch. bwkfanboy gives guidelines and
|
10
|
+
a general assistance.
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
|
12
|
+
<b> Version 2.0.0 was rewritten form scratch. Plugins from previous
|
13
|
+
versions will not work.</b> See http://github.com/gromnitsky/bwkfanboy_old
|
14
|
+
repo for old versions.
|
13
15
|
|
14
16
|
= Included Plugins
|
15
17
|
|
@@ -23,30 +25,36 @@ plugin.)
|
|
23
25
|
|
24
26
|
= Installation
|
25
27
|
|
26
|
-
|
28
|
+
Install bundler:
|
29
|
+
|
30
|
+
# gem install bundler
|
31
|
+
|
32
|
+
Install all dependencies. You have 2 choices:
|
33
|
+
|
34
|
+
1. Usual via
|
35
|
+
|
36
|
+
# bundle install
|
37
|
+
|
38
|
+
2. Or only for this program
|
27
39
|
|
28
|
-
|
40
|
+
% bundle install --path vendor/bundle
|
29
41
|
|
30
|
-
|
31
|
-
whole gem on rubygems.org, so grab the source before struggling with a
|
32
|
-
particular plugin.
|
42
|
+
You'll have to prefix other commands with 'bundle exec' though.
|
33
43
|
|
34
|
-
|
35
|
-
https://rubygems.org/gems/bwkfanboy and click 'Download' link, save the
|
36
|
-
file and run:
|
44
|
+
Run application:
|
37
45
|
|
38
|
-
|
46
|
+
% rackup -E production
|
39
47
|
|
48
|
+
Point a browser to http://127.0.0.1:9292
|
49
|
+
|
50
|
+
|
40
51
|
= Architecture
|
41
52
|
|
42
53
|
== Plugins
|
43
54
|
|
44
|
-
The plugin is a Ruby class +Page+ that inherits Bwkfanboy::Parse parent,
|
45
|
-
overriding 1 method.
|
46
|
-
|
47
55
|
Plugins can be in system
|
48
56
|
|
49
|
-
`gem env gemdir`/gems/bwkfanboy-x.y.z/
|
57
|
+
`gem env gemdir`/gems/bwkfanboy-x.y.z/plugins
|
50
58
|
|
51
59
|
or user's home
|
52
60
|
|
@@ -56,86 +64,41 @@ directory.
|
|
56
64
|
|
57
65
|
== Pipeline
|
58
66
|
|
59
|
-
The program consists of
|
67
|
+
The program consists of 3 parts:
|
60
68
|
|
61
69
|
0. *bwkfanboy* script that takes 1 parameter: the name of a file in
|
62
|
-
|
70
|
+
plugin directories (without the .rb suffix). So, for example to get
|
63
71
|
an atom feed from dailyprincetonian.com, you type:
|
64
72
|
|
65
73
|
% bwkfanboy bwk
|
66
74
|
|
67
75
|
and it will load
|
68
|
-
<tt>/usr/local/lib/ruby/gems/1.9/gems/bwkfanboy-0.0
|
76
|
+
<tt>/usr/local/lib/ruby/gems/1.9/gems/bwkfanboy-2.0.0/plugins/bwk.rb</tt>
|
69
77
|
file on my FreeBSD machine, fetch and parse the html from
|
70
78
|
dailyprincetonian.com and generate the required feed, dumping it to
|
71
79
|
stdout.
|
72
80
|
|
73
|
-
The script is just a convenient wrapper for
|
74
|
-
|
75
|
-
|
81
|
+
The script is just a convenient wrapper for 2 separate
|
82
|
+
utils below. (Although it doesn't executes them, but uses their internal
|
83
|
+
api.)
|
76
84
|
|
77
|
-
|
78
|
-
dumped to stdout.
|
85
|
+
1. *bwkfanboy_parse*
|
79
86
|
|
80
|
-
|
87
|
+
Takes 1 parameter: a plugin name.
|
81
88
|
|
82
|
-
|
89
|
+
This util reads stdin, expecting it to be a html, parses it and
|
90
|
+
dumps the result to stdout as MessagePack object in UTF-8.
|
83
91
|
|
84
|
-
|
85
|
-
dumps the result to stdout in JSON-formatted object.
|
92
|
+
2. *bwkfanboy_generate*
|
86
93
|
|
87
|
-
|
88
|
-
|
89
|
-
Reads stdin expecting it to be a proper JSON-formatted object.
|
94
|
+
Reads stdin expecting it to be a proper MessagePack object.
|
90
95
|
|
91
96
|
The result will be an Atom feed dumped to stdout in UTF-8.
|
92
97
|
|
93
98
|
So, without the wrapper all this together looks like:
|
94
99
|
|
95
|
-
%
|
96
|
-
bwkfanboy_parse /path/to/my/plugin.rb | bwkfanboy_generate
|
97
|
-
|
98
|
-
== Log
|
99
|
-
|
100
|
-
All utils write to <tt>/tmp/bwkfanboy/USER/log/general.log</tt> file if
|
101
|
-
permissions allows it.
|
100
|
+
% curl http://example.org | bwkfanboy_parse myplugin | bwkfanboy_generate
|
102
101
|
|
103
102
|
== HTTP
|
104
103
|
|
105
|
-
|
106
|
-
|
107
|
-
1. <tt>web/bwkfanboy.cgi</tt> (from the program tarball), which you may
|
108
|
-
copy to your Apache cgi directory and run it. This prohibits you from
|
109
|
-
using HOME directory for your own plugins. Also the cgi script
|
110
|
-
requires some manual editing (setting 1 variable in it) before even
|
111
|
-
you can start utilizing it.
|
112
|
-
|
113
|
-
2. Small *bwkfanboy_server* HTTP server. It can run from any user and
|
114
|
-
thus is able to inherit env variables for discovering your HOME
|
115
|
-
directory. Read doc/bwkfanboy_server.rdoc to know how to operate it.
|
116
|
-
|
117
|
-
= License
|
118
|
-
|
119
|
-
(The MIT License)
|
120
|
-
|
121
|
-
Copyright (c) 2010 Alexander Gromnitsky.
|
122
|
-
|
123
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
124
|
-
a copy of this software and associated documentation files (the
|
125
|
-
'Software'), to deal in the Software without restriction, including
|
126
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
127
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
128
|
-
permit persons to whom the Software is furnished to do so, subject to
|
129
|
-
the following conditions:
|
130
|
-
|
131
|
-
The above copyright notice and this permission notice shall be
|
132
|
-
included in all copies or substantial portions of the Software.
|
133
|
-
|
134
|
-
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
135
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
136
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
137
|
-
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
138
|
-
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
139
|
-
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
140
|
-
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
141
|
-
|
104
|
+
bwkfanboy includes a small sinatra app. See the installation phase.
|
data/Rakefile
CHANGED
@@ -1,59 +1,24 @@
|
|
1
1
|
# -*-ruby-*-
|
2
2
|
|
3
|
-
require 'rake'
|
4
|
-
require 'rake/gempackagetask'
|
5
3
|
require 'rake/clean'
|
6
|
-
require 'rake/rdoctask'
|
7
4
|
require 'rake/testtask'
|
8
|
-
require '
|
5
|
+
require 'bundler/gem_tasks'
|
6
|
+
gem 'rdoc'
|
7
|
+
require 'rdoc/task'
|
9
8
|
|
10
|
-
|
11
|
-
require_relative 'doc/rakefile'
|
9
|
+
task default: [:test]
|
12
10
|
|
13
|
-
|
14
|
-
i.
|
15
|
-
i.
|
16
|
-
i.
|
17
|
-
i.version = `bin/#{i.name} -V`
|
18
|
-
i.author = 'Alexander Gromnitsky'
|
19
|
-
i.email = 'alexander.gromnitsky@gmail.com'
|
20
|
-
i.homepage = "http://github.com/gromnitsky/#{i.name}"
|
21
|
-
i.platform = Gem::Platform::RUBY
|
22
|
-
i.required_ruby_version = '>= 1.9.2'
|
23
|
-
i.files = git_ls('.')
|
24
|
-
|
25
|
-
i.executables = FileList['bin/*'].gsub(/^bin\//, '')
|
26
|
-
|
27
|
-
i.test_files = FileList['test/test_*.rb']
|
28
|
-
|
29
|
-
i.rdoc_options << '-m' << 'doc/README.rdoc' << '-x' << 'plugins'
|
30
|
-
i.extra_rdoc_files = FileList['doc/*.rdoc']
|
31
|
-
|
32
|
-
i.add_dependency('open4', '>= 1.0.1')
|
33
|
-
i.add_dependency('activesupport', '>= 3.0.5')
|
34
|
-
i.add_dependency('nokogiri', '>= 1.4.4')
|
35
|
-
i.add_dependency('jsonschema', '>= 2.0.1')
|
36
|
-
|
37
|
-
i.add_development_dependency('git', '>= 1.2.5')
|
38
|
-
}
|
39
|
-
|
40
|
-
Rake::GemPackageTask.new(spec).define
|
41
|
-
|
42
|
-
task gen_mydocs: ['mydocs:default'] do
|
43
|
-
spec.extra_rdoc_files.concat(MyDocs::RDOC_RELATIVE)
|
44
|
-
end
|
45
|
-
|
46
|
-
task default: [:gen_mydocs, :repackage]
|
47
|
-
task doc: [:gen_mydocs, :rdoc]
|
48
|
-
task clobber: ['mydocs:clean']
|
49
|
-
|
50
|
-
Rake::RDocTask.new do |i|
|
51
|
-
i.rdoc_files = FileList['doc/*', 'lib/**/*.rb']
|
52
|
-
i.rdoc_files.exclude("lib/**/plugins")
|
53
|
-
i.main = 'doc/README.rdoc'
|
11
|
+
RDoc::Task.new('html') do |i|
|
12
|
+
i.main = 'README.rdoc'
|
13
|
+
i.rdoc_files = FileList['README.rdoc', 'doc/*', 'lib/**/*.rb']
|
14
|
+
# i.rdoc_files.exclude("lib/**/some-nasty-staff")
|
54
15
|
end
|
55
16
|
|
56
17
|
Rake::TestTask.new do |i|
|
57
18
|
i.test_files = FileList['test/test_*.rb']
|
58
|
-
|
19
|
+
end
|
20
|
+
|
21
|
+
desc "Insert all 'requires' to speedup reload"
|
22
|
+
task :shotgunreq do
|
23
|
+
sh "git grep 'require ' -- '*.rb' | awk -F: '{print $2}' | grep -v test | sort | uniq > shotgun.rb"
|
59
24
|
end
|
data/bin/bwkfanboy
CHANGED
@@ -1,185 +1,66 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# -*-ruby-*-
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
# It is a wrapper which you can utilize for such common tasks as listing
|
8
|
-
# all available plugins.
|
9
|
-
#
|
10
|
-
# Type:
|
11
|
-
#
|
12
|
-
# % bwkfanboy -h
|
13
|
-
#
|
14
|
-
# to get some basic help--read about Bwkfanboy module.
|
3
|
+
require_relative '../lib/bwkfanboy/home'
|
4
|
+
require_relative '../lib/bwkfanboy/utils'
|
5
|
+
include Bwkfanboy
|
15
6
|
|
16
|
-
|
17
|
-
require_relative '../lib/bwkfanboy/parser'
|
7
|
+
### main
|
18
8
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
skeleton: Bwkfanboy::Utils.gem_dir_system() + '/plugin_skeleton.erb',
|
23
|
-
debug: false,
|
24
|
-
banner: "Usage: #{File.basename($0)} [options] plugin-name"
|
25
|
-
}
|
26
|
-
|
27
|
-
class Plugin # :nodoc: all
|
28
|
-
attr_reader :name, :path
|
29
|
-
|
30
|
-
def initialize(name)
|
31
|
-
@name = name
|
32
|
-
@path = nil
|
33
|
-
end
|
34
|
-
|
35
|
-
def dirs()
|
36
|
-
# try to create user's home plugin directory
|
37
|
-
begin
|
38
|
-
['~/.bwkfanboy', '~/.bwkfanboy/plugins'].each {|i|
|
39
|
-
Dir.mkdir(File.expand_path(i))
|
40
|
-
}
|
41
|
-
rescue
|
42
|
-
# empty
|
43
|
-
end
|
44
|
-
|
45
|
-
r = []
|
46
|
-
dirs = ['~/.bwkfanboy/plugins', "#{Bwkfanboy::Utils.gem_dir_system}/plugins"]
|
47
|
-
begin
|
48
|
-
# this will fail for user's home directory under Apache CGI
|
49
|
-
# environment
|
50
|
-
dirs.map! {|i| File.expand_path(i) }
|
51
|
-
rescue
|
52
|
-
end
|
53
|
-
dirs.each {|i|
|
54
|
-
if File.readable?(i) then
|
55
|
-
r << i
|
56
|
-
else
|
57
|
-
Bwkfanboy::Utils.warnx("directory #{i} isn't readable");
|
58
|
-
end
|
59
|
-
}
|
60
|
-
|
61
|
-
if r.length == 0 then
|
62
|
-
Bwkfanboy::Utils.errx(1, "no dirs for plugins found: #{dirs.join(' ')}")
|
63
|
-
end
|
64
|
-
return r
|
65
|
-
end
|
66
|
-
|
67
|
-
def load(opt)
|
68
|
-
abort($conf[:banner]) unless (@name && @name !~ /^\s*$/)
|
9
|
+
mode = nil
|
10
|
+
$home = Home.new {|loader, o|
|
11
|
+
loader.conf[:banner] = "#{File.basename $0} [options] plugin [opt1 opt2 ...]"
|
69
12
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
pn.check()
|
82
|
-
return pn
|
83
|
-
end
|
84
|
-
|
85
|
-
end # class
|
86
|
-
|
87
|
-
# ----------------------------------------------------------------------
|
13
|
+
o.on('-l', 'List all plugins.') {
|
14
|
+
mode = :list
|
15
|
+
}
|
16
|
+
o.on('-i', 'Show some info about the plugin.') {
|
17
|
+
mode = :info
|
18
|
+
}
|
19
|
+
o.on('-s FILE', 'Write to the FILE a skeleton for a plugin.') {|i|
|
20
|
+
mode = :template
|
21
|
+
loader.conf[:skeleton] = i
|
22
|
+
loader.conf[:template] = (CliUtils::DIR_LIB_SRC + 'plugin_skeleton.erb').to_s
|
23
|
+
}
|
88
24
|
|
89
|
-
o = Bwkfanboy::Utils.cl_parse(ARGV, $conf[:banner]) # create OptionParser object
|
90
|
-
o.on('-i', 'Show some info about the plugin') { |i| $conf[:mode] = 'info' }
|
91
|
-
o.on('-l', 'List all plugins') { |i| $conf[:mode] = 'list' }
|
92
|
-
o.on('-p', 'List all plugins paths') { |i| $conf[:mode] = 'path' }
|
93
|
-
o.on('-t FILE', 'Write to the FILE a skeleton for a plugin') { |i|
|
94
|
-
$conf[:mode] = 'template'
|
95
|
-
$conf[:skeleton_name] = i if i !~ /^\s*$/
|
96
25
|
}
|
97
|
-
o.on('-O', '(ignore this) Execute all bwkfanboy_* utils in a pipe') { |i| $conf[:mode] = 'pipe' }
|
98
|
-
o.on('-D', '(ignore this) Use URI_DEBUG const instead URI in plugins') { |i| $conf[:debug] = true }
|
99
|
-
Bwkfanboy::Utils.cl_parse(ARGV, $conf[:banner], o) # run cl parser
|
100
26
|
|
101
|
-
|
102
|
-
|
27
|
+
if !mode
|
28
|
+
CliUtils.errx EX_USAGE, $home.conf[:banner] unless BH.all_set?(ARGV[0])
|
29
|
+
end
|
103
30
|
|
104
|
-
case
|
105
|
-
when
|
106
|
-
|
107
|
-
|
108
|
-
|
31
|
+
case mode
|
32
|
+
when :list
|
33
|
+
list = PluginInfo.getList $home.conf[:plugins_path]
|
34
|
+
list.each {|idx|
|
35
|
+
puts idx.keys.first + ':'
|
36
|
+
idx[idx.keys.first].each {|file|
|
37
|
+
puts "\t#{file}"
|
38
|
+
}
|
39
|
+
}
|
109
40
|
|
110
|
-
|
111
|
-
t.filename = $conf[:skeleton] # to report errors relative to this file
|
41
|
+
when :info
|
112
42
|
begin
|
113
|
-
|
114
|
-
rescue
|
115
|
-
|
43
|
+
r = PluginInfo.about $home.conf[:plugins_path], ARGV[0], ARGV[1..-1]
|
44
|
+
rescue PluginException
|
45
|
+
CliUtils.errx EX_DATAERR, $!.to_s
|
116
46
|
end
|
117
47
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
File.open($conf[:skeleton_name], 'w+') { |fp| fp.puts t.result(binding) }
|
122
|
-
rescue
|
123
|
-
Bwkfanboy::Utils.errx(1, "cannot write the skeleton: #{$!}")
|
124
|
-
end
|
125
|
-
elsif
|
126
|
-
# warn a careless user
|
127
|
-
if md5_system != Digest::MD5.file($conf[:skeleton_name]).hexdigest
|
128
|
-
Bwkfanboy::Utils.errx(1, "#{$conf[:skeleton_name]} already exists")
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
when 'list'
|
133
|
-
plugin.dirs().each {|i|
|
134
|
-
puts "#{i}:"
|
135
|
-
Dir.glob("#{i}/*.rb").each {|j|
|
136
|
-
puts "\t#{File.basename(j, '.rb')}"
|
137
|
-
}
|
48
|
+
r.each {|key, val|
|
49
|
+
next if key == 'uri'
|
50
|
+
puts "%-9s : %s" % [key.upcase, val]
|
138
51
|
}
|
139
|
-
|
140
|
-
|
141
|
-
when 'info'
|
142
|
-
plugin.load(opt).dump_info
|
143
|
-
when 'version'
|
144
|
-
puts Bwkfanboy::Meta::VERSION
|
145
|
-
when 'pipe'
|
146
|
-
pn = plugin.load(opt)
|
147
|
-
cmd = "./bwkfanboy_fetch | ./bwkfanboy_parse '#{plugin.path}' #{opt.size != 0 ? Shellwords.join(opt) : ''} | ./bwkfanboy_generate"
|
148
|
-
if Bwkfanboy::Utils.cfg[:verbose] >= 2 then
|
149
|
-
puts (!$conf[:debug] ? pn.uri() : pn.class::Meta::URI_DEBUG)
|
150
|
-
puts cmd
|
151
|
-
exit 0
|
152
|
-
end
|
153
|
-
|
154
|
-
# go to the directory with current script
|
155
|
-
Dir.chdir(File.dirname(File.expand_path($0)))
|
156
|
-
|
157
|
-
pipe = IO.popen(cmd, 'w+')
|
158
|
-
pipe.puts (!$conf[:debug] ? pn.uri : pn.class::Meta::URI_DEBUG)
|
159
|
-
pipe.close_write
|
160
|
-
while line = pipe.gets
|
161
|
-
puts line
|
162
|
-
end
|
163
|
-
pipe.close
|
52
|
+
puts "URI : #{r['uri'].size}\n\n"
|
53
|
+
r['uri'].each {|idx| puts idx }
|
164
54
|
|
165
|
-
else
|
166
|
-
# a 'new', faster way
|
167
|
-
pn = plugin.load(opt)
|
168
55
|
|
169
|
-
|
170
|
-
|
56
|
+
when :template
|
57
|
+
exit EX_CANTCREAT unless Utils.skeletonCreate $home.conf[:template], "#{$home.conf[:skeleton]}.rb"
|
171
58
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
if Bwkfanboy::Utils.cfg[:verbose] >= 2 then
|
179
|
-
pn.dump()
|
180
|
-
exit 0
|
59
|
+
else
|
60
|
+
begin
|
61
|
+
puts Utils.atom($home.conf[:plugins_path], ARGV[0], ARGV[1..-1])
|
62
|
+
rescue FetchException, PluginException, GeneratorException
|
63
|
+
CliUtils.errx EX_DATAERR, $!.to_s
|
181
64
|
end
|
182
|
-
|
183
|
-
# 2.generate
|
184
|
-
puts Bwkfanboy::Generate.atom(JSON.parse(pn.to_json))
|
65
|
+
|
185
66
|
end
|