ad_hoc_template 0.3.0 → 0.4.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/ad_hoc_template.gemspec +1 -1
- data/lib/ad_hoc_template/command_line_interface.rb +53 -26
- data/lib/ad_hoc_template/config_manager.rb +129 -0
- data/lib/ad_hoc_template/default_tag_formatter.rb +6 -1
- data/lib/ad_hoc_template/entry_format_generator.rb +83 -12
- data/lib/ad_hoc_template/parser.rb +64 -59
- data/lib/ad_hoc_template/recipe_manager.rb +168 -0
- data/lib/ad_hoc_template/record_reader.rb +73 -16
- data/lib/ad_hoc_template/utils.rb +29 -0
- data/lib/ad_hoc_template/version.rb +1 -1
- data/lib/ad_hoc_template.rb +77 -25
- data/samples/en/inner_iteration/data.aht +21 -0
- data/samples/en/inner_iteration/data.csv +5 -0
- data/samples/en/inner_iteration/data.yaml +14 -0
- data/samples/en/inner_iteration/data2.yaml +14 -0
- data/samples/en/inner_iteration/for_csv.sh +3 -0
- data/samples/en/inner_iteration/template.html +18 -0
- data/samples/en/recipe/main.aht +9 -0
- data/samples/en/recipe/template.html +20 -0
- data/samples/for_recipe.sh +3 -0
- data/samples/ja/inner_iteration/data.aht +21 -0
- data/samples/ja/inner_iteration/data.csv +5 -0
- data/samples/ja/inner_iteration/data.yaml +14 -0
- data/samples/ja/inner_iteration/data2.yaml +14 -0
- data/samples/ja/inner_iteration/for_csv.sh +3 -0
- data/samples/ja/inner_iteration/template.html +18 -0
- data/samples/ja/recipe/main.aht +9 -0
- data/samples/ja/recipe/template.html +20 -0
- data/samples/recipe.yaml +34 -0
- data/spec/ad_hoc_template_spec.rb +71 -1
- data/spec/command_line_interface_spec.rb +105 -11
- data/spec/config_manager_spec.rb +142 -0
- data/spec/default_tag_formatter_spec.rb +13 -0
- data/spec/entry_format_generator_spec.rb +160 -17
- data/spec/parser_spec.rb +64 -20
- data/spec/recipe_manager_spec.rb +419 -0
- data/spec/record_reader_spec.rb +122 -1
- data/spec/test_data/en/inner_iteration/data.csv +5 -0
- data/spec/test_data/en/recipe/expected_result.html +32 -0
- data/spec/test_data/en/recipe/main.aht +9 -0
- data/spec/test_data/en/recipe/template.html +20 -0
- data/spec/test_data/ja/inner_iteration/data.csv +5 -0
- data/spec/test_data/ja/recipe/expected_result.html +32 -0
- data/spec/test_data/ja/recipe/main.aht +9 -0
- data/spec/test_data/ja/recipe/template.html +20 -0
- data/spec/test_data/recipe.yaml +34 -0
- metadata +47 -4
@@ -0,0 +1,18 @@
|
|
1
|
+
<h1>作家</h1>
|
2
|
+
|
3
|
+
<!--%iterate%-->authors:
|
4
|
+
<h2><!--%h name %--></h2>
|
5
|
+
|
6
|
+
<table summary="<!--%h name %-->の著名な作品とその出版年のリスト">
|
7
|
+
<caption>著名な作品</caption>
|
8
|
+
<thead>
|
9
|
+
<tr><th scope="col">作品名</th><th scope="col">出版年</th></tr>
|
10
|
+
</thead>
|
11
|
+
<tbody>
|
12
|
+
<!--%iterate%-->works|name:
|
13
|
+
<tr><td><!--%h title %--></td><td><!--%h year %--></td></tr>
|
14
|
+
<!--%/iterate%-->
|
15
|
+
</tbody>
|
16
|
+
</table>
|
17
|
+
|
18
|
+
<!--%/iterate%-->
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<h1><!--%h country %-->文学の著名な作家</h1>
|
2
|
+
|
3
|
+
<!--%iterate%-->authors:
|
4
|
+
<h2><!--%h name %--></h2>
|
5
|
+
|
6
|
+
<p>生年: <!--%h birth_year %--></p>
|
7
|
+
|
8
|
+
<table summary="<!--%h name %-->の著名な作品とその出版年のリスト">
|
9
|
+
<caption>著名な作品</caption>
|
10
|
+
<thead>
|
11
|
+
<tr><th scope="col">作品名</th><th scope="col">出版年</th></tr>
|
12
|
+
</thead>
|
13
|
+
<tbody>
|
14
|
+
<!--%iterate%-->works|name:
|
15
|
+
<tr><td><!--%h title %--></td><td><!--%h year %--></td></tr>
|
16
|
+
<!--%/iterate%-->
|
17
|
+
</tbody>
|
18
|
+
</table>
|
19
|
+
|
20
|
+
<!--%/iterate%-->
|
data/samples/recipe.yaml
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
---
|
2
|
+
template: en/recipe/template.html
|
3
|
+
tag_type: :xml_comment_like
|
4
|
+
template_encoding: UTF-8
|
5
|
+
data: en/recipe/main.aht
|
6
|
+
data_format:
|
7
|
+
data_encoding: UTF-8
|
8
|
+
output_file:
|
9
|
+
blocks:
|
10
|
+
- label: "#authors"
|
11
|
+
data:
|
12
|
+
data_format:
|
13
|
+
data_encoding:
|
14
|
+
- label: "#authors|works|name"
|
15
|
+
data: en/inner_iteration/data.csv
|
16
|
+
data_format:
|
17
|
+
data_encoding:
|
18
|
+
---
|
19
|
+
template: ja/recipe/template.html
|
20
|
+
tag_type: :xml_comment_like
|
21
|
+
template_encoding: UTF-8
|
22
|
+
data: ja/recipe/main.aht
|
23
|
+
data_format:
|
24
|
+
data_encoding:
|
25
|
+
output_file:
|
26
|
+
blocks:
|
27
|
+
- label: "#authors"
|
28
|
+
data:
|
29
|
+
data_format:
|
30
|
+
data_encoding:
|
31
|
+
- label: "#authors|works|name"
|
32
|
+
data: ja/inner_iteration/data.csv
|
33
|
+
data_format:
|
34
|
+
data_encoding:
|
@@ -142,7 +142,7 @@ RESULT
|
|
142
142
|
expect(AdHocTemplate::DataLoader.format(tree, config, tag_formatter)).to eq(expected_result)
|
143
143
|
end
|
144
144
|
|
145
|
-
it("should not add a newline at the head of
|
145
|
+
it("should not add a newline at the head of IterationNode when the type of the node is not specified") do
|
146
146
|
template = <<TEMPLATE
|
147
147
|
a test string with tags
|
148
148
|
<%#iteration_block:
|
@@ -244,6 +244,66 @@ The value of optional key2 is value2
|
|
244
244
|
RESULT
|
245
245
|
end
|
246
246
|
|
247
|
+
describe "nested iteration block" do
|
248
|
+
it "may contain inner iteration blocks" do
|
249
|
+
template =<<TEMPLATE
|
250
|
+
<%#authors:
|
251
|
+
Name: <%= name %>
|
252
|
+
Birthplace: <%= birthplace %>
|
253
|
+
Works:
|
254
|
+
<%#works|name:
|
255
|
+
* <%= title %>
|
256
|
+
#%>
|
257
|
+
|
258
|
+
#%>
|
259
|
+
TEMPLATE
|
260
|
+
data =<<DATA
|
261
|
+
///@#authors
|
262
|
+
|
263
|
+
name: Albert Camus
|
264
|
+
birthplace: Algeria
|
265
|
+
|
266
|
+
name: Marcel Ayme'
|
267
|
+
birthplace: France
|
268
|
+
|
269
|
+
///@#authors|works|Albert Camus
|
270
|
+
|
271
|
+
title: L'E'tranger
|
272
|
+
|
273
|
+
title: La Peste
|
274
|
+
|
275
|
+
///@#authors|works|Marcel Ayme'
|
276
|
+
|
277
|
+
title: Le Passe-muraille
|
278
|
+
|
279
|
+
title: Les Contes du chat perche'
|
280
|
+
|
281
|
+
DATA
|
282
|
+
|
283
|
+
expected_result =<<RESULT
|
284
|
+
Name: Albert Camus
|
285
|
+
Birthplace: Algeria
|
286
|
+
Works:
|
287
|
+
* L'E'tranger
|
288
|
+
* La Peste
|
289
|
+
|
290
|
+
Name: Marcel Ayme'
|
291
|
+
Birthplace: France
|
292
|
+
Works:
|
293
|
+
* Le Passe-muraille
|
294
|
+
* Les Contes du chat perche'
|
295
|
+
|
296
|
+
RESULT
|
297
|
+
|
298
|
+
tree = AdHocTemplate::Parser.parse(template)
|
299
|
+
config = AdHocTemplate::RecordReader.read_record(data)
|
300
|
+
tag_formatter = AdHocTemplate::DefaultTagFormatter.new
|
301
|
+
result = AdHocTemplate::DataLoader.format(tree, config, tag_formatter)
|
302
|
+
|
303
|
+
expect(result).to eq(expected_result)
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
247
307
|
describe "with data in default format" do
|
248
308
|
it "should not ignore the content of an iteration block when some data are provided" do
|
249
309
|
config_data = <<CONFIG
|
@@ -559,4 +619,14 @@ RESULT
|
|
559
619
|
'a string with characters (<%h characters %>) that should be represented as character entities.')
|
560
620
|
expect(result).to eq('a string with characters (&, ", < and >) that should be represented as character entities.')
|
561
621
|
end
|
622
|
+
|
623
|
+
describe '.local_settings' do
|
624
|
+
it 'evaluates the given block in the context of ConfigManager' do
|
625
|
+
eval_result = AdHocTemplate.local_settings do
|
626
|
+
self::SETTINGS_FILE_NAME
|
627
|
+
end
|
628
|
+
|
629
|
+
expect(eval_result).to eq(AdHocTemplate::ConfigManager::SETTINGS_FILE_NAME)
|
630
|
+
end
|
631
|
+
end
|
562
632
|
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'shellwords'
|
4
4
|
require 'stringio'
|
5
|
+
require 'fileutils'
|
5
6
|
require 'spec_helper'
|
6
7
|
require 'ad_hoc_template'
|
7
8
|
require 'ad_hoc_template/command_line_interface'
|
@@ -60,11 +61,18 @@ RESULT
|
|
60
61
|
end
|
61
62
|
|
62
63
|
it "can set the internal/external encoding from the command line" do
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
64
|
+
begin
|
65
|
+
default_external = Encoding.default_external
|
66
|
+
default_internal = Encoding.default_internal
|
67
|
+
command_line_interface = AdHocTemplate::CommandLineInterface.new
|
68
|
+
set_argv("-E UTF-8:Shift_JIS")
|
69
|
+
command_line_interface.parse_command_line_options
|
70
|
+
expect(Encoding.default_external.names).to include("UTF-8")
|
71
|
+
expect(Encoding.default_internal.names).to include("Shift_JIS")
|
72
|
+
ensure
|
73
|
+
Encoding.default_external = default_external
|
74
|
+
Encoding.default_internal = default_internal
|
75
|
+
end
|
68
76
|
end
|
69
77
|
|
70
78
|
it "can specify the output file from command line" do
|
@@ -231,6 +239,11 @@ key1,key2,key3
|
|
231
239
|
value1-1,value1-2,value1-3
|
232
240
|
value2-1,value2-2,value2-3
|
233
241
|
value3-1,value3-2,value3-3
|
242
|
+
CSV
|
243
|
+
@record_in_csv_with_left_header = <<CSV
|
244
|
+
key1,value1-1,value2-1,value3-1
|
245
|
+
key2,value1-2,value2-2,value3-2
|
246
|
+
key3,value1-3,value2-3,value3-3
|
234
247
|
CSV
|
235
248
|
|
236
249
|
@expected_result = <<RESULT
|
@@ -301,7 +314,7 @@ TEMPLATE
|
|
301
314
|
record_filename = "record.csv"
|
302
315
|
|
303
316
|
allow(File).to receive(:read).with(File.expand_path(template_filename)).and_return(@template_without_iteration_block)
|
304
|
-
allow(File).to receive(:read).with(File.expand_path(record_filename)).and_return(@
|
317
|
+
allow(File).to receive(:read).with(File.expand_path(record_filename)).and_return(@record_in_csv_with_left_header)
|
305
318
|
allow(STDOUT).to receive(:print).with(@expected_result)
|
306
319
|
|
307
320
|
set_argv("--data-format=csv #{template_filename} #{record_filename}")
|
@@ -313,8 +326,9 @@ TEMPLATE
|
|
313
326
|
|
314
327
|
it "can read csv data of only one record" do
|
315
328
|
record_in_csv_format = <<CSV
|
316
|
-
key1,
|
317
|
-
|
329
|
+
key1,value1-1
|
330
|
+
key2,value1-2
|
331
|
+
key3,value1-3
|
318
332
|
CSV
|
319
333
|
|
320
334
|
expected_result = <<RESULT
|
@@ -346,6 +360,12 @@ key1 key2 key3
|
|
346
360
|
value1-1 value1-2 value1-3
|
347
361
|
value2-1 value2-2 value2-3
|
348
362
|
value3-1 value3-2 value3-3
|
363
|
+
TSV
|
364
|
+
|
365
|
+
@record_in_tsv_with_left_header = <<TSV
|
366
|
+
key1 value1-1 value2-1 value3-1
|
367
|
+
key2 value1-2 value2-2 value3-2
|
368
|
+
key3 value1-3 value2-3 value3-3
|
349
369
|
TSV
|
350
370
|
|
351
371
|
@expected_result = <<RESULT
|
@@ -438,7 +458,7 @@ TEMPLATE
|
|
438
458
|
record_filename = "record.tsv"
|
439
459
|
|
440
460
|
allow(File).to receive(:read).with(File.expand_path(template_filename)).and_return(@template_without_iteration_block)
|
441
|
-
allow(File).to receive(:read).with(File.expand_path(record_filename)).and_return(@
|
461
|
+
allow(File).to receive(:read).with(File.expand_path(record_filename)).and_return(@record_in_tsv_with_left_header)
|
442
462
|
allow(STDOUT).to receive(:print).with(@expected_result)
|
443
463
|
|
444
464
|
set_argv("--data-format=tsv #{template_filename} #{record_filename}")
|
@@ -450,8 +470,9 @@ TEMPLATE
|
|
450
470
|
|
451
471
|
it "can read tsv data of only one record" do
|
452
472
|
record_in_tsv_format = <<TSV
|
453
|
-
key1
|
454
|
-
|
473
|
+
key1 value1-1
|
474
|
+
key2 value1-2
|
475
|
+
key3 value1-3
|
455
476
|
TSV
|
456
477
|
|
457
478
|
expected_result = <<RESULT
|
@@ -564,5 +585,78 @@ TSV
|
|
564
585
|
command_line_interface.execute
|
565
586
|
end
|
566
587
|
end
|
588
|
+
|
589
|
+
describe '--recipe-template' do
|
590
|
+
it 'reads template files and geperates a blank recipe' do
|
591
|
+
expected_result = <<RECIPE
|
592
|
+
---
|
593
|
+
template: spec/test_data/en/recipe/template.html
|
594
|
+
tag_type: :xml_comment_like
|
595
|
+
template_encoding: UTF-8
|
596
|
+
data:
|
597
|
+
data_format:
|
598
|
+
data_encoding:
|
599
|
+
output_file:
|
600
|
+
blocks:
|
601
|
+
- label: "#authors"
|
602
|
+
data:
|
603
|
+
data_format:
|
604
|
+
data_encoding:
|
605
|
+
- label: "#authors|works|name"
|
606
|
+
data:
|
607
|
+
data_format:
|
608
|
+
data_encoding:
|
609
|
+
---
|
610
|
+
template: spec/test_data/ja/recipe/template.html
|
611
|
+
tag_type: :xml_comment_like
|
612
|
+
template_encoding: UTF-8
|
613
|
+
data:
|
614
|
+
data_format:
|
615
|
+
data_encoding:
|
616
|
+
output_file:
|
617
|
+
blocks:
|
618
|
+
- label: "#authors"
|
619
|
+
data:
|
620
|
+
data_format:
|
621
|
+
data_encoding:
|
622
|
+
- label: "#authors|works|name"
|
623
|
+
data:
|
624
|
+
data_format:
|
625
|
+
data_encoding:
|
626
|
+
RECIPE
|
627
|
+
|
628
|
+
allow(STDOUT).to receive(:print).with(expected_result)
|
629
|
+
|
630
|
+
set_argv("-R -t xml_comment_like spec/test_data/en/recipe/template.html spec/test_data/ja/recipe/template.html")
|
631
|
+
command_line_interface = AdHocTemplate::CommandLineInterface.new
|
632
|
+
command_line_interface.parse_command_line_options
|
633
|
+
|
634
|
+
command_line_interface.execute
|
635
|
+
end
|
636
|
+
end
|
637
|
+
|
638
|
+
describe '--cooking-recipe' do
|
639
|
+
it 'reads a recipe and updates output files' do
|
640
|
+
en_expected_result = File.read('spec/test_data/en/recipe/expected_result.html')
|
641
|
+
ja_expected_result = File.read('spec/test_data/ja/recipe/expected_result.html')
|
642
|
+
en_result_path = 'spec/test_data/en/recipe/result.html'
|
643
|
+
ja_result_path = 'spec/test_data/ja/recipe/result.html'
|
644
|
+
|
645
|
+
set_argv("-c spec/test_data/recipe.yaml")
|
646
|
+
command_line_interface = AdHocTemplate::CommandLineInterface.new
|
647
|
+
command_line_interface.parse_command_line_options
|
648
|
+
|
649
|
+
command_line_interface.execute
|
650
|
+
|
651
|
+
en_result = File.read(en_result_path)
|
652
|
+
ja_result = File.read(ja_result_path)
|
653
|
+
|
654
|
+
expect(en_result).to eq(en_expected_result)
|
655
|
+
expect(ja_result).to eq(ja_expected_result)
|
656
|
+
|
657
|
+
FileUtils.rm(en_result_path)
|
658
|
+
FileUtils.rm(ja_result_path)
|
659
|
+
end
|
660
|
+
end
|
567
661
|
end
|
568
662
|
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'shellwords'
|
4
|
+
require 'stringio'
|
5
|
+
require 'spec_helper'
|
6
|
+
require 'ad_hoc_template'
|
7
|
+
require 'ad_hoc_template/config_manager'
|
8
|
+
|
9
|
+
describe AdHocTemplate do
|
10
|
+
describe AdHocTemplate::ConfigManager do
|
11
|
+
describe '.require_local_settings' do
|
12
|
+
let(:fake_file) { double('file') }
|
13
|
+
|
14
|
+
before do
|
15
|
+
@config_file = AdHocTemplate::ConfigManager::LOCAL_SETTINGS_FILE
|
16
|
+
@config_full_path = File.expand_path(@config_file)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'loads local settings when the config file exists' do
|
20
|
+
stub_const("File", fake_file)
|
21
|
+
allow(File).to receive(:expand_path).with(@config_file).and_return(@config_full_path)
|
22
|
+
allow(File).to receive(:exist?).with(@config_full_path).and_return(true)
|
23
|
+
allow(AdHocTemplate::ConfigManager).to receive(:require).with(@config_full_path)
|
24
|
+
AdHocTemplate::ConfigManager.require_local_settings
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'does not do nothing if the config file is not available' do
|
28
|
+
stub_const("File", fake_file)
|
29
|
+
allow(File).to receive(:expand_path).with(@config_file).and_return(@config_full_path)
|
30
|
+
allow(File).to receive(:exist?).with(@config_full_path).and_return(false)
|
31
|
+
allow(AdHocTemplate::ConfigManager).to receive(:require).with(@config_full_path)
|
32
|
+
AdHocTemplate::ConfigManager.require_local_settings
|
33
|
+
expect(AdHocTemplate::ConfigManager).to_not have_received(:require).with(@config_full_path)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '.user_defined_tag' do
|
38
|
+
it 'reads a definition from local file and register it' do
|
39
|
+
tag_type_class = AdHocTemplate::Parser::TagType
|
40
|
+
|
41
|
+
yaml_file_name = 'def_tag.yaml'
|
42
|
+
yaml_file_path = File.expand_path(yaml_file_name)
|
43
|
+
yaml_source = <<YAML
|
44
|
+
---
|
45
|
+
tag_name: :test_tag
|
46
|
+
tag: ['<$', '$>']
|
47
|
+
iteration_tag: ['<$#', '#$>']
|
48
|
+
fallback_tag: ['<$*', '*$>']
|
49
|
+
remove_indent: false
|
50
|
+
YAML
|
51
|
+
|
52
|
+
allow(File).to receive(:read).with(yaml_file_path).and_return(yaml_source)
|
53
|
+
allow(File).to receive(:expand_path).and_return(yaml_file_path)
|
54
|
+
|
55
|
+
AdHocTemplate::ConfigManager.user_defined_tag(yaml_file_name)
|
56
|
+
|
57
|
+
expect(tag_type_class[:test_tag]).to be_instance_of(tag_type_class)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe 'DefaultTagFormatter related methods' do
|
62
|
+
before do
|
63
|
+
@function_table = AdHocTemplate::DefaultTagFormatter:: FUNCTION_TABLE
|
64
|
+
@var = 'french_date'
|
65
|
+
@record = { @var => '2016/09/28' }
|
66
|
+
@expected_result = '28/09/2016'
|
67
|
+
end
|
68
|
+
|
69
|
+
it '.assign_format_label is an alias of DefaultTagFormatter.assign_format' do
|
70
|
+
AdHocTemplate.local_settings do
|
71
|
+
assign_format_label('fd') {|var, record| record[var].split(/\//).reverse.join('/') }
|
72
|
+
end
|
73
|
+
|
74
|
+
result = @function_table['fd'].call(@var, @record)
|
75
|
+
|
76
|
+
expect(result).to eq(@expected_result)
|
77
|
+
|
78
|
+
@function_table.delete('fd')
|
79
|
+
end
|
80
|
+
|
81
|
+
it '.define_label_format evaluates a given block in the context of DefaultTagFormatter' do
|
82
|
+
AdHocTemplate.local_settings do
|
83
|
+
define_label_format do
|
84
|
+
def french_date(var, record)
|
85
|
+
record[var].split(/\//).reverse.join('/')
|
86
|
+
end
|
87
|
+
|
88
|
+
assign_format french_date: 'fd'
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
method_name = @function_table['fd']
|
93
|
+
result = AdHocTemplate::DefaultTagFormatter.new.send method_name, @var, @record
|
94
|
+
|
95
|
+
expect(result).to eq(@expected_result)
|
96
|
+
|
97
|
+
AdHocTemplate::DefaultTagFormatter.send :undef_method, method_name
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe '.init_local_settings' do
|
102
|
+
before do
|
103
|
+
@config_manager = AdHocTemplate::ConfigManager
|
104
|
+
@settings_dir = File.expand_path(@config_manager::LOCAL_SETTINGS_DIR)
|
105
|
+
@setting_file_name = @config_manager::SETTINGS_FILE_NAME
|
106
|
+
@tag_def_file_name = @config_manager::TAG_DEF_FILE_NAME
|
107
|
+
@settings_path = File.expand_path(File.join(@settings_dir, @setting_file_name))
|
108
|
+
@settings_file = StringIO.new('', "w")
|
109
|
+
@tag_def_path = File.expand_path(File.join(@settings_dir, @tag_def_file_name))
|
110
|
+
@tag_def_file = StringIO.new('', "w")
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'creates local setting files unless they exist' do
|
114
|
+
allow(File).to receive(:exist?).with(@settings_dir).and_return(false)
|
115
|
+
allow(FileUtils).to receive(:mkdir).and_return(true)
|
116
|
+
allow(File).to receive(:exist?).with(@settings_path).and_return(false)
|
117
|
+
allow(@config_manager).to receive(:open).with(@settings_path, 'w').and_yield(@settings_file)
|
118
|
+
allow(File).to receive(:exist?).with(@tag_def_path).and_return(false)
|
119
|
+
allow(@config_manager).to receive(:open).with(@tag_def_path, 'w').and_yield(@tag_def_file)
|
120
|
+
|
121
|
+
@config_manager.init_local_settings
|
122
|
+
|
123
|
+
expect(@settings_file.string).to start_with('AdHocTemplate')
|
124
|
+
expect(@tag_def_file.string).to start_with('---')
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'does nothing if local setting files already exist' do
|
128
|
+
allow(File).to receive(:exist?).with(@settings_dir).and_return(true)
|
129
|
+
allow(FileUtils).to receive(:mkdir).and_return(false)
|
130
|
+
allow(File).to receive(:exist?).with(@settings_path).and_return(true)
|
131
|
+
allow(@config_manager).to receive(:open).with(@settings_path, 'w').and_yield(@settings_file)
|
132
|
+
allow(File).to receive(:exist?).with(@tag_def_path).and_return(true)
|
133
|
+
allow(@config_manager).to receive(:open).with(@tag_def_path, 'w').and_yield(@tag_def_file)
|
134
|
+
|
135
|
+
@config_manager.init_local_settings
|
136
|
+
|
137
|
+
expect(@settings_file.string).to be_empty
|
138
|
+
expect(@tag_def_file.string).to be_empty
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
@@ -42,6 +42,19 @@ describe AdHocTemplate do
|
|
42
42
|
AdHocTemplate::DefaultTagFormatter::FUNCTION_TABLE.delete(proc_label)
|
43
43
|
expect(proc_assigned).to eq('test for proc assignment: <value1>')
|
44
44
|
end
|
45
|
+
|
46
|
+
it '.assign_format can be used to reassign predefined methods' do
|
47
|
+
formatter = AdHocTemplate::DefaultTagFormatter
|
48
|
+
default_equal_sign = formatter::FUNCTION_TABLE["="]
|
49
|
+
expect(default_equal_sign).to eq(:default)
|
50
|
+
|
51
|
+
formatter.assign_format(html_encode: "=")
|
52
|
+
reassigned_equal_sign = formatter::FUNCTION_TABLE["="]
|
53
|
+
expect(reassigned_equal_sign).to eq(:html_encode)
|
54
|
+
|
55
|
+
formatter.assign_format(default: "=")
|
56
|
+
expect(formatter::FUNCTION_TABLE["="]).to eq(default_equal_sign)
|
57
|
+
end
|
45
58
|
end
|
46
59
|
end
|
47
60
|
|