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.
@@ -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.1
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: 2015-03-15 00:00:00.000000000 Z
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.2
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.2
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.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: