myoutline 0.4.2 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +1 -1
- data/lib/myoutline.rb +146 -158
- metadata +39 -35
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 6614e36ff7173aa1c349e602e06c6da38cad3131cd4b728002b749113b33d434
|
4
|
+
data.tar.gz: efebcbfbc31ea18c4dff00019885a085de2953054c936bf3b620e2d35e0a48a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61019834b793cd3db0dad4c5d3be5eadde1647cd37f6a604e78832dc287bab795e6da3da2bb826d768d9ea2b565e1a7e1eec0e3ff02f545baa950b21aaaa5b4b
|
7
|
+
data.tar.gz: 5b16e5c117f62c53c9541bf930609e7d9b12403d14211fcf7c15e19bf8ff05444ced5993cba6b608a078eee9de639364ebf73fc0e7d30326940e5bff9bcf25d9
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
3*4�hW���:�e�;P���>DW�q,�G��WO˨W���>�߶�B�1�[�,��a�e����wPRD�W�����/��J�E[����)���Yȶ��uV��u�a��ϋ/ɭRxig�dT���.j���q{��Eo�`�}�>���G�
|
data/lib/myoutline.rb
CHANGED
@@ -11,142 +11,200 @@ require 'md_edit'
|
|
11
11
|
|
12
12
|
class MyOutline
|
13
13
|
|
14
|
-
attr_reader :
|
14
|
+
attr_reader :outline
|
15
15
|
attr_accessor :md
|
16
|
+
|
17
|
+
class Outline
|
18
|
+
using ColouredText
|
19
|
+
|
20
|
+
attr_reader :ftx, :links, :pxi
|
21
|
+
|
22
|
+
def initialize(source, debug: false, allsorted: true, autoupdate: true)
|
23
|
+
|
24
|
+
@debug, @source = debug, source
|
25
|
+
@allsorted, @autoupdate = allsorted, autoupdate
|
26
|
+
|
27
|
+
build_index(source)
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
def autosave(s=nil)
|
32
|
+
|
33
|
+
puts ('inside autosave ; @autoupdate: ' + @autoupdate.inspect).debug if @debug
|
34
|
+
|
35
|
+
if @autoupdate then
|
36
|
+
puts 'before save'.info if @debug
|
37
|
+
save() if s.nil? or self.to_s != s
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
def build_html(&blk)
|
43
|
+
@pxi.build_html(&blk)
|
44
|
+
end
|
45
|
+
|
46
|
+
def locate(s)
|
47
|
+
@links.locate s
|
48
|
+
end
|
49
|
+
|
50
|
+
def ls(path='.')
|
51
|
+
@ftx.ls(path).map(&:to_s)
|
52
|
+
end
|
53
|
+
|
54
|
+
def save(filename=nil)
|
55
|
+
|
56
|
+
if filename.nil? then
|
57
|
+
filename = RXFHelper.writeable?(@source) ? @source : 'myoutline.txt'
|
58
|
+
end
|
59
|
+
|
60
|
+
RXFHelper.write filename, self.to_s(declaration: true)
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
def to_px()
|
65
|
+
@pxi.to_px
|
66
|
+
end
|
67
|
+
|
68
|
+
def to_s(declaration: false)
|
69
|
+
|
70
|
+
if declaration == true then
|
71
|
+
@pxi.to_s.sub(/(?<=^\<\?)([^\?]+)/,'myoutline')
|
72
|
+
else
|
73
|
+
@pxi.to_s.lines[1..-1].join.lstrip
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
def to_tree
|
79
|
+
format_tree(alphabet: true, nourl: true)
|
80
|
+
end
|
81
|
+
|
82
|
+
def to_treelinks
|
83
|
+
format_tree()
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def build_index(s)
|
89
|
+
|
90
|
+
@pxi = PxIndex.new(debug: @debug, indexsorted: @indexsorted,
|
91
|
+
allsorted: @allsorted)
|
92
|
+
@pxi.import s
|
93
|
+
autosave(s)
|
94
|
+
read(self.to_treelinks)
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
def format_tree(alphabet: false, nourl: false)
|
99
|
+
|
100
|
+
a = @pxi.to_s.lines
|
101
|
+
a.shift # remove the ph declaration
|
102
|
+
a.reject! {|x| x =~ /^(?:#[^\n]+|\n+)$/} unless alphabet
|
103
|
+
|
104
|
+
if nourl then
|
105
|
+
# strip out the URLS?
|
106
|
+
a.map! {|x| r = x[/^.*(?= # )/]; r ? r + "\n" : x }
|
107
|
+
end
|
108
|
+
|
109
|
+
a.join
|
110
|
+
|
111
|
+
end
|
16
112
|
|
17
|
-
|
18
|
-
|
113
|
+
def read(s)
|
114
|
+
|
115
|
+
@links = PolyrexLinks.new.import(s, debug: @debug)
|
116
|
+
|
117
|
+
s3 = s.lines.map {|x| x.split(/ | # /,2)[0]}.join("\n")
|
118
|
+
@ftx = FileTreeXML.new(s3, debug: @debug)
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
def initialize(source, debug: false, allsorted: true, autoupdate: true,
|
125
|
+
topic_url: '$topic', md_path: '.', default_md: 'main.md')
|
19
126
|
|
20
|
-
@debug, @
|
21
|
-
@
|
127
|
+
@debug, @topic_url = debug, topic_url
|
128
|
+
@md_path = md_path
|
129
|
+
@default_md = default_md
|
130
|
+
@allsorted, @autoupdate = allsorted, autoupdate
|
22
131
|
|
23
|
-
|
24
|
-
|
132
|
+
@outline = Outline.new(source, debug: debug,
|
133
|
+
allsorted: allsorted, autoupdate: autoupdate)
|
25
134
|
|
26
135
|
end
|
27
136
|
|
28
137
|
def fetch(uri)
|
29
138
|
|
30
|
-
s, remaining = @
|
139
|
+
s, remaining = @outline.locate(uri)
|
31
140
|
puts 'fetch() s: ' + s.inspect if @debug
|
32
141
|
redirect = s =~ /^\[r\] +/i
|
33
142
|
return s if redirect
|
34
143
|
|
144
|
+
s ||= @default_md; remaining ||= ''
|
145
|
+
|
35
146
|
f = File.join(@md_path, s)
|
36
147
|
puts 'f: ' + f.inspect if @debug
|
37
148
|
@md = MdEdit.new f, debug: @debug
|
38
149
|
r = edit(remaining.sub(/^\//,'').gsub(/\//,' > '))
|
39
|
-
puts 'r: ' + r.inspect if @debug
|
150
|
+
puts 'fetch() r: ' + r.inspect if @debug
|
40
151
|
@md.update r
|
41
152
|
|
42
153
|
r
|
43
154
|
end
|
44
|
-
|
45
|
-
|
46
|
-
def ls(path='.')
|
47
|
-
@ftx.ls(path).map(&:to_s)
|
48
|
-
end
|
49
155
|
|
50
156
|
def rebuild(s)
|
51
|
-
|
157
|
+
@outline = Outline.new s
|
52
158
|
end
|
53
159
|
|
54
160
|
def update(section)
|
55
161
|
@md.update section
|
56
|
-
end
|
162
|
+
end
|
57
163
|
|
58
|
-
def
|
164
|
+
def update_tree(s)
|
59
165
|
|
60
|
-
|
61
|
-
|
62
|
-
end
|
63
|
-
|
64
|
-
RXFHelper.write filename, self.to_s(declaration: true)
|
166
|
+
mo2 = Outline.new(s, debug: @debug,
|
167
|
+
allsorted: @allsorted, autoupdate: @autoupdate)
|
65
168
|
|
66
|
-
|
67
|
-
|
68
|
-
def to_html()
|
69
|
-
|
70
|
-
px = self.to_px
|
169
|
+
h = @outline.links.to_h
|
170
|
+
links = mo2.links
|
71
171
|
|
72
|
-
|
172
|
+
mo2.links.to_h.each do |title, file|
|
73
173
|
|
74
|
-
if
|
75
|
-
|
76
|
-
|
77
|
-
s = x.title.gsub(/ +/,'-')
|
78
|
-
x.attributes[:trail] = trail.nil? ? s : trail + '/' + s
|
79
|
-
|
174
|
+
if @debug then
|
175
|
+
puts 'title: ' + title.inspect
|
176
|
+
puts 'h[title]: ' + h[title].inspect
|
80
177
|
end
|
81
178
|
|
82
|
-
|
83
|
-
|
84
|
-
doc = Nokogiri::XML(px.to_xml)
|
85
|
-
xsl = Nokogiri::XSLT(xslt())
|
86
|
-
|
87
|
-
doc = Rexle.new(xsl.transform(doc).to_s)
|
88
|
-
|
89
|
-
doc.root.css('.atopic').each do |e|
|
90
|
-
puts 'e: ' + e.parent.parent.xml.inspect if @debug
|
91
|
-
e.attributes[:href] = @topic_url.sub(/\$topic/, e.text)\
|
92
|
-
.sub(/\$id/, e.attributes[:id]).sub(/\$trail/, e.attributes[:trail])\
|
93
|
-
.to_s.gsub(/ +/,'-')
|
179
|
+
links.link(title).url = h[title] if h[title]
|
94
180
|
end
|
95
181
|
|
96
|
-
|
182
|
+
puts 'before Outline.new: ' + links.to_s(header: false).inspect if @debug
|
97
183
|
|
184
|
+
@outline = Outline.new(links.to_s(header: false), debug: @debug,
|
185
|
+
allsorted: @allsorted, autoupdate: @autoupdate)
|
186
|
+
@outline.autosave
|
98
187
|
end
|
99
188
|
|
100
|
-
def
|
101
|
-
@pxi.to_px
|
102
|
-
end
|
103
|
-
|
104
|
-
def to_s(declaration: false)
|
189
|
+
def to_html()
|
105
190
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
191
|
+
@outline.build_html do |e|
|
192
|
+
|
193
|
+
e.attributes[:href] = @topic_url.sub(/\$topic/, e.text)\
|
194
|
+
.sub(/\$id/, e.attributes[:id]).sub(/\$trail/, e.attributes[:trail])\
|
195
|
+
.to_s.gsub(/ +/,'-')
|
196
|
+
|
197
|
+
end
|
111
198
|
|
112
199
|
end
|
113
200
|
|
114
|
-
|
115
|
-
|
116
|
-
format_tree(alphabet: true, nourl: true)
|
201
|
+
def to_s()
|
202
|
+
@outline
|
117
203
|
end
|
118
204
|
|
119
|
-
def to_treelinks
|
120
|
-
format_tree()
|
121
|
-
end
|
122
205
|
|
123
206
|
private
|
124
207
|
|
125
|
-
def build_index(raw_s)
|
126
|
-
|
127
|
-
# find the entries which aren't on the main index
|
128
|
-
s = raw_s.sub(/<[^>]+>\n/,'')
|
129
|
-
doc = LineTree.new(s, debug: @debug).to_doc(encapsulate: true)
|
130
|
-
a = doc.root.xpath('entry/text()')
|
131
|
-
puts 'doc: ' + doc.xml if @debug
|
132
|
-
a2 = doc.root.xpath('entry//entry/text()')
|
133
|
-
puts 'a2: ' + a2.inspect if @debug
|
134
|
-
a3 = a2 - a
|
135
|
-
puts 'a3:' + a3.inspect if @debug
|
136
|
-
|
137
|
-
# add the new entries to the main index
|
138
|
-
s << "\n" + a3.join("\n")
|
139
|
-
|
140
|
-
s.prepend '<?ph schema="entries/section[heading]/entry[title, url]"?>
|
141
|
-
|
142
|
-
'
|
143
|
-
|
144
|
-
@pxi = PxIndex.new(s, debug: @debug, indexsorted: true,
|
145
|
-
allsorted: @allsorted)
|
146
|
-
save() if @autoupdate and self.to_s != raw_s
|
147
|
-
read(self.to_treelinks)
|
148
|
-
end
|
149
|
-
|
150
208
|
def edit(s)
|
151
209
|
|
152
210
|
r = @md.find s
|
@@ -164,77 +222,7 @@ class MyOutline
|
|
164
222
|
|
165
223
|
end
|
166
224
|
|
167
|
-
end
|
168
|
-
|
169
|
-
def format_tree(alphabet: false, nourl: false)
|
170
|
-
|
171
|
-
a = @pxi.to_s.lines
|
172
|
-
a.shift # remove the ph declaration
|
173
|
-
a.reject! {|x| x =~ /^(?:#[^\n]+|\n+)$/} unless alphabet
|
174
|
-
|
175
|
-
if nourl then
|
176
|
-
# strip out the URLS?
|
177
|
-
a.map! {|x| r = x[/^.*(?= # )/]; r ? r + "\n" : x }
|
178
|
-
end
|
179
|
-
|
180
|
-
a.join
|
181
|
-
|
182
|
-
end
|
183
|
-
|
184
|
-
def read(s)
|
185
|
-
@links = PolyrexLinks.new.import(s, debug: @debug)
|
186
|
-
|
187
|
-
s3 = s.lines.map {|x| x.split(/ | # /,2)[0]}.join("\n")
|
188
|
-
@ftx = FileTreeXML.new(s3, debug: @debug)
|
189
225
|
end
|
190
|
-
|
191
|
-
def xslt()
|
192
|
-
<<EOF
|
193
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
194
|
-
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
195
|
-
<xsl:output method="xml" indent="yes" />
|
196
|
-
|
197
|
-
<xsl:template match='entries'>
|
198
|
-
<ul>
|
199
|
-
<xsl:apply-templates select='summary'/>
|
200
|
-
<xsl:apply-templates select='records'/>
|
201
|
-
</ul>
|
202
|
-
</xsl:template>
|
203
|
-
|
204
|
-
<xsl:template match='entries/summary'>
|
205
|
-
</xsl:template>
|
206
|
-
|
207
|
-
<xsl:template match='records/section'>
|
208
|
-
<li><h1><xsl:value-of select="summary/heading"/></h1><xsl:text>
|
209
|
-
</xsl:text>
|
210
|
-
|
211
|
-
<xsl:apply-templates select='records'/>
|
212
|
-
|
213
|
-
<xsl:text>
|
214
|
-
</xsl:text>
|
215
|
-
</li>
|
216
|
-
</xsl:template>
|
217
226
|
|
218
227
|
|
219
|
-
<xsl:template match='records/entry'>
|
220
|
-
<ul id="{summary/title}">
|
221
|
-
<li><xsl:text>
|
222
|
-
</xsl:text>
|
223
|
-
<a href="{summary/url}" class='atopic' id='{@id}' trail='{@trail}'>
|
224
|
-
<xsl:value-of select="summary/title"/></a><xsl:text>
|
225
|
-
</xsl:text>
|
226
|
-
|
227
|
-
<xsl:apply-templates select='records'/>
|
228
|
-
|
229
|
-
<xsl:text>
|
230
|
-
</xsl:text>
|
231
|
-
</li>
|
232
|
-
</ul>
|
233
|
-
</xsl:template>
|
234
|
-
|
235
|
-
|
236
|
-
</xsl:stylesheet>
|
237
|
-
EOF
|
238
|
-
end
|
239
|
-
|
240
228
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: myoutline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -10,27 +10,32 @@ bindir: bin
|
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
13
|
+
MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
|
14
|
+
YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjEwMTA4MTM1NDM1WhcN
|
15
|
+
MjIwMTA4MTM1NDM1WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
|
16
|
+
cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCg/byP
|
17
|
+
AZ1IfLIwdQfw1TvXxSqjjTOz2UELa3OXzT0+Q+i71FCh6+1jaIRY8BZfZ16MbSCr
|
18
|
+
93KtUGnvFbbmhMFWbm7Nbjv/BnnUXRGUZpjDLb90eV0AQmKhBbZ2mdvwF7Z6srSr
|
19
|
+
rnZ7U6o0EHqPCD+N9yD/DxUNhAC+LlFILVVBSXxqdKjOmV9Y1kG8GVvVf91uAe62
|
20
|
+
KuPvsnFR653yrvgKm46zgtmPkHbaCv9lbsjnT5N4EJumFeU2//B3jDn90KrPkbvK
|
21
|
+
+WT165y1iiulLuB2MI9feJvydUmHSmqO1OqFc4/5Ru0WO4nHPunt1EqbUY1XpLsK
|
22
|
+
JjKniI1706CxO9UyliQzbUx5j+IDPL9pldTATEpQKjcNAU0ocF45yo6ToSFSvar3
|
23
|
+
Fsc5JBJtTFdU9Jk64Lx1aO0PNmDKoFXFxk3FxZMfGNtscL4Ea8D8mS7JZRrDWZp2
|
24
|
+
kmkchqxsDxDN5LOQfnnoPNbR0Dxlx7BxfekinuxwB9yMlNQ5OW6xyNep8WkCAwEA
|
25
|
+
AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU46mMtONZ
|
26
|
+
ledzG9BdAwRk7f+anCUwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
|
27
|
+
c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
|
28
|
+
BgkqhkiG9w0BAQsFAAOCAYEAJp3p1feQpxjMF/yXfb0CCcm9C4Yp243TjAf/ABgg
|
29
|
+
ANbrjPCcBmz3RWutZp/vXKaZ6uXmynWEfSYYryxWLux96mW7z/4g96L89xELSC3V
|
30
|
+
jj/o73UCMl2iN47zoe30HyQuVVFiAuiQlJvOkCaDzx+jFehw9SUttOHCEA/Synhs
|
31
|
+
XG+/ClCD0XGZel9roxo2adUZ/Rrhw+UYRHepS4ghRK2JXA523gAJqZZZi9Ou+qhx
|
32
|
+
iBtn22ypXSG+PFnJ+8m+HgRuUQhw3vwBPtSxgdPotAKnxvCmD4jrTGPNR/f0g5ia
|
33
|
+
YXxFLjCYQxtL4W0zCGNAorMl3OejJjxP63JO3jf4CyKPHT9ePYK486zYPbeMGMY6
|
34
|
+
PDihRV0tIV6bPPDEZmUX/a+tpncZR/nCGd8DQMZ4QDxlKnxEWtnq5kEhRi8HLUJD
|
35
|
+
RmpF1GU3b1rykHbNgsw/QI2gfMShVh2f1zceczUFr0SXwGzS0YYRpZoi4qyjgKeb
|
36
|
+
6srwVtKTp+GTywnYzfiE5J4u
|
32
37
|
-----END CERTIFICATE-----
|
33
|
-
date:
|
38
|
+
date: 2021-01-08 00:00:00.000000000 Z
|
34
39
|
dependencies:
|
35
40
|
- !ruby/object:Gem::Dependency
|
36
41
|
name: pxindex
|
@@ -38,20 +43,20 @@ dependencies:
|
|
38
43
|
requirements:
|
39
44
|
- - "~>"
|
40
45
|
- !ruby/object:Gem::Version
|
41
|
-
version: '0.
|
46
|
+
version: '0.2'
|
42
47
|
- - ">="
|
43
48
|
- !ruby/object:Gem::Version
|
44
|
-
version: 0.1
|
49
|
+
version: 0.2.1
|
45
50
|
type: :runtime
|
46
51
|
prerelease: false
|
47
52
|
version_requirements: !ruby/object:Gem::Requirement
|
48
53
|
requirements:
|
49
54
|
- - "~>"
|
50
55
|
- !ruby/object:Gem::Version
|
51
|
-
version: '0.
|
56
|
+
version: '0.2'
|
52
57
|
- - ">="
|
53
58
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.1
|
59
|
+
version: 0.2.1
|
55
60
|
- !ruby/object:Gem::Dependency
|
56
61
|
name: nokogiri
|
57
62
|
requirement: !ruby/object:Gem::Requirement
|
@@ -96,22 +101,22 @@ dependencies:
|
|
96
101
|
name: polyrex-links
|
97
102
|
requirement: !ruby/object:Gem::Requirement
|
98
103
|
requirements:
|
99
|
-
- - "~>"
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version: '0.2'
|
102
104
|
- - ">="
|
103
105
|
- !ruby/object:Gem::Version
|
104
|
-
version: 0.
|
106
|
+
version: 0.3.0
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0.3'
|
105
110
|
type: :runtime
|
106
111
|
prerelease: false
|
107
112
|
version_requirements: !ruby/object:Gem::Requirement
|
108
113
|
requirements:
|
109
|
-
- - "~>"
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: '0.2'
|
112
114
|
- - ">="
|
113
115
|
- !ruby/object:Gem::Version
|
114
|
-
version: 0.
|
116
|
+
version: 0.3.0
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0.3'
|
115
120
|
- !ruby/object:Gem::Dependency
|
116
121
|
name: md_edit
|
117
122
|
requirement: !ruby/object:Gem::Requirement
|
@@ -158,8 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
158
163
|
- !ruby/object:Gem::Version
|
159
164
|
version: '0'
|
160
165
|
requirements: []
|
161
|
-
|
162
|
-
rubygems_version: 2.6.13
|
166
|
+
rubygems_version: 3.0.3
|
163
167
|
signing_key:
|
164
168
|
specification_version: 4
|
165
169
|
summary: Helps build an outline from plain text.
|
metadata.gz.sig
CHANGED
Binary file
|