lineparser 0.1.19 → 0.2.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.
Files changed (6) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/lib/lineparser.rb +266 -262
  5. metadata +31 -27
  6. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 26d86d9aefef101369b87b0c27585a77db31e97c
4
- data.tar.gz: d008c9537387e4c5dd8fa5d98670526fb46bd21d
2
+ SHA256:
3
+ metadata.gz: da9c29d07840e85a7898267fd02c3af3327661472f37422187d3c728bcfc0b47
4
+ data.tar.gz: b018de36af3c41e709236ae27066ce6cabe31f8ce92a719d0d68f810a7fd2704
5
5
  SHA512:
6
- metadata.gz: d89adecd25a597dfcb516f4635919cce3af2458da8f7094ef566ec799ac3b2e6c8bb08807f0456852be45e77d154428c3dde70014c733ce27c1312925bd24bdb
7
- data.tar.gz: 57e5d7d3302d0e7b9150107251a79d04a4fb6df19398d86d6538fd24dce7a871eac7ec6550661d24cc9212f0e90c871a8283f3fe7187ddc23f0aae3367d01dbf
6
+ metadata.gz: 65d5e8b1185f3980b58598a4b32445ca6bb4cafe24ebcc9ba1ba5db65843f1ba8fc336276aa26ccbfa256b40faf7cff98375363dca733de45fe3b703a269326d
7
+ data.tar.gz: 52e55cea8d3cabaec9f333f0c3ead7a47e160de4b97aa2f871d3677655367fa608bad68a332b397887a8325934c96d9ff059f6fefc6db63bdc34b078e8038293
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,270 +1,274 @@
1
- #!/usr/bin/env ruby
2
-
3
- # file: lineparser.rb
4
-
5
- require 'line-tree'
6
-
7
-
8
- class LineParser
9
-
10
- def initialize(patterns=[], lines=nil, ignore_blank_lines: true, debug: true)
11
-
12
- @ibl, @debug = ignore_blank_lines, debug
13
- @h = {
14
-
15
- String: lambda do |s, pattern|
16
-
17
- labels = []
18
-
19
- pattern.gsub!('+',"\\\\+")
20
- r = s.match(/#{pattern.gsub(/:\w+/) {|x| labels << x; '([^\\n]*)'}}/)
21
-
22
- if r then
23
- params = Hash[*labels.zip(r.captures).flatten(1)]
24
- end
25
-
26
- end,
27
-
28
- Regexp: lambda do |s, regex|
29
-
30
- r = s.match(regex)
31
-
32
- if r then
33
- h = {captures: r.captures}
34
- r.names.inject(h) {|rn,x| rn.merge(x.to_sym => r[x])} if r.names
35
- end
36
- end
37
- }
38
-
39
- @patterns = patterns.select {|x| x.first == :all}
40
-
41
- hpatterns = {root: []}.merge patterns.inject({}){|r,x| r.merge(x[2] => x)}
42
-
43
- hpatterns.reverse_each do |k,v|
44
- hpatterns[v.first] << v if hpatterns[v.first]
45
- end
46
-
47
- @tree_patterns = hpatterns[:root].reverse
48
-
49
- parse lines if lines
50
-
51
- end
52
-
53
- def parse(s)
54
-
55
- puts 'inside parse()' if @debug
56
- a = scan @tree_patterns, LineTree.new(s, ignore_blank_lines: @ibl).to_a
57
- @h2 = build_hash a
58
- @a = a
59
-
60
- end
61
-
62
- def to_a
63
- @a
64
- end
65
-
66
- def to_h()
67
- @h2
68
- end
69
-
70
- def to_xml
71
- Rexle.new(xmlize(@a).inject([:root, '', {}]){|r,x| r << x}).xml if @a
72
- end
73
-
74
- private
75
-
76
-
77
- def build_hash(a)
1
+ #!/usr/bin/env ruby
2
+
3
+ # file: lineparser.rb
4
+
5
+ require 'line-tree'
6
+
7
+
8
+ class LineParser
9
+
10
+ def initialize(patterns=[], lines=nil, ignore_blank_lines: true, debug: false)
11
+
12
+ @ibl, @debug = ignore_blank_lines, debug
13
+ @h = {
14
+
15
+ String: lambda do |s, pattern|
16
+
17
+ labels = []
18
+
19
+ pattern.gsub!('+',"\\\\+")
20
+ r = s.match(/#{pattern.gsub(/:\w+/) {|x| labels << x; '([^\\n]*)'}}/)
21
+
22
+ if r then
23
+ params = Hash[*labels.zip(r.captures).flatten(1)]
24
+ end
25
+
26
+ end,
27
+
28
+ Regexp: lambda do |s, regex|
29
+
30
+ r = s.match(regex)
31
+
32
+ if r then
33
+ h = {captures: r.captures}
34
+ r.names.inject(h) {|rn,x| rn.merge(x.to_sym => r[x])} if r.names
35
+ end
36
+ end
37
+ }
38
+
39
+ @patterns = patterns.select {|x| x.first == :all}
40
+
41
+ hpatterns = {root: []}.merge patterns.inject({}){|r,x| r.merge(x[2] => x)}
42
+
43
+ hpatterns.reverse_each do |k,v|
44
+ hpatterns[v.first] << v if hpatterns[v.first]
45
+ end
46
+
47
+ @tree_patterns = hpatterns[:root].reverse
48
+
49
+ parse lines if lines
50
+
51
+ end
52
+
53
+ def parse(s)
54
+
55
+ puts 'inside parse()' if @debug
56
+ a = scan @tree_patterns, LineTree.new(s, ignore_blank_lines: @ibl).to_a
57
+ @h2 = build_hash a
58
+ @a = a
59
+
60
+ end
61
+
62
+ def to_a
63
+ @a
64
+ end
65
+
66
+ def to_h()
67
+ @h2
68
+ end
69
+
70
+ def to_xml
71
+ raw_doc = xmlize(@a).inject([:root, {}, '']){|r,x| r << x}
72
+ puts 'raw_doc: ' + raw_doc.inspect if @debug
73
+ Rexle.new(raw_doc).xml if @a
74
+ end
75
+
76
+ private
77
+
78
+
79
+ def build_hash(a)
78
80
 
79
81
  def filter(h2)
80
-
82
+
81
83
  h = {}
82
- puts 'h2: ' + h2.inspect if @debug
83
-
84
- h2.each do |k, v|
85
-
86
- puts 'v:' + v.inspect if @debug
87
-
88
- a3 = v.flat_map do |row|
89
-
90
- a2 = []
91
-
92
- puts 'row: ' + row.inspect
93
- puts 'row[3]: ' + row[3].inspect
94
-
95
- if row[3] and row[3].any? then
96
-
97
- puts 'row[3][0][1]: ' + row[3][0][1].inspect if @debug
98
-
99
- if row[3][0][1].has_key? :captures then
100
-
101
- a2 = row[3].map {|x| x[2].first }
102
-
84
+ puts 'h2: ' + h2.inspect if @debug
85
+
86
+ h2.each do |k, v|
87
+
88
+ puts 'v:' + v.inspect if @debug
89
+
90
+ a3 = v.flat_map do |row|
91
+
92
+ a2 = []
93
+
94
+ puts 'row: ' + row.inspect
95
+ puts 'row[3]: ' + row[3].inspect
96
+
97
+ if row[3] and row[3].any? then
98
+
99
+ puts 'row[3][0][1]: ' + row[3][0][1].inspect if @debug
100
+
101
+ if row[3][0][1].has_key? :captures and row[3][0][1][:captures].any? then
102
+
103
+ a2 = row[3].map {|x| x[2].first }
104
+
103
105
  else
104
- a2 = filter(row[3].group_by {|x| x.first })
105
- end
106
-
107
- else
108
- a2 = row[1].values.first
109
- end
110
-
111
- key = row[1].values.first
112
- key ||= a2
113
- (key.empty? or key == a2) ? a2 : {key => a2}
114
-
115
- end
116
-
117
- h[k] = a3.length > 1 ? a3 : a3.first
118
-
106
+ a2 = filter(row[3].group_by {|x| x.first })
107
+ end
108
+
109
+ else
110
+ a2 = row[1].values.first
111
+ end
112
+
113
+ key = row[1].values.first
114
+ key ||= a2
115
+ (key.empty? or key == a2) ? a2 : {key => a2}
116
+
117
+ end
118
+
119
+ h[k] = a3.length > 1 ? a3 : a3.first
120
+
119
121
  end
120
-
122
+
121
123
  return h
122
124
  end
123
-
125
+
124
126
  h3 = a.group_by {|x| x.first }
125
-
126
- filter(h3)
127
-
128
- end
129
-
130
- def join(lines, indent='')
131
- lines.map do |x|
132
- indent + (x.is_a?(Array) ? join(x, indent + ' ') : x)
133
- end.join("\n")
134
- end
135
-
136
- def scan(xpatterns, items)
137
-
138
- puts 'inside scan()' if @debug
139
-
140
- records = []
141
-
142
- while items.any? do
143
-
144
- x = items.shift
145
-
146
- params, context = nil, nil
147
-
148
- xpatterns = [xpatterns] unless xpatterns[0].is_a? Array
149
-
150
- found = @patterns.detect do |_, pattern|
151
- params = @h[pattern.class.to_s.to_sym].call x.first, pattern
152
- end
153
-
154
- puts 'found: ' + found.inspect if @debug
155
-
156
- if found then
157
-
158
- children = nil
159
- children = scan(found.last, x[1..-1]) if found.last.is_a? Array
160
- records << [found[2], params, x, children]
161
-
162
- else
163
-
164
- puts 'xpatterns: ' + xpatterns.inspect if @debug
165
-
166
- found = xpatterns.detect do |_, pattern, id|
167
-
168
- puts 'found2: ' + found.inspect if @debug
169
-
170
- if pattern == :root then
171
-
172
- found = @tree_patterns.detect do |_, pattern2, id|
173
- params = @h[pattern2.class.to_s.to_sym].call x.first, pattern2
174
- context = id if params
175
- end
176
-
177
- puts 'found3: ' + found.inspect if @debug
178
-
179
- else
180
-
181
- if @debug then
182
- puts '@h: ' + @h.inspect
183
- puts 'pattern: ' + pattern.inspect
184
- puts 'x.first: ' + x.first.inspect
185
- end
186
-
187
- params = @h[pattern.class.to_s.to_sym].call x.first, pattern
188
- puts 'params: ' + params.inspect if @debug
189
- context = id if params
190
- end
191
- end
192
-
193
- if found then
194
-
195
- children = nil
196
- children = scan(found[3..-1], x[1..-1]) if found.last.is_a? Array
197
- records << [context, params, x, children]
198
- end
199
- end
200
- end
201
-
202
- return records
203
- end
204
-
205
- def xmlize(rows)
206
-
207
- r = rows.map do |row|
208
-
209
- label, h, lines, children = row
210
-
211
- new_h = h.inject({}) do |r,k|
212
-
213
- if k.first == :captures then
214
-
215
- k[-1].map.with_index.to_a.inject({}) do |r2,x|
216
- x[0] ? r.merge!(('captures' + x[-1].to_s).to_sym => x[0]) : r
217
- end
218
- else
219
- r.merge k[0][/\w+/] => k[-1]
220
- end
221
- end
222
-
223
- c = children ? xmlize(children) : []
224
-
225
- [label, join(lines), new_h, *c]
226
- end
227
-
228
- r
229
- end
230
-
231
- end
232
-
233
-
234
- =begin
235
-
236
- Basic example:
237
-
238
- lines =<<LINES
239
- resources: posts
240
- # winning
241
- #
242
- post
243
- model
244
- Post
245
- orange 123
246
- fff
247
- comments
248
- model
249
- Comment
250
- orange 576
251
- ggg
252
- LINES
253
-
254
- patterns = [
255
- [:root, 'resources: :resources', :resources],
256
- [:root, ':resource', :resource],
257
- [:resource, 'model', :model],
258
- [:model, ':class_name', :model_class],
259
- [:model_class, /orange (\w+)/, :model_class_attribute],
260
- [:all, /#/, :comment]
261
- ]
262
-
263
- lp = LineParser.new patterns
264
- r = lp.parse lines
265
- #=>
266
- => [
267
- [:app_path, {":app_path"=>"/tmp"}, ["app_path: /tmp"], nil],
268
- [:app, {":app"=>"blog"}, ["app: blog"], nil],
269
- [:resources, {":resources"=>"posts"}, ["resources: posts"], ...
270
- =end
127
+
128
+ filter(h3)
129
+
130
+ end
131
+
132
+ def join(lines, indent='')
133
+ lines.map do |x|
134
+ indent + (x.is_a?(Array) ? join(x, indent + ' ') : x)
135
+ end.join("\n")
136
+ end
137
+
138
+ def scan(xpatterns, items)
139
+
140
+ puts 'inside scan()' if @debug
141
+
142
+ records = []
143
+
144
+ while items.any? do
145
+
146
+ x = items.shift
147
+
148
+ params, context = nil, nil
149
+
150
+ xpatterns = [xpatterns] unless xpatterns[0].is_a? Array
151
+
152
+ found = @patterns.detect do |_, pattern|
153
+ params = @h[pattern.class.to_s.to_sym].call x.first, pattern
154
+ end
155
+
156
+ puts 'found: ' + found.inspect if @debug
157
+
158
+ if found then
159
+
160
+ children = nil
161
+ children = scan(found.last, x[1..-1]) if found.last.is_a? Array
162
+ records << [found[2], params, x, children]
163
+
164
+ else
165
+
166
+ puts 'xpatterns: ' + xpatterns.inspect if @debug
167
+
168
+ found = xpatterns.detect do |_, pattern, id|
169
+
170
+ puts 'found2: ' + found.inspect if @debug
171
+
172
+ if pattern == :root then
173
+
174
+ found = @tree_patterns.detect do |_, pattern2, id|
175
+ params = @h[pattern2.class.to_s.to_sym].call x.first, pattern2
176
+ context = id if params
177
+ end
178
+
179
+ puts 'found3: ' + found.inspect if @debug
180
+
181
+ else
182
+
183
+ if @debug then
184
+ puts '@h: ' + @h.inspect
185
+ puts 'pattern: ' + pattern.inspect
186
+ puts 'x.first: ' + x.first.inspect
187
+ end
188
+
189
+ params = @h[pattern.class.to_s.to_sym].call x.first, pattern
190
+ puts 'params: ' + params.inspect if @debug
191
+ context = id if params
192
+ end
193
+ end
194
+
195
+ if found then
196
+
197
+ children = nil
198
+ children = scan(found[3..-1], x[1..-1]) if found.last.is_a? Array
199
+ records << [context, params, x, children]
200
+ end
201
+ end
202
+ end
203
+
204
+ return records
205
+ end
206
+
207
+ def xmlize(rows)
208
+
209
+ r = rows.map do |row|
210
+
211
+ label, h, lines, children = row
212
+
213
+ new_h = h.inject({}) do |r,k|
214
+
215
+ if k.first == :captures and k.last.any? then
216
+
217
+ puts 'k: ' + k.inspect if @debug
218
+
219
+ k[-1].map.with_index.to_a.inject({}) do |r2,x|
220
+ x[0] ? r.merge!(('captures' + x[-1].to_s).to_sym => x[0]) : r
221
+ end
222
+ else
223
+ r.merge k[0][/\w+/] => k[-1]
224
+ end
225
+ end
226
+
227
+ c = children ? xmlize(children) : []
228
+
229
+ [label, new_h, join(lines), *c]
230
+ end
231
+
232
+ r
233
+ end
234
+
235
+ end
236
+
237
+
238
+ =begin
239
+
240
+ Basic example:
241
+
242
+ lines =<<LINES
243
+ resources: posts
244
+ # winning
245
+ #
246
+ post
247
+ model
248
+ Post
249
+ orange 123
250
+ fff
251
+ comments
252
+ model
253
+ Comment
254
+ orange 576
255
+ ggg
256
+ LINES
257
+
258
+ patterns = [
259
+ [:root, 'resources: :resources', :resources],
260
+ [:root, ':resource', :resource],
261
+ [:resource, 'model', :model],
262
+ [:model, ':class_name', :model_class],
263
+ [:model_class, /orange (\w+)/, :model_class_attribute],
264
+ [:all, /#/, :comment]
265
+ ]
266
+
267
+ lp = LineParser.new patterns
268
+ r = lp.parse lines
269
+ #=>
270
+ => [
271
+ [:app_path, {":app_path"=>"/tmp"}, ["app_path: /tmp"], nil],
272
+ [:app, {":app"=>"blog"}, ["app: blog"], nil],
273
+ [:resources, {":resources"=>"posts"}, ["resources: posts"], ...
274
+ =end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lineparser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.19
4
+ version: 0.2.0
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
- MIIDXjCCAkagAwIBAgIBATANBgkqhkiG9w0BAQUFADAsMSowKAYDVQQDDCFnZW1t
14
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTgwNjE4MTczMTU4WhcN
15
- MTkwNjE4MTczMTU4WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIMaoy
17
- ZuLSaIQM2GZFTXH+ijBospHvjExbCi0Gap1jAEakSRMXSyS+MZZTc63E0lSxGmLm
18
- qKNocmHQAvff8K6tvKO5Pd7Ph/EWX2+18Icxs+kHvSErDBvJ45Ks05pQ++4tByVN
19
- 43URJS0dFbXFnz/0V7IFnsJ18oGiYUju/jWS7euxet4pbgew9WGQkX/CLNvaun7W
20
- TSbqgXqFRKyfDN0sbfGUKE8okgyEvEkYxaaBhDIB0n8l7aVd4B96R0YlJcY85aCL
21
- cbp8GV2E/NmLV5JErTmVHqqywQE0cMMTQdmeTNT8wSS8eAN987YKbMDgx6SACeYc
22
- vRR+2ItRBmfl7fEvAgMBAAGjgYowgYcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
23
- HQYDVR0OBBYEFBtVTxKjkkaD2AolTTEI29VnoOr4MCYGA1UdEQQfMB2BG2dlbW1h
24
- c3RlckBqYW1lc3JvYmVydHNvbi5ldTAmBgNVHRIEHzAdgRtnZW1tYXN0ZXJAamFt
25
- ZXNyb2JlcnRzb24uZXUwDQYJKoZIhvcNAQEFBQADggEBALWXE5uRjPHi1XeGPmD/
26
- 7aGPjfUxg+hl/zMyVNPWi3ym84j76oynLTM0C7AgDVqXl8H8NPPiawQu8zLc6UWV
27
- PoZn4dtN8TBrOg9JT+P1+WHU4QidJ7PDTK4+HXaHxcEpglXQ/2V2wa+TjSq5cPws
28
- kxxS5qQrFKvqW3SuhXuO1wYC42OiPYu6KDjbq9ZnGEXKHg2+/XzkGJgnANzu58BR
29
- +jtnooTZ6Wn+nPMDihov717g1HIEFpQOyDvLPtnDyaCKkKbHn7FgS7a8wr12OGHj
30
- 7CkP6/pzsGLnyfCNF6rkXny4G0mjMmALczbazUUCil4IJNYfvW28Nlm2cD1N6Y/t
31
- Uck=
13
+ MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjAwOTE3MjIyMDE1WhcN
15
+ MjEwOTE3MjIyMDE1WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCyO1Zb
17
+ GtYa2IPzpSWbV7YEjd5n4hxHqMxEV3NE2oCOaOmmuB9GNMynHG/5mpDFwTQQhYUQ
18
+ y8eGk9EqIM0EM98wi9XWENCm+nrGrcRurPfE+S7GecEgSlGH2sb1cOTcR1ipLPXS
19
+ 3pMtP1+tmuzszo7wQXNXwlcc+qujWqj/qlhyWc/sI63R6h70m4zthjTrO/UDks5h
20
+ EUP+9PuzzkiNocjzSm+7a/jUMhbU1yD656r8BilI3lzJl58HVcVsGGY4Kz86EzJT
21
+ iV97QHqJMDa2qIMydNBwpzfrlXPcceZOX3J4APO0usIeDUySKFVORyKE0sDA7lqZ
22
+ pOjjJ6pP+mVQcJgp6znW5dABx53w5Fb7QyymKiR+91rifYbZwmrqfwsdBt0uhOG8
23
+ IbM9VdH/VfKze5wPj/PPxLOAFfx/B7QhA08Raki+WnkWGvJG04IDZjS9PC0fvJ8j
24
+ rZ/SHA78mi8JjUxyNt+wUUa5S9yrZxydn7uidipIYo/k3rNH38DXvP048w8CAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU5mmMLzbF
26
+ uuSVR6FWBPtCtKEMbEkwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
+ c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
+ BgkqhkiG9w0BAQsFAAOCAYEAjzxAnyL61pJ1mGfTwk3XnG6DwafRLOZJGC0euWD0
29
+ +Gag+w7ciVKEIYreXBBgUTk23vLOS0W9RGkh32kvWz6osfWcMqb5DYrS+eqD7jWr
30
+ ZDAu40WUdftVimgHgbaX8JGkamsCuXGUEcjyuZvqIin1HacYqEX9DgHY7qwG0Z1Y
31
+ uoMT9Mft4RRFO76YtsMbgJbaxlCFcqMzxxG1sYjJ4zMvLIq0d5kAQZpXSLHAV5M4
32
+ nHOJqcbCuhX2Rk9FqFyHu99ap1lq+PMDCmA7QJhtD/MqV8i17GtE9pxGkPx6gMx4
33
+ c5YK/tmNlCZKtr6ASa8OD8Pd/qNtjyLMcKm9v/t6+Iuj7XvqgAGK0f5MBNHGmsWd
34
+ lTFRNeAqjG9zq18/Ex1AllAqc7Js7ZBBoUzO3GwKCaqNLsdRAuuTQmOywy7Ko9Zy
35
+ brbNaPUMXId06a/FvayO9VnovWqX0OameDJkWI43bBsQVBdiqHQ5I2xOm0NB/GaQ
36
+ cy0vi8GiqrPsSc2Y0KQjD/DK
32
37
  -----END CERTIFICATE-----
33
- date: 2018-06-29 00:00:00.000000000 Z
38
+ date: 2020-09-17 00:00:00.000000000 Z
34
39
  dependencies:
35
40
  - !ruby/object:Gem::Dependency
36
41
  name: line-tree
@@ -38,20 +43,20 @@ dependencies:
38
43
  requirements:
39
44
  - - "~>"
40
45
  - !ruby/object:Gem::Version
41
- version: '0.3'
46
+ version: '0.9'
42
47
  - - ">="
43
48
  - !ruby/object:Gem::Version
44
- version: 0.3.17
49
+ version: 0.9.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.3'
56
+ version: '0.9'
52
57
  - - ">="
53
58
  - !ruby/object:Gem::Version
54
- version: 0.3.17
59
+ version: 0.9.1
55
60
  description:
56
61
  email: james@jamesrobertson.eu
57
62
  executables: []
@@ -78,8 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
83
  - !ruby/object:Gem::Version
79
84
  version: '0'
80
85
  requirements: []
81
- rubyforge_project:
82
- rubygems_version: 2.6.13
86
+ rubygems_version: 3.0.3
83
87
  signing_key:
84
88
  specification_version: 4
85
89
  summary: Lineparser is suited to parsing configuration files, however it can parse
metadata.gz.sig CHANGED
Binary file