metaheader 1.3beta3 → 1.3beta4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e4da8975afe832f43e402d8055e6d0b5ffd116b8
4
- data.tar.gz: 8370402e66dd19c47c31959a1104492b38b680b2
3
+ metadata.gz: 1b110cd1fab31d12091a47b6d9b77cdb001b5c14
4
+ data.tar.gz: 483baa10662faaf8ccd83c93a5fae63e9ce83ab7
5
5
  SHA512:
6
- metadata.gz: 61ed6799668cbd4fea43f71cca2318dfb2f8ec1b9d39bcd4fd02762c63c118d9792eadc4e33ca542e4bdcdd85dafda35af69238719a73c702fe188655472f638
7
- data.tar.gz: 77fb389959db93f0aa8ceeba8ca188210e18cca144c5bbf8712dd4067a253a86f14e5728de607a11c54a9af6c8873adeef0b935b80dac1b9c81e0b9b3d16840f
6
+ metadata.gz: a9b0cbfc3b61abd41cc545a0825d56995f5362c701170c6b709911a44d56c4c2205b4e849712207dabb2e9de8f1d5ab4d50592b1982c95a5aa5853c7a54c523b
7
+ data.tar.gz: cc5133876cdeb62d1ebce9808411e7e43883c084bc6645d6ae4836622cf5b875d5243a17fa0009eda156e29970d75e6e80bec899965cd45556820093401211cf
data/lib/metaheader.rb CHANGED
@@ -227,6 +227,7 @@ private
227
227
 
228
228
  @last_tag = Tag.new match[:key].freeze, value
229
229
  @line_breaks = 0
230
+ @block_indent = nil
230
231
 
231
232
  # disable implicit values with the alternate syntax
232
233
  register @last_tag unless match[:alt] && match[:value].nil?
@@ -236,10 +237,12 @@ private
236
237
  end
237
238
 
238
239
  def register(tag)
240
+ return if has? tag
239
241
  key = tag.name.downcase.gsub(/[^\w]/, '_').to_sym
240
242
  @data[key] = tag
241
243
  end
242
244
 
245
+ # handle multiline tags
243
246
  def append(line)
244
247
  prefix = line.rstrip
245
248
  if prefix == @last_prefix.rstrip
@@ -248,9 +251,19 @@ private
248
251
  return true # add the line break later
249
252
  elsif line.start_with? @last_prefix
250
253
  mline = line[@last_prefix.size..-1]
251
- stripped = mline.lstrip
252
- indent_level = mline.index stripped
253
- return if indent_level < 1
254
+
255
+ if @block_indent
256
+ if mline.start_with? @block_indent
257
+ stripped = mline[@block_indent.size..-1]
258
+ else
259
+ return
260
+ end
261
+ else
262
+ stripped = mline.lstrip
263
+ indent_level = mline.index stripped
264
+ return if indent_level < 1
265
+ @block_indent = mline[0, indent_level]
266
+ end
254
267
  else
255
268
  return
256
269
  end
@@ -1,4 +1,4 @@
1
1
  class MetaHeader
2
2
  # MetaHeader's version
3
- VERSION = '1.3beta3'.freeze
3
+ VERSION = '1.3beta4'.freeze
4
4
  end
@@ -0,0 +1,193 @@
1
+ require File.expand_path '../helper', __FILE__
2
+
3
+ class TestMultiline < MiniTest::Test
4
+ def test_multiline
5
+ mh = MetaHeader.new <<-IN
6
+ @test Lorem
7
+ Ipsum
8
+ IN
9
+
10
+ assert_equal "Lorem\nIpsum", mh[:test]
11
+ assert_equal 1, mh.size
12
+ end
13
+
14
+ def test_variant
15
+ mh = MetaHeader.new <<-IN
16
+ @test
17
+ Lorem
18
+ Ipsum
19
+ IN
20
+
21
+ assert_equal "Lorem\nIpsum", mh[:test]
22
+ end
23
+
24
+ def test_trailing_space
25
+ mh = MetaHeader.new <<-IN
26
+ @hello\x20
27
+ test\x20
28
+ @world\x20\x20
29
+ test\x20
30
+ IN
31
+
32
+ assert_equal 'test ', mh[:hello]
33
+ assert_equal 'test ', mh[:world]
34
+ end
35
+
36
+ def test_prefix
37
+ mh = MetaHeader.new <<-IN
38
+ -- @test Lorem
39
+ -- Ipsum
40
+ IN
41
+
42
+ assert_equal "Lorem\nIpsum", mh[:test]
43
+ assert_equal 1, mh.size
44
+ end
45
+
46
+ def test_no_indent
47
+ mh = MetaHeader.new <<-IN
48
+ @test Lorem
49
+ Ipsum
50
+ Test
51
+ IN
52
+
53
+ assert_equal 1, mh.size
54
+ assert_equal "Lorem", mh[:test]
55
+ end
56
+
57
+ def test_lose_indent
58
+ mh = MetaHeader.new <<-IN
59
+ @test
60
+ Hello
61
+
62
+ World
63
+ @chunky bacon
64
+
65
+ @foo
66
+ IN
67
+
68
+ assert_equal "Hello\n\nWorld", mh[:test]
69
+ assert_equal 'bacon', mh[:chunky]
70
+ assert_nil mh[:foo]
71
+ end
72
+
73
+ def test_fewer_indent
74
+ mh = MetaHeader.new <<-IN
75
+ @test Lorem
76
+ Ipsum
77
+ Hello
78
+ World
79
+ IN
80
+
81
+ assert_equal 1, mh.size
82
+ assert_equal "Lorem\nIpsum", mh[:test]
83
+ end
84
+
85
+ def test_extra_indent
86
+ mh = MetaHeader.new <<-IN
87
+ @test Lorem
88
+ Ipsum
89
+ Hello
90
+ World
91
+ IN
92
+
93
+ assert_equal 1, mh.size
94
+ assert_equal "Lorem\nIpsum\n Hello\nWorld", mh[:test]
95
+ end
96
+
97
+ def test_do_not_reuse_indent
98
+ mh = MetaHeader.new <<-IN
99
+ @a
100
+ Lorem
101
+ Ipsum
102
+ @b
103
+ \tHello
104
+ \tWorld
105
+ IN
106
+
107
+ assert_equal 2, mh.size
108
+ assert_equal "Lorem\nIpsum", mh[:a]
109
+ assert_equal "Hello\nWorld", mh[:b]
110
+ end
111
+
112
+ def test_sub_alternate_syntax
113
+ mh = MetaHeader.new <<-IN
114
+ @test Lorem
115
+ Ipsum:
116
+ Dolor: sit amet
117
+ IN
118
+
119
+ assert_equal "Lorem\nIpsum:\nDolor: sit amet", mh[:test]
120
+ assert_equal 1, mh.size
121
+ end
122
+
123
+ def test_explicit_boolean
124
+ mh = MetaHeader.new <<-IN
125
+ @test true
126
+ test
127
+ IN
128
+
129
+ assert_equal "true\ntest", mh[:test]
130
+ end
131
+
132
+ def test_empty_line_prefix
133
+ mh = MetaHeader.new <<-IN
134
+ --@test
135
+ -- Hello
136
+ --
137
+ -- World
138
+ --
139
+ --@chunky
140
+ -- bacon
141
+ IN
142
+
143
+ assert_equal "Hello\n\nWorld", mh[:test]
144
+ assert_equal 'bacon', mh[:chunky]
145
+ end
146
+
147
+ def test_empty_line_prefix_with_space
148
+ mh = MetaHeader.new <<-IN
149
+ -- @test
150
+ -- Hello
151
+ --
152
+ -- World
153
+ IN
154
+
155
+ assert_equal "Hello\n\nWorld", mh[:test]
156
+ end
157
+
158
+ def test_empty_line
159
+ mh = MetaHeader.new <<-IN
160
+ @test
161
+ Hello
162
+
163
+ World
164
+ @chunky bacon
165
+
166
+ @foo
167
+ IN
168
+
169
+ assert_equal "Hello\n\nWorld", mh[:test]
170
+ assert_equal 'bacon', mh[:chunky]
171
+ assert_nil mh[:foo]
172
+ end
173
+
174
+ def test_break_at_empty_line
175
+ mh = MetaHeader.new <<-IN
176
+ -- @hello world
177
+
178
+ @chunky bacon
179
+ IN
180
+
181
+ assert_equal 'world', mh[:hello]
182
+ assert_nil mh[:chunky]
183
+ end
184
+
185
+ def test_alternate_syntax
186
+ mh = MetaHeader.new <<-IN
187
+ -- Hello:
188
+ -- World
189
+ IN
190
+
191
+ assert_equal 'World', mh[:hello]
192
+ end
193
+ end
data/test/test_parser.rb CHANGED
@@ -124,141 +124,6 @@ class TestParser < MiniTest::Test
124
124
  refute_nil mh[:second]
125
125
  end
126
126
 
127
- def test_multiline
128
- mh = MetaHeader.new <<-IN
129
- @test Lorem
130
- Ipsum
131
- IN
132
-
133
- assert_equal "Lorem\nIpsum", mh[:test]
134
- assert_equal 1, mh.size
135
- end
136
-
137
- def test_multiline_variant
138
- mh = MetaHeader.new <<-IN
139
- @test
140
- Lorem
141
- Ipsum
142
- IN
143
-
144
- assert_equal "Lorem\nIpsum", mh[:test]
145
- end
146
-
147
- def test_multiline_trailing_space
148
- mh = MetaHeader.new <<-IN
149
- @hello\x20
150
- test\x20
151
- @world\x20\x20
152
- test\x20
153
- IN
154
-
155
- assert_equal 'test ', mh[:hello]
156
- assert_equal 'test ', mh[:world]
157
- end
158
-
159
- def test_multiline_prefix
160
- mh = MetaHeader.new <<-IN
161
- -- @test Lorem
162
- -- Ipsum
163
- IN
164
-
165
- assert_equal "Lorem\nIpsum", mh[:test]
166
- assert_equal 1, mh.size
167
- end
168
-
169
- def test_multiline_wrong_indent
170
- mh = MetaHeader.new <<-IN
171
- @test Lorem
172
- Ipsum
173
- Test
174
- IN
175
-
176
- assert_equal 1, mh.size
177
- assert_equal "Lorem", mh[:test]
178
- end
179
-
180
- def test_multiline_sub_alternate_syntax
181
- mh = MetaHeader.new <<-IN
182
- @test Lorem
183
- Ipsum:
184
- Dolor: sit amet
185
- IN
186
-
187
- assert_equal "Lorem\nIpsum:\nDolor: sit amet", mh[:test]
188
- assert_equal 1, mh.size
189
- end
190
-
191
- def test_multiline_explicit_boolean
192
- mh = MetaHeader.new <<-IN
193
- @test true
194
- test
195
- IN
196
-
197
- assert_equal "true\ntest", mh[:test]
198
- end
199
-
200
- def test_multiline_empty_line_prefix
201
- mh = MetaHeader.new <<-IN
202
- --@test
203
- -- Hello
204
- --
205
- -- World
206
- --
207
- --@chunky
208
- -- bacon
209
- IN
210
-
211
- assert_equal "Hello\n\nWorld", mh[:test]
212
- assert_equal 'bacon', mh[:chunky]
213
- end
214
-
215
- def test_multiline_empty_line_space_prefix
216
- mh = MetaHeader.new <<-IN
217
- -- @test
218
- -- Hello
219
- --
220
- -- World
221
- IN
222
-
223
- assert_equal "Hello\n\nWorld", mh[:test]
224
- end
225
-
226
- def test_multiline_empty_line
227
- mh = MetaHeader.new <<-IN
228
- @test
229
- Hello
230
-
231
- World
232
- @chunky bacon
233
-
234
- @foo
235
- IN
236
-
237
- assert_equal "Hello\n\nWorld", mh[:test]
238
- assert_equal 'bacon', mh[:chunky]
239
- assert_nil mh[:foo]
240
- end
241
-
242
- def test_multiline_break_at_empty_line
243
- mh = MetaHeader.new <<-IN
244
- -- @hello world
245
-
246
- @chunky bacon
247
- IN
248
-
249
- assert_equal 'world', mh[:hello]
250
- assert_nil mh[:chunky]
251
- end
252
-
253
- def test_multiline_alternate_syntax
254
- mh = MetaHeader.new <<-IN
255
- -- Hello:
256
- -- World
257
- IN
258
-
259
- assert_equal 'World', mh[:hello]
260
- end
261
-
262
127
  def test_read_file
263
128
  path = File.expand_path '../input/basic_tag', __FILE__
264
129
  mh = MetaHeader.from_file path
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metaheader
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3beta3
4
+ version: 1.3beta4
5
5
  platform: ruby
6
6
  authors:
7
7
  - cfillion
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-28 00:00:00.000000000 Z
11
+ date: 2016-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -101,6 +101,7 @@ files:
101
101
  - test/helper.rb
102
102
  - test/input/basic_tag
103
103
  - test/input/custom_parser
104
+ - test/test_multiline.rb
104
105
  - test/test_parser.rb
105
106
  - test/test_validator.rb
106
107
  homepage: https://github.com/cfillion/metaheader
@@ -131,5 +132,6 @@ test_files:
131
132
  - test/helper.rb
132
133
  - test/input/basic_tag
133
134
  - test/input/custom_parser
135
+ - test/test_multiline.rb
134
136
  - test/test_parser.rb
135
137
  - test/test_validator.rb