ad_hoc_template 0.0.1 → 0.1.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.
- 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:
|