bwkfanboy 1.4.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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/views/list.haml
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
!!! 5
|
2
|
+
%html
|
3
|
+
%head
|
4
|
+
%title #{meta::NAME} :: Plugins List
|
5
|
+
%link(rel="stylesheet" href="/style.css")
|
6
|
+
%script(type='text/javascript' src='/jquery-1.7.2.min.js')
|
7
|
+
%script(type='text/javascript' src='/list.js')
|
8
|
+
|
9
|
+
%body
|
10
|
+
#header
|
11
|
+
%h1 Plugins List
|
12
|
+
|
13
|
+
#list
|
14
|
+
- list.each do |idx|
|
15
|
+
%b #{idx.keys.first}:
|
16
|
+
%ul
|
17
|
+
- idx[idx.keys.first].each do |file|
|
18
|
+
%li
|
19
|
+
%span= file
|
20
|
+
|
21
|
+
#plugin
|
22
|
+
%h2 Plugin Info
|
23
|
+
%form
|
24
|
+
%p
|
25
|
+
Additional options:
|
26
|
+
%input(type='text' name='opts')
|
27
|
+
|
28
|
+
#info
|
29
|
+
(Click on any link from the left.)
|
30
|
+
|
31
|
+
#footer
|
32
|
+
%hr/
|
33
|
+
.footer
|
34
|
+
%a{href: url("#{meta::HOMEPAGE}")} #{meta::NAME}
|
35
|
+
\#{meta::VERSION}
|
36
|
+
- if ENV["COMMIT_HASH"]
|
37
|
+
%br/
|
38
|
+
Commit hash: #{ENV["COMMIT_HASH"]}
|
metadata
CHANGED
@@ -1,168 +1,281 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: bwkfanboy
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.0.0
|
4
5
|
prerelease:
|
5
|
-
version: 1.4.1
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
8
|
-
-
|
7
|
+
authors:
|
8
|
+
- bwkfanboy
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-04-23 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: open4
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.3.0
|
22
|
+
type: :runtime
|
17
23
|
prerelease: false
|
18
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.3.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: msgpack
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
19
33
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version:
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.4.6
|
24
38
|
type: :runtime
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: activesupport
|
28
39
|
prerelease: false
|
29
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
41
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version:
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.4.6
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.9.2.2
|
35
54
|
type: :runtime
|
36
|
-
|
37
|
-
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.9.2.2
|
62
|
+
- !ruby/object:Gem::Dependency
|
38
63
|
name: nokogiri
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.5.2
|
70
|
+
type: :runtime
|
39
71
|
prerelease: false
|
40
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
73
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: 1.
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.5.2
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: sinatra
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 1.3.2
|
46
86
|
type: :runtime
|
47
|
-
version_requirements: *id003
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: jsonschema
|
50
87
|
prerelease: false
|
51
|
-
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 1.3.2
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: haml
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
52
97
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version:
|
98
|
+
requirements:
|
99
|
+
- - ~>
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 3.1.4
|
57
102
|
type: :runtime
|
58
|
-
version_requirements: *id004
|
59
|
-
- !ruby/object:Gem::Dependency
|
60
|
-
name: git
|
61
103
|
prerelease: false
|
62
|
-
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 3.1.4
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rdoc
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '3.12'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '3.12'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: minitest
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ~>
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: 2.12.1
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ~>
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 2.12.1
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: fakefs
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ~>
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 0.4.0
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
153
|
none: false
|
64
|
-
requirements:
|
65
|
-
- -
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version:
|
154
|
+
requirements:
|
155
|
+
- - ~>
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: 0.4.0
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: rack-test
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ~>
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: 0.6.1
|
68
166
|
type: :development
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ~>
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 0.6.1
|
174
|
+
description: A converter from a raw HTML to an Atom feed. You can use it to watch
|
175
|
+
sites that do not provide its own feed
|
176
|
+
email:
|
177
|
+
- alexander.gromnitsky@gmail.com
|
178
|
+
executables:
|
179
|
+
- bwkfanboy
|
73
180
|
- bwkfanboy_generate
|
74
181
|
- bwkfanboy_parse
|
75
|
-
- bwkfanboy
|
76
|
-
- bwkfanboy_server
|
77
|
-
- bwkfanboy_fetch
|
78
182
|
extensions: []
|
79
|
-
|
80
|
-
|
183
|
+
extra_rdoc_files:
|
184
|
+
- doc/LICENSE
|
81
185
|
- doc/NEWS.rdoc
|
82
186
|
- doc/plugin.rdoc
|
83
|
-
|
84
|
-
-
|
85
|
-
-
|
86
|
-
-
|
87
|
-
-
|
88
|
-
files:
|
187
|
+
files:
|
188
|
+
- .gitignore
|
189
|
+
- Gemfile
|
190
|
+
- Gemfile.lock
|
191
|
+
- Procfile
|
89
192
|
- README.rdoc
|
90
193
|
- Rakefile
|
91
194
|
- bin/bwkfanboy
|
92
|
-
- bin/bwkfanboy_fetch
|
93
195
|
- bin/bwkfanboy_generate
|
94
196
|
- bin/bwkfanboy_parse
|
95
|
-
-
|
197
|
+
- bwkfanboy.gemspec
|
198
|
+
- config.ru
|
96
199
|
- doc/LICENSE
|
97
200
|
- doc/NEWS.rdoc
|
98
|
-
- doc/README.erb
|
99
|
-
- doc/README.rdoc
|
100
|
-
- doc/TODO
|
101
|
-
- doc/bwkfanboy_fetch.rdoc
|
102
|
-
- doc/bwkfanboy_generate.rdoc
|
103
|
-
- doc/bwkfanboy_parse.rdoc
|
104
|
-
- doc/bwkfanboy_server.rdoc
|
105
201
|
- doc/plugin.rdoc
|
106
|
-
-
|
202
|
+
- etc/bwkfanboy.yaml
|
203
|
+
- etc/sinatra.rb
|
204
|
+
- lib/bwkfanboy/cliconfig.rb
|
205
|
+
- lib/bwkfanboy/cliutils.rb
|
107
206
|
- lib/bwkfanboy/fetch.rb
|
108
|
-
- lib/bwkfanboy/
|
207
|
+
- lib/bwkfanboy/generator.rb
|
208
|
+
- lib/bwkfanboy/home.rb
|
109
209
|
- lib/bwkfanboy/meta.rb
|
110
|
-
- lib/bwkfanboy/
|
210
|
+
- lib/bwkfanboy/plugin.rb
|
111
211
|
- lib/bwkfanboy/plugin_skeleton.erb
|
112
|
-
- lib/bwkfanboy/
|
113
|
-
- lib/bwkfanboy/plugins/econlib.rb
|
114
|
-
- lib/bwkfanboy/plugins/freebsd-ports-update.rb
|
115
|
-
- lib/bwkfanboy/plugins/inc.rb
|
116
|
-
- lib/bwkfanboy/schema.js
|
212
|
+
- lib/bwkfanboy/server.rb
|
117
213
|
- lib/bwkfanboy/utils.rb
|
214
|
+
- plugins/bwk.rb
|
215
|
+
- plugins/econlib.rb
|
216
|
+
- plugins/freebsd-ports-update.rb
|
217
|
+
- plugins/inc.rb
|
218
|
+
- plugins/test.rb
|
219
|
+
- public/.gitattributes
|
220
|
+
- public/favicon.ico
|
221
|
+
- public/jquery-1.7.2.min.js
|
222
|
+
- public/list.js
|
223
|
+
- public/loading.gif
|
224
|
+
- public/style.css
|
225
|
+
- shotgun.rb
|
226
|
+
- test/example/.gitattributes
|
227
|
+
- test/example/.gitignore
|
228
|
+
- test/example/02/plugins/bwk.html
|
229
|
+
- test/example/02/plugins/empty.rb
|
230
|
+
- test/example/02/plugins/garbage.rb
|
231
|
+
- test/example/02/plugins/inc.html
|
118
232
|
- test/helper.rb
|
119
|
-
- test/
|
120
|
-
- test/
|
121
|
-
- test/rake_git.rb
|
122
|
-
- test/semis/Rakefile
|
123
|
-
- test/semis/bwk.html
|
124
|
-
- test/semis/bwk.json
|
125
|
-
- test/semis/econlib.html
|
126
|
-
- test/semis/inc.html
|
127
|
-
- test/semis/links.txt
|
233
|
+
- test/helper_cliutils.rb
|
234
|
+
- test/test_cli.rb
|
128
235
|
- test/test_fetch.rb
|
129
236
|
- test/test_generate.rb
|
130
|
-
- test/
|
237
|
+
- test/test_home.rb
|
238
|
+
- test/test_plugin.rb
|
131
239
|
- test/test_server.rb
|
132
|
-
-
|
133
|
-
- web/bwkfanboy.cgi
|
240
|
+
- views/list.haml
|
134
241
|
homepage: http://github.com/gromnitsky/bwkfanboy
|
135
242
|
licenses: []
|
243
|
+
post_install_message: ! 'This version was rewritten from scratch.
|
244
|
+
|
245
|
+
Plugins from & for previous versions (0.x & 1.x) WILL NOT WORK.
|
246
|
+
|
247
|
+
|
248
|
+
See also doc/NEWS.rdoc file.
|
136
249
|
|
137
|
-
|
138
|
-
rdoc_options:
|
250
|
+
'
|
251
|
+
rdoc_options:
|
139
252
|
- -m
|
140
|
-
-
|
141
|
-
|
142
|
-
- plugins
|
143
|
-
require_paths:
|
253
|
+
- README.rdoc
|
254
|
+
require_paths:
|
144
255
|
- lib
|
145
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
256
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
146
257
|
none: false
|
147
|
-
requirements:
|
148
|
-
- -
|
149
|
-
- !ruby/object:Gem::Version
|
258
|
+
requirements:
|
259
|
+
- - ! '>='
|
260
|
+
- !ruby/object:Gem::Version
|
150
261
|
version: 1.9.2
|
151
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
262
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
263
|
none: false
|
153
|
-
requirements:
|
154
|
-
- -
|
155
|
-
- !ruby/object:Gem::Version
|
156
|
-
version:
|
264
|
+
requirements:
|
265
|
+
- - ! '>='
|
266
|
+
- !ruby/object:Gem::Version
|
267
|
+
version: '0'
|
157
268
|
requirements: []
|
158
|
-
|
159
269
|
rubyforge_project:
|
160
|
-
rubygems_version: 1.
|
270
|
+
rubygems_version: 1.8.23
|
161
271
|
signing_key:
|
162
272
|
specification_version: 3
|
163
|
-
summary:
|
164
|
-
|
273
|
+
summary: A converter from a raw HTML to an Atom feed. You can use it to watch sites
|
274
|
+
that do not provide its own feed.
|
275
|
+
test_files:
|
276
|
+
- test/test_cli.rb
|
165
277
|
- test/test_fetch.rb
|
166
|
-
- test/test_parse.rb
|
167
|
-
- test/test_server.rb
|
168
278
|
- test/test_generate.rb
|
279
|
+
- test/test_home.rb
|
280
|
+
- test/test_plugin.rb
|
281
|
+
- test/test_server.rb
|
data/bin/bwkfanboy_fetch
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# -*-ruby-*-
|
3
|
-
|
4
|
-
require_relative '../lib/bwkfanboy/fetch'
|
5
|
-
|
6
|
-
$conf = { banner: "Usage: #{File.basename($0)} [options] < uri" }
|
7
|
-
|
8
|
-
Bwkfanboy::Utils.cl_parse(ARGV, $conf[:banner], nil, true)
|
9
|
-
|
10
|
-
uri = gets
|
11
|
-
Bwkfanboy::Fetch.cat(uri) {|f|
|
12
|
-
f.each_line {|line| puts line }
|
13
|
-
}
|
data/bin/bwkfanboy_server
DELETED
@@ -1,126 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# -*-ruby-*-
|
3
|
-
|
4
|
-
require 'shellwords'
|
5
|
-
require 'webrick'
|
6
|
-
require 'date'
|
7
|
-
require_relative '../lib/bwkfanboy/utils'
|
8
|
-
|
9
|
-
$conf = {
|
10
|
-
addr: '127.0.0.1',
|
11
|
-
port: 9042,
|
12
|
-
converter: "./#{Bwkfanboy::Meta::NAME}",
|
13
|
-
banner: "Usage: #{File.basename($0)} [options]",
|
14
|
-
server_type: WEBrick::SimpleServer,
|
15
|
-
workdir: File.dirname(File.expand_path($0)),
|
16
|
-
pidfile: "#{Bwkfanboy::Meta::DIR_TMP}/#{File.basename($0)}.pid",
|
17
|
-
log: "#{Bwkfanboy::Meta::DIR_LOG}/#{File.basename($0)}.log",
|
18
|
-
alog: "#{Bwkfanboy::Meta::DIR_LOG}/#{File.basename($0)}-access.log",
|
19
|
-
mode: 'pipe'
|
20
|
-
}
|
21
|
-
|
22
|
-
o = Bwkfanboy::Utils.cl_parse(ARGV, $conf[:banner]) # create OptionParser object
|
23
|
-
o.on('-b VAL', 'BindAddress') { |i| $conf[:addr] = i }
|
24
|
-
o.on('-p VAL', 'A port number') { |i| $conf[:port] = i }
|
25
|
-
o.on('-c VAL', "A path to main #{Bwkfanboy::Meta::NAME} executable") { |i| $conf[:converter] = i }
|
26
|
-
o.on('-d', 'Detach from a terminal') {|i| $conf[:server_type] = WEBrick::Daemon }
|
27
|
-
o.on('-D', '(ignore this) Use URI_DEBUG const instead URI in plugins') { |i| $conf[:mode] = 'debug' }
|
28
|
-
Bwkfanboy::Utils.cl_parse(ARGV, $conf[:banner], o) # run cl parser
|
29
|
-
|
30
|
-
Bwkfanboy::Utils.dir_tmp_create()
|
31
|
-
|
32
|
-
class FeedServlet < WEBrick::HTTPServlet::AbstractServlet # :nodoc: all
|
33
|
-
def do_GET(req, res)
|
34
|
-
if req.query['p'] && req.query['p'] =~ Bwkfanboy::Meta::PLUGIN_NAME
|
35
|
-
res['Content-Type'] = 'application/atom+xml; charset=UTF-8'
|
36
|
-
res['Content-Disposition'] = "inline; filename=\"#{Bwkfanboy::Meta::NAME}-#{req.query['p']}.xml"
|
37
|
-
|
38
|
-
# possible options for the plugin
|
39
|
-
if req.query['o'] && req.query['o'] !~ Bwkfanboy::Meta::PLUGIN_OPTS
|
40
|
-
raise WEBrick::HTTPStatus::InternalServerError.new("'o' is too harsh")
|
41
|
-
end
|
42
|
-
|
43
|
-
cmd = "#{$conf[:converter]} #{$conf[:mode] == 'debug' ? '-D' : ''} '#{req.query['p']}' #{req.query['o']}"
|
44
|
-
r = Bwkfanboy::Utils.cmd_run(cmd)
|
45
|
-
if r[0] != 0 then
|
46
|
-
raise WEBrick::HTTPStatus::InternalServerError.new("Errors in the pipeline:\n\n #{r[1]}")
|
47
|
-
end
|
48
|
-
|
49
|
-
res.body = r[2]
|
50
|
-
|
51
|
-
# search for <updated> tag and set Last-Modified header
|
52
|
-
if (m = r[2].match('<updated>(.+?)</updated>'))
|
53
|
-
res['Last-Modified'] = DateTime.parse(m.to_s).httpdate
|
54
|
-
end
|
55
|
-
|
56
|
-
else
|
57
|
-
raise WEBrick::HTTPStatus::InternalServerError.new("Parameter 'p' required")
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
class FeedListServlet < WEBrick::HTTPServlet::AbstractServlet # :nodoc: all
|
63
|
-
def do_GET(req, res)
|
64
|
-
cmd = "#{$conf[:converter]} -l"
|
65
|
-
r = Bwkfanboy::Utils.cmd_run(cmd)
|
66
|
-
if r[0] != 0 then
|
67
|
-
raise WEBrick::HTTPStatus::InternalServerError.new("Errors:\n\n #{r[1]}")
|
68
|
-
end
|
69
|
-
|
70
|
-
res.body = r[2]
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
# create temporally files
|
75
|
-
def start_callback()
|
76
|
-
Dir.chdir($conf[:workdir])
|
77
|
-
if ! File.executable?($conf[:converter]) then
|
78
|
-
Bwkfanboy::Utils.errx(1, "Missing executable file '#{$conf[:converter]}'")
|
79
|
-
end
|
80
|
-
|
81
|
-
begin
|
82
|
-
File.open($conf[:pidfile], "w+") {|i| i.puts $$ }
|
83
|
-
rescue
|
84
|
-
Bwkfanboy::Utils.warnx("unable to create a pidfile " + $conf[:pidfile])
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
# remove temporally files
|
89
|
-
def stop_callback()
|
90
|
-
begin
|
91
|
-
File.unlink $conf[:pidfile]
|
92
|
-
rescue
|
93
|
-
# ignore errors
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
def log_create(f)
|
98
|
-
begin
|
99
|
-
log = Logger.new(f, 2, Bwkfanboy::Meta::LOG_MAXSIZE)
|
100
|
-
rescue
|
101
|
-
Bwkfanboy::Utils.warnx("cannot open log #{f}");
|
102
|
-
return nil
|
103
|
-
end
|
104
|
-
log.datetime_format = "%H:%M:%S"
|
105
|
-
log
|
106
|
-
end
|
107
|
-
|
108
|
-
# ----------------------------------------------------------------------
|
109
|
-
|
110
|
-
server_log = log_create($conf[:log])
|
111
|
-
access_log = [[ log_create($conf[:alog]), WEBrick::AccessLog::COMBINED_LOG_FORMAT ]]
|
112
|
-
|
113
|
-
s = WEBrick::HTTPServer.new(Port: $conf[:port],
|
114
|
-
BindAddress: $conf[:addr],
|
115
|
-
ServerType: $conf[:server_type],
|
116
|
-
StartCallback: -> {start_callback},
|
117
|
-
StopCallback: -> {stop_callback},
|
118
|
-
Logger: server_log,
|
119
|
-
AccessLog: access_log
|
120
|
-
)
|
121
|
-
s.mount("/", FeedServlet)
|
122
|
-
s.mount("/list", FeedListServlet)
|
123
|
-
['TERM', 'INT'].each {|i|
|
124
|
-
trap(i) { s.shutdown }
|
125
|
-
}
|
126
|
-
s.start
|