wunderbar 0.21.3 → 0.21.4
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.
- checksums.yaml +7 -0
- data/README.md +3 -1
- data/lib/wunderbar/backtick.rb +11 -0
- data/lib/wunderbar/builder.rb +105 -68
- data/lib/wunderbar/cgi-methods.rb +1 -1
- data/lib/wunderbar/version.rb +1 -1
- data/wunderbar.gemspec +5 -5
- metadata +54 -56
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8badf15d87c160ff80047cf11daa11c075f52cd1
|
4
|
+
data.tar.gz: 49055a8e408472bfa4b868ea45dfbf3133aa09d4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b325a928ba13e21146b98ecaea45a1eb53e7cece7e37c076f07b278373d9674798420370e295c798be7b20739106a189bba9095373ad45d22d3b0a8e3655eaa2
|
7
|
+
data.tar.gz: 76b378725828ff67d819119459e7aa480b9bd33d0284bd8dae28e37728e7fdcbdeb98f62933ee9f08b23d5993ea1024da7346d792f1e92a7fa3e0d6d2d2a8fd4
|
data/README.md
CHANGED
@@ -21,6 +21,8 @@ A [tutorial](https://github.com/rubys/wunderbar/blob/master/docs/Introduction1.m
|
|
21
21
|
Additional functionality is provided by
|
22
22
|
[extensions](https://github.com/rubys/wunderbar/blob/master/docs/Extensions.md).
|
23
23
|
|
24
|
+
[](https://travis-ci.org/rubys/wunderbar)
|
25
|
+
|
24
26
|
Overview
|
25
27
|
---
|
26
28
|
|
@@ -334,7 +336,7 @@ are sent individually and as they are produced.
|
|
334
336
|
`_.recv` or `_.pop` can be used to receive arbitrary strings. More commonly,
|
335
337
|
`_.subscribe` is used to register a block that is used as a callback.
|
336
338
|
|
337
|
-
`_.system` will run an
|
339
|
+
`_.system` will run an arbitrary command. Lines of output are sent across the
|
338
340
|
websocket as they are received as JSON encoded hashes with two values: `type`
|
339
341
|
is one of `stdin`, `stdout` or `stderr`; and `line` which contains the line
|
340
342
|
itself. If the command is an array, the elements of the array will be escaped
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# Redefine backtic in HTML templates to do a Ruby => JS conversion. Useful
|
2
|
+
# when there is a substantial amount of embedded JavaScript, for example
|
3
|
+
# when using Angular.js
|
4
|
+
|
5
|
+
require 'ruby2js'
|
6
|
+
|
7
|
+
class Wunderbar::HtmlMarkup
|
8
|
+
def `(input)
|
9
|
+
Ruby2JS.convert(input)
|
10
|
+
end
|
11
|
+
end
|
data/lib/wunderbar/builder.rb
CHANGED
@@ -27,6 +27,75 @@ module Wunderbar
|
|
27
27
|
end
|
28
28
|
Wunderbar.websocket(*args, &block)
|
29
29
|
end
|
30
|
+
|
31
|
+
# execute a system command, echoing stdin, stdout, and stderr
|
32
|
+
def system(command, opts={})
|
33
|
+
if command.respond_to? :flatten
|
34
|
+
flat = command.flatten
|
35
|
+
secret = command - flat
|
36
|
+
begin
|
37
|
+
# if available, use escape as it does prettier quoting
|
38
|
+
require 'escape'
|
39
|
+
echo = Escape.shell_command(command.compact - secret)
|
40
|
+
rescue LoadError
|
41
|
+
# std-lib function that gets the job done
|
42
|
+
require 'shellwords'
|
43
|
+
echo = Shellwords.join(command.compact - secret)
|
44
|
+
end
|
45
|
+
command = flat.compact.map(&:dup).map(&:untaint)
|
46
|
+
else
|
47
|
+
echo = command
|
48
|
+
command = [command]
|
49
|
+
end
|
50
|
+
|
51
|
+
patterns = opts[:hilite] || []
|
52
|
+
patterns=[patterns] if String === patterns or Regexp === patterns
|
53
|
+
patterns.map! do |pattern|
|
54
|
+
String === pattern ? Regexp.new(Regexp.escape(pattern)) : pattern
|
55
|
+
end
|
56
|
+
|
57
|
+
yield :stdin, echo unless opts[:echo] == false
|
58
|
+
|
59
|
+
require 'open3'
|
60
|
+
require 'thread'
|
61
|
+
semaphore = Mutex.new
|
62
|
+
Open3.popen3(*command) do |pin, pout, perr, wait|
|
63
|
+
[
|
64
|
+
Thread.new do
|
65
|
+
until pout.eof?
|
66
|
+
out_line = pout.readline.chomp
|
67
|
+
semaphore.synchronize do
|
68
|
+
if patterns.any? {|pattern| out_line =~ pattern}
|
69
|
+
yield :hilight, out_line
|
70
|
+
else
|
71
|
+
yield :stdout, out_line
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end,
|
76
|
+
|
77
|
+
Thread.new do
|
78
|
+
until perr.eof?
|
79
|
+
err_line = perr.readline.chomp
|
80
|
+
semaphore.synchronize do
|
81
|
+
yield :stderr, err_line
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end,
|
85
|
+
|
86
|
+
Thread.new do
|
87
|
+
if opts[:stdin].respond_to? :read
|
88
|
+
require 'fileutils'
|
89
|
+
FileUtils.copy_stream opts[:stdin], pin
|
90
|
+
elsif opts[:stdin]
|
91
|
+
pin.write opts[:stdin].to_s
|
92
|
+
end
|
93
|
+
pin.close
|
94
|
+
end
|
95
|
+
].each {|thread| thread.join}
|
96
|
+
wait and wait.value.exitstatus
|
97
|
+
end
|
98
|
+
end
|
30
99
|
end
|
31
100
|
|
32
101
|
class XmlMarkup < BuilderClass
|
@@ -167,77 +236,15 @@ module Wunderbar
|
|
167
236
|
|
168
237
|
# execute a system command, echoing stdin, stdout, and stderr
|
169
238
|
def system(command, opts={})
|
170
|
-
if command.respond_to? :flatten
|
171
|
-
flat = command.flatten
|
172
|
-
secret = command - flat
|
173
|
-
begin
|
174
|
-
# if available, use escape as it does prettier quoting
|
175
|
-
require 'escape'
|
176
|
-
echo = Escape.shell_command(command.compact - secret)
|
177
|
-
rescue LoadError
|
178
|
-
# std-lib function that gets the job done
|
179
|
-
require 'shellwords'
|
180
|
-
echo = Shellwords.join(command.compact - secret)
|
181
|
-
end
|
182
|
-
command = flat.compact.map(&:dup).map(&:untaint)
|
183
|
-
else
|
184
|
-
echo = command
|
185
|
-
command = [command]
|
186
|
-
end
|
187
|
-
|
188
|
-
patterns = opts[:hilite] || []
|
189
|
-
patterns=[patterns] if String === patterns or Regexp === patterns
|
190
|
-
patterns.map! do |pattern|
|
191
|
-
String === pattern ? Regexp.new(Regexp.escape(pattern)) : pattern
|
192
|
-
end
|
193
|
-
|
194
|
-
require 'open3'
|
195
239
|
tag = opts[:tag] || 'pre'
|
196
240
|
output_class = opts[:class] || {}
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
tag! tag, echo, :class=>stdin unless opts[:echo] == false
|
203
|
-
|
204
|
-
require 'thread'
|
205
|
-
semaphore = Mutex.new
|
206
|
-
Open3.popen3(*command) do |pin, pout, perr, wait|
|
207
|
-
[
|
208
|
-
Thread.new do
|
209
|
-
until pout.eof?
|
210
|
-
out_line = pout.readline.chomp
|
211
|
-
semaphore.synchronize do
|
212
|
-
if patterns.any? {|pattern| out_line =~ pattern}
|
213
|
-
tag! tag, out_line, :class=>hilite
|
214
|
-
else
|
215
|
-
tag! tag, out_line, :class=>stdout
|
216
|
-
end
|
217
|
-
end
|
218
|
-
end
|
219
|
-
end,
|
241
|
+
output_class[:stdin] ||= '_stdin'
|
242
|
+
output_class[:stdout] ||= '_stdout'
|
243
|
+
output_class[:stderr] ||= '_stderr'
|
244
|
+
output_class[:hilite] ||= '_stdout _hilite'
|
220
245
|
|
221
|
-
|
222
|
-
|
223
|
-
err_line = perr.readline.chomp
|
224
|
-
semaphore.synchronize do
|
225
|
-
tag! tag, err_line, :class=>stderr
|
226
|
-
end
|
227
|
-
end
|
228
|
-
end,
|
229
|
-
|
230
|
-
Thread.new do
|
231
|
-
if opts[:stdin].respond_to? :read
|
232
|
-
require 'fileutils'
|
233
|
-
FileUtils.copy_stream opts[:stdin], pin
|
234
|
-
elsif opts[:stdin]
|
235
|
-
pin.write opts[:stdin].to_s
|
236
|
-
end
|
237
|
-
pin.close
|
238
|
-
end
|
239
|
-
].each {|thread| thread.join}
|
240
|
-
wait and wait.value.exitstatus
|
246
|
+
super do |kind, line|
|
247
|
+
tag! tag, line, class: output_class[kind]
|
241
248
|
end
|
242
249
|
end
|
243
250
|
|
@@ -399,6 +406,16 @@ module Wunderbar
|
|
399
406
|
end
|
400
407
|
end
|
401
408
|
|
409
|
+
# execute a system command, echoing stdin, stdout, and stderr
|
410
|
+
def system(command, opts={})
|
411
|
+
output_prefix = opts[:prefix] || {}
|
412
|
+
output_prefix[:stdin] ||= '$ '
|
413
|
+
|
414
|
+
super do |kind, line|
|
415
|
+
@_target.puts "#{output_prefix[kind]}#{line}"
|
416
|
+
end
|
417
|
+
end
|
418
|
+
|
402
419
|
def target!
|
403
420
|
@_target.string
|
404
421
|
end
|
@@ -503,6 +520,18 @@ module Wunderbar
|
|
503
520
|
end
|
504
521
|
end
|
505
522
|
|
523
|
+
# execute a system command, echoing stdin, stdout, and stderr
|
524
|
+
def system(command, opts={})
|
525
|
+
transcript = opts[:transcript] || 'transcript'
|
526
|
+
output_prefix = opts[:prefix] || {}
|
527
|
+
output_prefix[:stdin] ||= '$ '
|
528
|
+
@_target[transcript] ||= []
|
529
|
+
|
530
|
+
super do |kind, line|
|
531
|
+
@_target[transcript] << "#{output_prefix[kind]}#{line}"
|
532
|
+
end
|
533
|
+
end
|
534
|
+
|
506
535
|
def target!
|
507
536
|
begin
|
508
537
|
JSON.pretty_generate(@_target)+ "\n"
|
@@ -510,5 +539,13 @@ module Wunderbar
|
|
510
539
|
@_target.to_json + "\n"
|
511
540
|
end
|
512
541
|
end
|
542
|
+
|
543
|
+
def target?(type=nil)
|
544
|
+
if Class === type
|
545
|
+
type === @_target
|
546
|
+
else
|
547
|
+
@_target
|
548
|
+
end
|
549
|
+
end
|
513
550
|
end
|
514
551
|
end
|
@@ -12,7 +12,7 @@ module Wunderbar
|
|
12
12
|
headers['status'] = "404 Not Found" if output == {}
|
13
13
|
rescue Exception => exception
|
14
14
|
headers['status'] = "500 Internal Server Error"
|
15
|
-
builder._! Hash.new
|
15
|
+
builder._! Hash.new unless builder.target? Hash
|
16
16
|
builder._exception exception
|
17
17
|
ensure
|
18
18
|
out?(scope, headers) { builder.target! }
|
data/lib/wunderbar/version.rb
CHANGED
data/wunderbar.gemspec
CHANGED
@@ -2,22 +2,22 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "wunderbar"
|
5
|
-
s.version = "0.21.
|
5
|
+
s.version = "0.21.4"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Sam Ruby"]
|
9
|
-
s.date = "2014-
|
9
|
+
s.date = "2014-06-24"
|
10
10
|
s.description = " Wunderbar makes it easy to produce valid HTML5, wellformed XHTML, Unicode\n (utf-8), consistently indented, readable applications. This includes\n output that conforms to the Polyglot specification and the emerging\n results from the XML Error Recovery Community Group.\n"
|
11
11
|
s.email = "rubys@intertwingly.net"
|
12
|
-
s.files = ["wunderbar.gemspec", "README.md", "COPYING", "lib/wunderbar
|
12
|
+
s.files = ["wunderbar.gemspec", "README.md", "COPYING", "lib/wunderbar", "lib/wunderbar/angularjs", "lib/wunderbar/angularjs/resource.rb", "lib/wunderbar/angularjs/route.rb", "lib/wunderbar/angularjs.rb", "lib/wunderbar/asset.rb", "lib/wunderbar/backtick.rb", "lib/wunderbar/bootstrap", "lib/wunderbar/bootstrap/theme.rb", "lib/wunderbar/bootstrap.rb", "lib/wunderbar/builder.rb", "lib/wunderbar/cgi-methods.rb", "lib/wunderbar/coderay.rb", "lib/wunderbar/coffeescript.rb", "lib/wunderbar/cssproxy.rb", "lib/wunderbar/environment.rb", "lib/wunderbar/html-methods.rb", "lib/wunderbar/installation.rb", "lib/wunderbar/job-control.rb", "lib/wunderbar/jquery", "lib/wunderbar/jquery/filter.rb", "lib/wunderbar/jquery/stupidtable.rb", "lib/wunderbar/jquery.rb", "lib/wunderbar/logger.rb", "lib/wunderbar/markdown.rb", "lib/wunderbar/node.rb", "lib/wunderbar/opal", "lib/wunderbar/opal/browser.rb", "lib/wunderbar/opal/jquery.rb", "lib/wunderbar/opal.rb", "lib/wunderbar/pagedown.rb", "lib/wunderbar/polymer.rb", "lib/wunderbar/rack.rb", "lib/wunderbar/rails.rb", "lib/wunderbar/script.rb", "lib/wunderbar/server.rb", "lib/wunderbar/sinatra.rb", "lib/wunderbar/underscore.rb", "lib/wunderbar/vendor", "lib/wunderbar/vendor/angular-resource.min.js", "lib/wunderbar/vendor/angular-route.min.js", "lib/wunderbar/vendor/angular.min.js", "lib/wunderbar/vendor/bootstrap-theme.min.css", "lib/wunderbar/vendor/bootstrap.min.css", "lib/wunderbar/vendor/bootstrap.min.js", "lib/wunderbar/vendor/jquery-1.11.0.min.js", "lib/wunderbar/vendor/Markdown.Converter.js", "lib/wunderbar/vendor/polymer-v0.0.20131003.min.js", "lib/wunderbar/vendor/stupidtable.min.js", "lib/wunderbar/vendor/underscore-min.js", "lib/wunderbar/version.rb", "lib/wunderbar/websocket.rb", "lib/wunderbar.rb"]
|
13
13
|
s.homepage = "http://github.com/rubys/wunderbar"
|
14
14
|
s.licenses = ["MIT"]
|
15
15
|
s.require_paths = ["lib"]
|
16
|
-
s.rubygems_version = "
|
16
|
+
s.rubygems_version = "2.0.14"
|
17
17
|
s.summary = "HTML Generator and CGI application support"
|
18
18
|
|
19
19
|
if s.respond_to? :specification_version then
|
20
|
-
s.specification_version =
|
20
|
+
s.specification_version = 4
|
21
21
|
|
22
22
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
23
23
|
s.add_runtime_dependency(%q<json>, [">= 0"])
|
metadata
CHANGED
@@ -1,36 +1,34 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wunderbar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.21.
|
5
|
-
prerelease:
|
4
|
+
version: 0.21.4
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Sam Ruby
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2014-
|
11
|
+
date: 2014-06-24 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: json
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
|
-
description:
|
31
|
-
|
32
|
-
|
33
|
-
|
27
|
+
description: |2
|
28
|
+
Wunderbar makes it easy to produce valid HTML5, wellformed XHTML, Unicode
|
29
|
+
(utf-8), consistently indented, readable applications. This includes
|
30
|
+
output that conforms to the Polyglot specification and the emerging
|
31
|
+
results from the XML Error Recovery Community Group.
|
34
32
|
email: rubys@intertwingly.net
|
35
33
|
executables: []
|
36
34
|
extensions: []
|
@@ -39,75 +37,75 @@ files:
|
|
39
37
|
- wunderbar.gemspec
|
40
38
|
- README.md
|
41
39
|
- COPYING
|
42
|
-
- lib/wunderbar.rb
|
43
|
-
- lib/wunderbar/
|
44
|
-
- lib/wunderbar/jquery.rb
|
45
|
-
- lib/wunderbar/underscore.rb
|
46
|
-
- lib/wunderbar/polymer.rb
|
47
|
-
- lib/wunderbar/jquery/filter.rb
|
48
|
-
- lib/wunderbar/jquery/stupidtable.rb
|
49
|
-
- lib/wunderbar/vendor/polymer-v0.0.20131003.min.js
|
50
|
-
- lib/wunderbar/vendor/stupidtable.min.js
|
51
|
-
- lib/wunderbar/vendor/bootstrap.min.js
|
52
|
-
- lib/wunderbar/vendor/Markdown.Converter.js
|
53
|
-
- lib/wunderbar/vendor/angular.min.js
|
54
|
-
- lib/wunderbar/vendor/bootstrap-theme.min.css
|
55
|
-
- lib/wunderbar/vendor/jquery-1.11.0.min.js
|
56
|
-
- lib/wunderbar/vendor/angular-resource.min.js
|
57
|
-
- lib/wunderbar/vendor/bootstrap.min.css
|
58
|
-
- lib/wunderbar/vendor/underscore-min.js
|
59
|
-
- lib/wunderbar/vendor/angular-route.min.js
|
60
|
-
- lib/wunderbar/websocket.rb
|
61
|
-
- lib/wunderbar/environment.rb
|
62
|
-
- lib/wunderbar/pagedown.rb
|
63
|
-
- lib/wunderbar/version.rb
|
64
|
-
- lib/wunderbar/cgi-methods.rb
|
65
|
-
- lib/wunderbar/server.rb
|
40
|
+
- lib/wunderbar/angularjs/resource.rb
|
41
|
+
- lib/wunderbar/angularjs/route.rb
|
66
42
|
- lib/wunderbar/angularjs.rb
|
67
|
-
- lib/wunderbar/logger.rb
|
68
43
|
- lib/wunderbar/asset.rb
|
69
|
-
- lib/wunderbar/
|
70
|
-
- lib/wunderbar/
|
71
|
-
- lib/wunderbar/coffeescript.rb
|
72
|
-
- lib/wunderbar/markdown.rb
|
73
|
-
- lib/wunderbar/opal.rb
|
74
|
-
- lib/wunderbar/installation.rb
|
44
|
+
- lib/wunderbar/backtick.rb
|
45
|
+
- lib/wunderbar/bootstrap/theme.rb
|
75
46
|
- lib/wunderbar/bootstrap.rb
|
76
|
-
- lib/wunderbar/job-control.rb
|
77
|
-
- lib/wunderbar/sinatra.rb
|
78
|
-
- lib/wunderbar/rails.rb
|
79
|
-
- lib/wunderbar/angularjs/resource.rb
|
80
|
-
- lib/wunderbar/angularjs/route.rb
|
81
|
-
- lib/wunderbar/rack.rb
|
82
|
-
- lib/wunderbar/coderay.rb
|
83
47
|
- lib/wunderbar/builder.rb
|
84
|
-
- lib/wunderbar/
|
48
|
+
- lib/wunderbar/cgi-methods.rb
|
49
|
+
- lib/wunderbar/coderay.rb
|
50
|
+
- lib/wunderbar/coffeescript.rb
|
85
51
|
- lib/wunderbar/cssproxy.rb
|
52
|
+
- lib/wunderbar/environment.rb
|
86
53
|
- lib/wunderbar/html-methods.rb
|
54
|
+
- lib/wunderbar/installation.rb
|
55
|
+
- lib/wunderbar/job-control.rb
|
56
|
+
- lib/wunderbar/jquery/filter.rb
|
57
|
+
- lib/wunderbar/jquery/stupidtable.rb
|
58
|
+
- lib/wunderbar/jquery.rb
|
59
|
+
- lib/wunderbar/logger.rb
|
60
|
+
- lib/wunderbar/markdown.rb
|
87
61
|
- lib/wunderbar/node.rb
|
62
|
+
- lib/wunderbar/opal/browser.rb
|
63
|
+
- lib/wunderbar/opal/jquery.rb
|
64
|
+
- lib/wunderbar/opal.rb
|
65
|
+
- lib/wunderbar/pagedown.rb
|
66
|
+
- lib/wunderbar/polymer.rb
|
67
|
+
- lib/wunderbar/rack.rb
|
68
|
+
- lib/wunderbar/rails.rb
|
69
|
+
- lib/wunderbar/script.rb
|
70
|
+
- lib/wunderbar/server.rb
|
71
|
+
- lib/wunderbar/sinatra.rb
|
72
|
+
- lib/wunderbar/underscore.rb
|
73
|
+
- lib/wunderbar/vendor/angular-resource.min.js
|
74
|
+
- lib/wunderbar/vendor/angular-route.min.js
|
75
|
+
- lib/wunderbar/vendor/angular.min.js
|
76
|
+
- lib/wunderbar/vendor/bootstrap-theme.min.css
|
77
|
+
- lib/wunderbar/vendor/bootstrap.min.css
|
78
|
+
- lib/wunderbar/vendor/bootstrap.min.js
|
79
|
+
- lib/wunderbar/vendor/jquery-1.11.0.min.js
|
80
|
+
- lib/wunderbar/vendor/Markdown.Converter.js
|
81
|
+
- lib/wunderbar/vendor/polymer-v0.0.20131003.min.js
|
82
|
+
- lib/wunderbar/vendor/stupidtable.min.js
|
83
|
+
- lib/wunderbar/vendor/underscore-min.js
|
84
|
+
- lib/wunderbar/version.rb
|
85
|
+
- lib/wunderbar/websocket.rb
|
86
|
+
- lib/wunderbar.rb
|
88
87
|
homepage: http://github.com/rubys/wunderbar
|
89
88
|
licenses:
|
90
89
|
- MIT
|
90
|
+
metadata: {}
|
91
91
|
post_install_message:
|
92
92
|
rdoc_options: []
|
93
93
|
require_paths:
|
94
94
|
- lib
|
95
95
|
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
-
none: false
|
97
96
|
requirements:
|
98
|
-
- -
|
97
|
+
- - '>='
|
99
98
|
- !ruby/object:Gem::Version
|
100
99
|
version: '0'
|
101
100
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
-
none: false
|
103
101
|
requirements:
|
104
|
-
- -
|
102
|
+
- - '>='
|
105
103
|
- !ruby/object:Gem::Version
|
106
104
|
version: '0'
|
107
105
|
requirements: []
|
108
106
|
rubyforge_project:
|
109
|
-
rubygems_version:
|
107
|
+
rubygems_version: 2.0.14
|
110
108
|
signing_key:
|
111
|
-
specification_version:
|
109
|
+
specification_version: 4
|
112
110
|
summary: HTML Generator and CGI application support
|
113
111
|
test_files: []
|