ad_hoc_template 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/Gemfile +1 -1
- data/README.md +1 -2
- data/ad_hoc_template.gemspec +1 -1
- data/lib/ad_hoc_template/command_line_interface.rb +94 -7
- data/lib/ad_hoc_template/parser.rb +160 -0
- data/lib/ad_hoc_template/record_reader.rb +281 -0
- data/lib/ad_hoc_template/version.rb +1 -1
- data/lib/ad_hoc_template.rb +29 -176
- data/spec/ad_hoc_template_spec.rb +308 -141
- data/spec/command_line_interface_spec.rb +393 -34
- data/spec/parser_spec.rb +399 -0
- data/spec/record_reader_spec.rb +377 -0
- metadata +11 -6
@@ -0,0 +1,377 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'ad_hoc_template'
|
5
|
+
|
6
|
+
describe AdHocTemplate do
|
7
|
+
describe AdHocTemplate::RecordReader do
|
8
|
+
it "can read key-value pairs and empty lines at the head should be ignored" do
|
9
|
+
data = <<CONFIG
|
10
|
+
|
11
|
+
key1: value1
|
12
|
+
key2: value2
|
13
|
+
key3: value3
|
14
|
+
|
15
|
+
|
16
|
+
CONFIG
|
17
|
+
|
18
|
+
expect(AdHocTemplate::RecordReader.read_record(data)).to eq({ "key1" => "value1", "key2" => "value2", "key3" => "value3", })
|
19
|
+
end
|
20
|
+
|
21
|
+
it "can accept an empty string as its input" do
|
22
|
+
expect(AdHocTemplate::RecordReader.read_record('')).to eq({})
|
23
|
+
end
|
24
|
+
|
25
|
+
it "can read several header type configurations at once." do
|
26
|
+
data = <<CONFIGS
|
27
|
+
//@#configs
|
28
|
+
|
29
|
+
key1-1: value1-1
|
30
|
+
key1-2: value1-2
|
31
|
+
|
32
|
+
key2-1: value2-1
|
33
|
+
key2-2: value2-2
|
34
|
+
|
35
|
+
key3-1: value3-1
|
36
|
+
key3-2: value3-2
|
37
|
+
|
38
|
+
CONFIGS
|
39
|
+
|
40
|
+
expected_config = {
|
41
|
+
"#configs" => [
|
42
|
+
{"key1-1" => "value1-1", "key1-2" => "value1-2"},
|
43
|
+
{"key2-1" => "value2-1", "key2-2" => "value2-2"},
|
44
|
+
{"key3-1" => "value3-1", "key3-2" => "value3-2"}
|
45
|
+
]}
|
46
|
+
expect(AdHocTemplate::RecordReader.read_record(data)).to eq(expected_config)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "can read sets of several header type configurations at once." do
|
50
|
+
data = <<CONFIGS
|
51
|
+
//@#configs
|
52
|
+
|
53
|
+
key1-1: value1-1
|
54
|
+
key1-2: value1-2
|
55
|
+
|
56
|
+
key2-1: value2-1
|
57
|
+
key2-2: value2-2
|
58
|
+
|
59
|
+
key3-1: value3-1
|
60
|
+
key3-2: value3-2
|
61
|
+
|
62
|
+
//@#configs2
|
63
|
+
|
64
|
+
key1-1: value1-1
|
65
|
+
key1-2: value1-2
|
66
|
+
|
67
|
+
key2-1: value2-1
|
68
|
+
key2-2: value2-2
|
69
|
+
|
70
|
+
key3-1: value3-1
|
71
|
+
key3-2: value3-2
|
72
|
+
|
73
|
+
CONFIGS
|
74
|
+
|
75
|
+
expected_config = {
|
76
|
+
"#configs" => [
|
77
|
+
{"key1-1" => "value1-1", "key1-2" => "value1-2"},
|
78
|
+
{"key2-1" => "value2-1", "key2-2" => "value2-2"},
|
79
|
+
{"key3-1" => "value3-1", "key3-2" => "value3-2"}
|
80
|
+
],
|
81
|
+
"#configs2" => [
|
82
|
+
{"key1-1" => "value1-1", "key1-2" => "value1-2"},
|
83
|
+
{"key2-1" => "value2-1", "key2-2" => "value2-2"},
|
84
|
+
{"key3-1" => "value3-1", "key3-2" => "value3-2"}
|
85
|
+
]
|
86
|
+
}
|
87
|
+
expect(AdHocTemplate::RecordReader.read_record(data)).to eq(expected_config)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "reads configuration data and turns them into a hash object" do
|
91
|
+
data = <<CONFIG
|
92
|
+
key1: value1
|
93
|
+
key2: value2
|
94
|
+
key3: value3
|
95
|
+
|
96
|
+
//@block1
|
97
|
+
|
98
|
+
the first line of block1
|
99
|
+
the second line of block1
|
100
|
+
|
101
|
+
the second paragraph in block1
|
102
|
+
|
103
|
+
//@block2
|
104
|
+
the first line of block2
|
105
|
+
the second line of block2
|
106
|
+
|
107
|
+
the second paragraph of block2
|
108
|
+
CONFIG
|
109
|
+
|
110
|
+
expected_config = {
|
111
|
+
"key1" => "value1",
|
112
|
+
"key2" => "value2",
|
113
|
+
"key3" => "value3",
|
114
|
+
"block1" => "the first line of block1\nthe second line of block1\n\nthe second paragraph in block1\n",
|
115
|
+
"block2" => "the first line of block2\nthe second line of block2\n\nthe second paragraph of block2\n"
|
116
|
+
}
|
117
|
+
expect(AdHocTemplate::RecordReader.read_record(data)).to eq(expected_config)
|
118
|
+
end
|
119
|
+
|
120
|
+
it "can read configuration data with 3 different kind of sections" do
|
121
|
+
data = <<CONFIG
|
122
|
+
key1: value1
|
123
|
+
key2: value2
|
124
|
+
key3: value3
|
125
|
+
|
126
|
+
//@#subconfigs
|
127
|
+
|
128
|
+
key1-1: value1-1
|
129
|
+
key1-2: value1-2
|
130
|
+
|
131
|
+
key2-1: value2-1
|
132
|
+
key2-2: value2-2
|
133
|
+
|
134
|
+
//@block
|
135
|
+
|
136
|
+
the first line of block
|
137
|
+
the second line of block
|
138
|
+
|
139
|
+
the second paragraph in block
|
140
|
+
|
141
|
+
CONFIG
|
142
|
+
|
143
|
+
expected_config = {
|
144
|
+
"key1" => "value1",
|
145
|
+
"key2" => "value2",
|
146
|
+
"key3" => "value3",
|
147
|
+
"#subconfigs" => [{"key1-1"=>"value1-1", "key1-2"=>"value1-2"}, {"key2-1"=>"value2-1", "key2-2"=>"value2-2"}],
|
148
|
+
"block" => "the first line of block\nthe second line of block\n\nthe second paragraph in block\n"
|
149
|
+
}
|
150
|
+
expect(AdHocTemplate::RecordReader.read_record(data)).to eq(expected_config)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
describe AdHocTemplate::RecordReader::YAMLReader do
|
155
|
+
before do
|
156
|
+
@config_source = <<CONFIG
|
157
|
+
key1: value1
|
158
|
+
key2: value2
|
159
|
+
key3: value3
|
160
|
+
|
161
|
+
//@#subconfigs
|
162
|
+
|
163
|
+
key1-1: value1-1
|
164
|
+
key1-2: value1-2
|
165
|
+
|
166
|
+
key2-1: value2-1
|
167
|
+
key2-2: value2-2
|
168
|
+
|
169
|
+
//@block
|
170
|
+
|
171
|
+
the first line of block
|
172
|
+
the second line of block
|
173
|
+
|
174
|
+
the second paragraph in block
|
175
|
+
|
176
|
+
CONFIG
|
177
|
+
|
178
|
+
@yaml_source = <<YAML
|
179
|
+
key1: value1
|
180
|
+
key2: value2
|
181
|
+
key3: value3
|
182
|
+
'#subconfigs':
|
183
|
+
- key1-1: value1-1
|
184
|
+
key1-2: value1-2
|
185
|
+
- key2-1: value2-1
|
186
|
+
key2-2: value2-2
|
187
|
+
block: |
|
188
|
+
the first line of block
|
189
|
+
the second line of block
|
190
|
+
|
191
|
+
the second paragraph in block
|
192
|
+
YAML
|
193
|
+
|
194
|
+
@yaml_dump = <<YAML
|
195
|
+
---
|
196
|
+
key1: value1
|
197
|
+
key2: value2
|
198
|
+
key3: value3
|
199
|
+
"#subconfigs":
|
200
|
+
- key1-1: value1-1
|
201
|
+
key1-2: value1-2
|
202
|
+
- key2-1: value2-1
|
203
|
+
key2-2: value2-2
|
204
|
+
block: |
|
205
|
+
the first line of block
|
206
|
+
the second line of block
|
207
|
+
|
208
|
+
the second paragraph in block
|
209
|
+
YAML
|
210
|
+
end
|
211
|
+
|
212
|
+
it 'reads yaml data and turns it into a Ruby object' do
|
213
|
+
config = AdHocTemplate::RecordReader.read_record(@config_source)
|
214
|
+
yaml = AdHocTemplate::RecordReader::YAMLReader.read_record(@yaml_source)
|
215
|
+
|
216
|
+
expect(yaml).to eq(config)
|
217
|
+
end
|
218
|
+
|
219
|
+
it '.read_record is called from RecordReader.read_record if the format of source data is specified' do
|
220
|
+
yaml_reader = AdHocTemplate::RecordReader::YAMLReader.read_record(@yaml_source)
|
221
|
+
record_reader = AdHocTemplate::RecordReader.read_record(@yaml_source, :yaml)
|
222
|
+
|
223
|
+
expect(yaml_reader).to eq(record_reader)
|
224
|
+
end
|
225
|
+
|
226
|
+
it '.to_yaml converts the format of data from default to yaml' do
|
227
|
+
yaml = AdHocTemplate::RecordReader::YAMLReader.to_yaml(@config_source)
|
228
|
+
|
229
|
+
expect(yaml).to eq(@yaml_dump)
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
describe AdHocTemplate::RecordReader::JSONReader do
|
234
|
+
before do
|
235
|
+
@config_source = <<CONFIG
|
236
|
+
key1: value1
|
237
|
+
key2: value2
|
238
|
+
key3: value3
|
239
|
+
|
240
|
+
//@#subconfigs
|
241
|
+
|
242
|
+
key1-1: value1-1
|
243
|
+
key1-2: value1-2
|
244
|
+
|
245
|
+
key2-1: value2-1
|
246
|
+
key2-2: value2-2
|
247
|
+
|
248
|
+
//@block
|
249
|
+
|
250
|
+
the first line of block
|
251
|
+
the second line of block
|
252
|
+
|
253
|
+
the second paragraph in block
|
254
|
+
|
255
|
+
CONFIG
|
256
|
+
|
257
|
+
@json_source = <<JSON
|
258
|
+
{
|
259
|
+
"key1":"value1",
|
260
|
+
"key2":"value2",
|
261
|
+
"key3":"value3",
|
262
|
+
"#subconfigs":
|
263
|
+
[
|
264
|
+
{
|
265
|
+
"key1-1":"value1-1",
|
266
|
+
"key1-2":"value1-2"
|
267
|
+
},
|
268
|
+
{
|
269
|
+
"key2-1":"value2-1",
|
270
|
+
"key2-2":"value2-2"
|
271
|
+
}
|
272
|
+
],
|
273
|
+
"block":"the first line of block\\nthe second line of block\\n\\nthe second paragraph in block\\n"
|
274
|
+
}
|
275
|
+
JSON
|
276
|
+
|
277
|
+
@json_dump = <<JSON
|
278
|
+
{"key1":"value1","key2":"value2","key3":"value3","#subconfigs":[{"key1-1":"value1-1","key1-2":"value1-2"},{"key2-1":"value2-1","key2-2":"value2-2"}],"block":"the first line of block\\nthe second line of block\\n\\nthe second paragraph in block\\n"}
|
279
|
+
JSON
|
280
|
+
end
|
281
|
+
|
282
|
+
it 'reads JSON data and turns it into a Ruby object' do
|
283
|
+
config = AdHocTemplate::RecordReader.read_record(@config_source)
|
284
|
+
json = AdHocTemplate::RecordReader::JSONReader.read_record(@json_source)
|
285
|
+
|
286
|
+
expect(json).to eq(config)
|
287
|
+
end
|
288
|
+
|
289
|
+
it '.read_record is called from RecordReader.read_record if the format of source data is specified' do
|
290
|
+
json_reader = AdHocTemplate::RecordReader::JSONReader.read_record(@json_source)
|
291
|
+
record_reader = AdHocTemplate::RecordReader.read_record(@json_source, :json)
|
292
|
+
|
293
|
+
expect(json_reader).to eq(record_reader)
|
294
|
+
end
|
295
|
+
|
296
|
+
it '.to_yaml converts the format of data from default to yaml' do
|
297
|
+
json = AdHocTemplate::RecordReader::JSONReader.to_json(@config_source)
|
298
|
+
|
299
|
+
expect(json).to eq(@json_dump.chomp)
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
describe AdHocTemplate::RecordReader::CSVReader do
|
304
|
+
before do
|
305
|
+
@config_source = <<CONFIG
|
306
|
+
//@#subconfigs
|
307
|
+
|
308
|
+
key1: value1-1
|
309
|
+
key2: value1-2
|
310
|
+
key3: value1-3
|
311
|
+
|
312
|
+
key1: value2-1
|
313
|
+
key2: value2-2
|
314
|
+
key3: value2-3
|
315
|
+
|
316
|
+
key1: value3-1
|
317
|
+
key2: value3-2
|
318
|
+
key3: value3-3
|
319
|
+
|
320
|
+
CONFIG
|
321
|
+
|
322
|
+
@csv_source = <<CSV
|
323
|
+
key1,key2,key3
|
324
|
+
value1-1,value1-2,value1-3
|
325
|
+
value2-1,value2-2,value2-3
|
326
|
+
value3-1,value3-2,value3-3
|
327
|
+
CSV
|
328
|
+
|
329
|
+
@tsv_source =<<TSV
|
330
|
+
key1 key2 key3
|
331
|
+
value1-1 value1-2 value1-3
|
332
|
+
value2-1 value2-2 value2-3
|
333
|
+
value3-1 value3-2 value3-3
|
334
|
+
TSV
|
335
|
+
end
|
336
|
+
|
337
|
+
it 'reads CSV data and turns it into a Ruby object' do
|
338
|
+
config = AdHocTemplate::RecordReader.read_record(@config_source)
|
339
|
+
csv = AdHocTemplate::RecordReader::CSVReader.read_record(@csv_source, "subconfigs")
|
340
|
+
|
341
|
+
expect(csv).to eq(config)
|
342
|
+
end
|
343
|
+
|
344
|
+
it '.read_record is called from RecordReader.read_record if the format of source data is specified' do
|
345
|
+
csv_reader = AdHocTemplate::RecordReader::CSVReader.read_record(@csv_source, "subconfigs")
|
346
|
+
record_reader = AdHocTemplate::RecordReader.read_record(@csv_source, csv: "subconfigs")
|
347
|
+
|
348
|
+
csv_reader_without_label = AdHocTemplate::RecordReader::CSVReader.read_record(@csv_source)
|
349
|
+
record_reader_without_label = AdHocTemplate::RecordReader.read_record(@csv_source, :csv)
|
350
|
+
|
351
|
+
|
352
|
+
expect(csv_reader).to eq(record_reader)
|
353
|
+
expect(csv_reader_without_label).to eq(record_reader_without_label)
|
354
|
+
end
|
355
|
+
|
356
|
+
describe "TSV" do
|
357
|
+
it 'reads TSV data and turns it into a Ruby object' do
|
358
|
+
config = AdHocTemplate::RecordReader.read_record(@config_source)
|
359
|
+
tsv = AdHocTemplate::RecordReader::CSVReader.read_record(@tsv_source, tsv: "subconfigs")
|
360
|
+
|
361
|
+
expect(tsv).to eq(config)
|
362
|
+
end
|
363
|
+
|
364
|
+
it '.read_record is called from RecordReader.read_record if the format of source data is specified' do
|
365
|
+
csv_reader = AdHocTemplate::RecordReader::CSVReader.read_record(@csv_source, tsv: "subconfigs")
|
366
|
+
record_reader = AdHocTemplate::RecordReader.read_record(@csv_source, tsv: "subconfigs")
|
367
|
+
|
368
|
+
csv_reader_without_label = AdHocTemplate::RecordReader::CSVReader.read_record(@csv_source, :tsv)
|
369
|
+
record_reader_without_label = AdHocTemplate::RecordReader.read_record(@csv_source, :tsv)
|
370
|
+
|
371
|
+
|
372
|
+
expect(csv_reader).to eq(record_reader)
|
373
|
+
expect(csv_reader_without_label).to eq(record_reader_without_label)
|
374
|
+
end
|
375
|
+
end
|
376
|
+
end
|
377
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ad_hoc_template
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- HASHIMOTO, Naoki
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-09-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pseudohikiparser
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.0.
|
19
|
+
version: 0.0.5.develop
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.0.
|
26
|
+
version: 0.0.5.develop
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,9 +86,13 @@ files:
|
|
86
86
|
- bin/ad_hoc_template
|
87
87
|
- lib/ad_hoc_template.rb
|
88
88
|
- lib/ad_hoc_template/command_line_interface.rb
|
89
|
+
- lib/ad_hoc_template/parser.rb
|
90
|
+
- lib/ad_hoc_template/record_reader.rb
|
89
91
|
- lib/ad_hoc_template/version.rb
|
90
92
|
- spec/ad_hoc_template_spec.rb
|
91
93
|
- spec/command_line_interface_spec.rb
|
94
|
+
- spec/parser_spec.rb
|
95
|
+
- spec/record_reader_spec.rb
|
92
96
|
- spec/spec_helper.rb
|
93
97
|
homepage: https://github.com/nico-hn/AdHocTemplate
|
94
98
|
licenses:
|
@@ -110,12 +114,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
110
114
|
version: '0'
|
111
115
|
requirements: []
|
112
116
|
rubyforge_project:
|
113
|
-
rubygems_version: 2.2.
|
117
|
+
rubygems_version: 2.2.0
|
114
118
|
signing_key:
|
115
119
|
specification_version: 4
|
116
120
|
summary: A tiny template processor
|
117
121
|
test_files:
|
118
122
|
- spec/ad_hoc_template_spec.rb
|
119
123
|
- spec/command_line_interface_spec.rb
|
124
|
+
- spec/parser_spec.rb
|
125
|
+
- spec/record_reader_spec.rb
|
120
126
|
- spec/spec_helper.rb
|
121
|
-
has_rdoc:
|