rake-funnel 0.3.2.pre → 0.4.0.pre

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.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +2 -2
  3. data/Gemfile +4 -0
  4. data/README.md +2 -2
  5. data/lib/rake/funnel/ambiguous_file_error.rb +31 -29
  6. data/lib/rake/funnel/execution_error.rb +28 -26
  7. data/lib/rake/funnel/extensions/case/camel_case.rb +24 -19
  8. data/lib/rake/funnel/extensions/case/pascal_case.rb +24 -19
  9. data/lib/rake/funnel/extensions/case.rb +3 -3
  10. data/lib/rake/funnel/extensions/common_path.rb +60 -52
  11. data/lib/rake/funnel/extensions/disable_colors.rb +33 -27
  12. data/lib/rake/funnel/extensions/rexml.rb +27 -23
  13. data/lib/rake/funnel/extensions/shell.rb +92 -56
  14. data/lib/rake/funnel/extensions/windows_path.rb +15 -11
  15. data/lib/rake/funnel/framework.rb +11 -16
  16. data/lib/rake/funnel/integration/progress_report.rb +72 -70
  17. data/lib/rake/funnel/integration/sync_output.rb +12 -8
  18. data/lib/rake/funnel/integration/teamcity/nunit_plugin.rb +61 -55
  19. data/lib/rake/funnel/integration/teamcity/progress_report.rb +39 -33
  20. data/lib/rake/funnel/integration/teamcity/service_messages.rb +46 -40
  21. data/lib/rake/funnel/integration/teamcity/teamcity.rb +19 -15
  22. data/lib/rake/funnel/integration/teamcity.rb +3 -5
  23. data/lib/rake/funnel/support/argument_mapper/key_value_pair.rb +16 -10
  24. data/lib/rake/funnel/support/argument_mapper/styles/default.rb +39 -31
  25. data/lib/rake/funnel/support/argument_mapper/styles/msbuild.rb +41 -33
  26. data/lib/rake/funnel/support/argument_mapper/styles/msdeploy.rb +55 -47
  27. data/lib/rake/funnel/support/argument_mapper/styles/nunit.rb +41 -33
  28. data/lib/rake/funnel/support/argument_mapper/styles.rb +3 -5
  29. data/lib/rake/funnel/support/argument_mapper/switch.rb +16 -10
  30. data/lib/rake/funnel/support/argument_mapper/value.rb +16 -10
  31. data/lib/rake/funnel/support/assembly_version/from_version_files.rb +39 -35
  32. data/lib/rake/funnel/support/assembly_version/languages/cs +5 -5
  33. data/lib/rake/funnel/support/assembly_version/languages/fs +12 -12
  34. data/lib/rake/funnel/support/assembly_version/languages/vb +5 -5
  35. data/lib/rake/funnel/support/assembly_version_writer.rb +56 -52
  36. data/lib/rake/funnel/support/binary_version_reader.rb +37 -32
  37. data/lib/rake/funnel/support/copier.rb +31 -27
  38. data/lib/rake/funnel/support/environments/loader.rb +46 -40
  39. data/lib/rake/funnel/support/environments.rb +3 -3
  40. data/lib/rake/funnel/support/internal/finder.rb +55 -51
  41. data/lib/rake/funnel/support/internal/instantiate_symbol.rb +38 -34
  42. data/lib/rake/funnel/support/mapper.rb +57 -53
  43. data/lib/rake/funnel/support/mono.rb +21 -17
  44. data/lib/rake/funnel/support/msbuild/build_tool.rb +30 -24
  45. data/lib/rake/funnel/support/msbuild.rb +3 -3
  46. data/lib/rake/funnel/support/msdeploy/registry_patch.rb +90 -84
  47. data/lib/rake/funnel/support/msdeploy.rb +3 -3
  48. data/lib/rake/funnel/support/patch.rb +41 -37
  49. data/lib/rake/funnel/support/specs_remover.rb +66 -62
  50. data/lib/rake/funnel/support/template_engine.rb +30 -26
  51. data/lib/rake/funnel/support/timing/report.rb +95 -89
  52. data/lib/rake/funnel/support/timing/statistics.rb +32 -26
  53. data/lib/rake/funnel/support/timing.rb +3 -3
  54. data/lib/rake/funnel/support/version_info.rb +103 -72
  55. data/lib/rake/funnel/support/which.rb +19 -15
  56. data/lib/rake/funnel/support/zipper.rb +53 -49
  57. data/lib/rake/funnel/tasks/assembly_version.rb +44 -40
  58. data/lib/rake/funnel/tasks/bin_path.rb +45 -41
  59. data/lib/rake/funnel/tasks/copy.rb +43 -39
  60. data/lib/rake/funnel/tasks/environments.rb +89 -89
  61. data/lib/rake/funnel/tasks/msbuild.rb +55 -51
  62. data/lib/rake/funnel/tasks/msdeploy.rb +54 -50
  63. data/lib/rake/funnel/tasks/nunit.rb +52 -48
  64. data/lib/rake/funnel/tasks/paket.rb +51 -47
  65. data/lib/rake/funnel/tasks/quick_template.rb +53 -49
  66. data/lib/rake/funnel/tasks/side_by_side_specs.rb +41 -37
  67. data/lib/rake/funnel/tasks/timing.rb +108 -104
  68. data/lib/rake/funnel/tasks/zip.rb +46 -42
  69. data/lib/rake/funnel/version.rb +1 -1
  70. data/lib/rake/funnel.rb +7 -7
  71. data/rake-funnel.gemspec +12 -3
  72. data/spec/rake/funnel/execution_error_spec.rb +67 -67
  73. data/spec/rake/funnel/extensions/case/camel_case_spec.rb +17 -17
  74. data/spec/rake/funnel/extensions/case/pascal_case_spec.rb +17 -17
  75. data/spec/rake/funnel/extensions/common_path_spec.rb +56 -56
  76. data/spec/rake/funnel/extensions/disable_colors_spec.rb +33 -33
  77. data/spec/rake/funnel/extensions/rexml_spec.rb +20 -20
  78. data/spec/rake/funnel/extensions/shell_spec.rb +237 -237
  79. data/spec/rake/funnel/extensions/windows_path_spec.rb +5 -5
  80. data/spec/rake/funnel/integration/progress_report_spec.rb +149 -149
  81. data/spec/rake/funnel/integration/sync_output_spec.rb +16 -16
  82. data/spec/rake/funnel/integration/teamcity/nunit_plugin_spec.rb +110 -110
  83. data/spec/rake/funnel/integration/teamcity/progress_report_spec.rb +174 -174
  84. data/spec/rake/funnel/integration/teamcity/service_messages_spec.rb +136 -136
  85. data/spec/rake/funnel/integration/teamcity/teamcity_spec.rb +34 -34
  86. data/spec/rake/funnel/support/argument_mapper/styles/msdeploy_spec.rb +222 -222
  87. data/spec/rake/funnel/support/argument_mapper/styles/nunit_spec.rb +25 -25
  88. data/spec/rake/funnel/support/argument_mapper/styles/styles_spec.rb +214 -214
  89. data/spec/rake/funnel/support/assembly_version/from_version_files_spec.rb +66 -61
  90. data/spec/rake/funnel/support/assembly_version_writer_spec.rb +140 -140
  91. data/spec/rake/funnel/support/binary_version_reader_spec.rb +29 -29
  92. data/spec/rake/funnel/support/copier_spec.rb +58 -58
  93. data/spec/rake/funnel/support/environments/loader_spec.rb +143 -143
  94. data/spec/rake/funnel/support/internal/finder_spec.rb +229 -229
  95. data/spec/rake/funnel/support/internal/instantiate_symbol_spec.rb +182 -183
  96. data/spec/rake/funnel/support/mapper_spec.rb +87 -87
  97. data/spec/rake/funnel/support/mono_spec.rb +57 -57
  98. data/spec/rake/funnel/support/msbuild/build_tool_spec.rb +21 -21
  99. data/spec/rake/funnel/support/msdeploy/registry_patch_spec.rb +139 -139
  100. data/spec/rake/funnel/support/patch_spec.rb +108 -108
  101. data/spec/rake/funnel/support/specs_remover/Sample.csproj +28 -28
  102. data/spec/rake/funnel/support/specs_remover_spec.rb +116 -116
  103. data/spec/rake/funnel/support/template_engine_spec.rb +65 -65
  104. data/spec/rake/funnel/support/timing/report_spec.rb +129 -129
  105. data/spec/rake/funnel/support/version_info_spec.rb +333 -228
  106. data/spec/rake/funnel/support/which_spec.rb +65 -65
  107. data/spec/rake/funnel/support/zipper_spec.rb +77 -77
  108. data/spec/rake/funnel/tasks/assembly_version_spec.rb +45 -45
  109. data/spec/rake/funnel/tasks/bin_path_spec.rb +52 -52
  110. data/spec/rake/funnel/tasks/copy_spec.rb +44 -44
  111. data/spec/rake/funnel/tasks/environments_spec.rb +249 -247
  112. data/spec/rake/funnel/tasks/msbuild_spec.rb +91 -91
  113. data/spec/rake/funnel/tasks/msdeploy_spec.rb +220 -220
  114. data/spec/rake/funnel/tasks/nunit_spec.rb +74 -74
  115. data/spec/rake/funnel/tasks/paket_spec.rb +140 -142
  116. data/spec/rake/funnel/tasks/quick_template_spec.rb +62 -62
  117. data/spec/rake/funnel/tasks/side_by_side_specs_spec.rb +58 -58
  118. data/spec/rake/funnel/tasks/timing_spec.rb +133 -133
  119. data/spec/rake/funnel/tasks/zip_spec.rb +50 -50
  120. data/spec/spec_helper.rb +43 -33
  121. metadata +2 -3
  122. data/lib/rake/funnel/support/side_by_side_specs.rb +0 -3
@@ -1,140 +1,140 @@
1
- require 'erb'
2
-
3
- include Rake::Funnel::Support
4
-
5
- describe Rake::Funnel::Support::AssemblyVersionWriter do
6
- describe 'version source' do
7
- describe 'default' do
8
- before {
9
- allow_any_instance_of(described_class).to receive(:create)
10
- }
11
-
12
- it 'should create FromVersionFiles with empty args' do
13
- expect(subject).to have_received(:create).with(:FromVersionFiles, {})
14
- end
15
- end
16
-
17
- describe 'custom type' do
18
- let(:source) { :Custom }
19
- let(:source_args) { { foo: 42 } }
20
-
21
- before {
22
- allow_any_instance_of(described_class).to receive(:create)
23
- }
24
-
25
- subject {
26
- described_class.new(source, source_args)
27
- }
28
-
29
- it 'should create type with args' do
30
- expect(subject).to have_received(:create).with(source, source_args)
31
- end
32
- end
33
-
34
- describe 'custom instance' do
35
- let(:source) {
36
- [
37
- {
38
- source: 'from e.g. gitversion',
39
- version_info: VersionInfo.new(
40
- {
41
- assembly_version: '1',
42
- assembly_file_version: '1.2',
43
- assembly_informational_version: '1.2-abc'
44
- })
45
- }
46
- ]
47
- }
48
-
49
- subject {
50
- described_class.new(source)
51
- }
52
-
53
- it 'should succeed' do
54
- expect(true).to eq(true)
55
- end
56
- end
57
- end
58
-
59
- describe 'generator' do
60
- let(:source) {
61
- [
62
- {
63
- source: 'one',
64
- version_info: VersionInfo.new(
65
- {
66
- assembly_version: '1',
67
- assembly_file_version: '1.2',
68
- assembly_informational_version: '1.2-abc'
69
- })
70
- },
71
- {
72
- source: 'two',
73
- version_info: VersionInfo.new(
74
- {
75
- assembly_version: '2',
76
- assembly_file_version: '2.3',
77
- assembly_informational_version: '2.3-def'
78
- })
79
- }
80
- ]
81
- }
82
-
83
- let(:target_path) { double(Proc).as_null_object }
84
- let(:languages) { [:vb, :cs, :fs] }
85
- let(:erb) { double(ERB).as_null_object }
86
-
87
- subject {
88
- described_class.new(source)
89
- }
90
-
91
- before {
92
- allow(Rake).to receive(:rake_output_message)
93
- }
94
-
95
- before {
96
- allow(ERB).to receive(:new).and_return(erb)
97
- }
98
-
99
- before {
100
- allow(File).to receive(:read).and_return('template')
101
- allow(File).to receive(:write)
102
- }
103
-
104
- context 'supported languages' do
105
- before {
106
- subject.write(target_path, languages)
107
- }
108
-
109
- it 'should determine target path for each language in source' do
110
- source.each do |src|
111
- languages.each do |language|
112
- expect(target_path).to have_received(:call).with(language, src[:version_info], src[:source])
113
- end
114
- end
115
- end
116
-
117
- it 'should read version info template for languages' do
118
- languages.each do |language|
119
- expect(File).to have_received(:read).with(%r|assembly_version/languages/#{language}|).at_least(:once)
120
- end
121
- end
122
-
123
- it 'should run templates through ERb' do
124
- expect(erb).to have_received(:result).exactly(languages.length * source.length).times
125
- end
126
-
127
- it 'should write version info file for each language in source' do
128
- expect(File).to have_received(:write).exactly(languages.length * source.length).times
129
- end
130
- end
131
-
132
- context 'unsupported language' do
133
- let(:languages) { :unsupported }
134
-
135
- it 'should fail' do
136
- expect { subject.write(target_path, languages) }.to raise_error /Language is not supported: unsupported/
137
- end
138
- end
139
- end
140
- end
1
+ require 'erb'
2
+
3
+ include Rake::Funnel::Support
4
+
5
+ describe Rake::Funnel::Support::AssemblyVersionWriter do
6
+ describe 'version source' do
7
+ describe 'default' do
8
+ before {
9
+ allow_any_instance_of(described_class).to receive(:create)
10
+ }
11
+
12
+ it 'should create FromVersionFiles with empty args' do
13
+ expect(subject).to have_received(:create).with(:FromVersionFiles, {})
14
+ end
15
+ end
16
+
17
+ describe 'custom type' do
18
+ let(:source) { :Custom }
19
+ let(:source_args) { { foo: 42 } }
20
+
21
+ before {
22
+ allow_any_instance_of(described_class).to receive(:create)
23
+ }
24
+
25
+ subject {
26
+ described_class.new(source, source_args)
27
+ }
28
+
29
+ it 'should create type with args' do
30
+ expect(subject).to have_received(:create).with(source, source_args)
31
+ end
32
+ end
33
+
34
+ describe 'custom instance' do
35
+ let(:source) {
36
+ [
37
+ {
38
+ source: 'from e.g. gitversion',
39
+ version_info: VersionInfo.new(
40
+ {
41
+ assembly_version: '1',
42
+ assembly_file_version: '1.2',
43
+ assembly_informational_version: '1.2-abc'
44
+ })
45
+ }
46
+ ]
47
+ }
48
+
49
+ subject {
50
+ described_class.new(source)
51
+ }
52
+
53
+ it 'should succeed' do
54
+ expect(subject).to be
55
+ end
56
+ end
57
+ end
58
+
59
+ describe 'generator' do
60
+ let(:source) {
61
+ [
62
+ {
63
+ source: 'one',
64
+ version_info: VersionInfo.new(
65
+ {
66
+ assembly_version: '1',
67
+ assembly_file_version: '1.2',
68
+ assembly_informational_version: '1.2-abc'
69
+ })
70
+ },
71
+ {
72
+ source: 'two',
73
+ version_info: VersionInfo.new(
74
+ {
75
+ assembly_version: '2',
76
+ assembly_file_version: '2.3',
77
+ assembly_informational_version: '2.3-def'
78
+ })
79
+ }
80
+ ]
81
+ }
82
+
83
+ let(:target_path) { double(Proc).as_null_object }
84
+ let(:languages) { [:vb, :cs, :fs] }
85
+ let(:erb) { double(ERB).as_null_object }
86
+
87
+ subject {
88
+ described_class.new(source)
89
+ }
90
+
91
+ before {
92
+ allow(Rake).to receive(:rake_output_message)
93
+ }
94
+
95
+ before {
96
+ allow(ERB).to receive(:new).and_return(erb)
97
+ }
98
+
99
+ before {
100
+ allow(File).to receive(:read).and_return('template')
101
+ allow(File).to receive(:write)
102
+ }
103
+
104
+ context 'supported languages' do
105
+ before {
106
+ subject.write(target_path, languages)
107
+ }
108
+
109
+ it 'should determine target path for each language in source' do
110
+ source.each do |src|
111
+ languages.each do |language|
112
+ expect(target_path).to have_received(:call).with(language, src[:version_info], src[:source])
113
+ end
114
+ end
115
+ end
116
+
117
+ it 'should read version info template for languages' do
118
+ languages.each do |language|
119
+ expect(File).to have_received(:read).with(%r|assembly_version/languages/#{language}|).at_least(:once)
120
+ end
121
+ end
122
+
123
+ it 'should run templates through ERb' do
124
+ expect(erb).to have_received(:result).exactly(languages.length * source.length).times
125
+ end
126
+
127
+ it 'should write version info file for each language in source' do
128
+ expect(File).to have_received(:write).exactly(languages.length * source.length).times
129
+ end
130
+ end
131
+
132
+ context 'unsupported language' do
133
+ let(:languages) { :unsupported }
134
+
135
+ it 'should fail' do
136
+ expect { subject.write(target_path, languages) }.to raise_error /Language is not supported: unsupported/
137
+ end
138
+ end
139
+ end
140
+ end
@@ -1,29 +1,29 @@
1
- describe Rake::Funnel::Support::BinaryVersionReader do
2
- def binary_version(*version_parts)
3
- version = version_parts.map { |p| p.to_s + "\0" }.join(".\0")
4
- "F\0i\0l\0e\0V\0e\0r\0s\0i\0o\0n" + "\0" * 3 + version + "\0" * 3
5
- end
6
-
7
- let(:file) { 'some assembly' }
8
-
9
- before {
10
- allow(File).to receive(:binread).with(file).and_return(contents)
11
- }
12
-
13
- describe 'version can be read' do
14
- let(:version) { %w(1 2 3 4) }
15
- let(:contents) { "binary #{binary_version(*version)} binary" }
16
-
17
- it 'should yield all parts' do
18
- expect(described_class.read_from(file).file_version).to eq(version.join('.'))
19
- end
20
- end
21
-
22
- describe 'version cannot be read' do
23
- let(:contents) { 'this does not contain a version number' }
24
-
25
- it 'should yield empty VersionInfo' do
26
- expect(described_class.read_from(file).to_h).to be_empty
27
- end
28
- end
29
- end
1
+ describe Rake::Funnel::Support::BinaryVersionReader do
2
+ def binary_version(*version_parts)
3
+ version = version_parts.map { |p| p.to_s + "\0" }.join(".\0")
4
+ "F\0i\0l\0e\0V\0e\0r\0s\0i\0o\0n" + "\0" * 3 + version + "\0" * 3
5
+ end
6
+
7
+ let(:file) { 'some assembly' }
8
+
9
+ before {
10
+ allow(File).to receive(:binread).with(file).and_return(contents)
11
+ }
12
+
13
+ describe 'version can be read' do
14
+ let(:version) { %w(1 2 3 4) }
15
+ let(:contents) { "binary #{binary_version(*version)} binary" }
16
+
17
+ it 'should yield all parts' do
18
+ expect(described_class.read_from(file).file_version).to eq(version.join('.'))
19
+ end
20
+ end
21
+
22
+ describe 'version cannot be read' do
23
+ let(:contents) { 'this does not contain a version number' }
24
+
25
+ it 'should yield empty VersionInfo' do
26
+ expect(described_class.read_from(file).to_h).to be_empty
27
+ end
28
+ end
29
+ end
@@ -1,58 +1,58 @@
1
- describe Rake::Funnel::Support::Copier do
2
- let(:source) { files + directories }
3
- let(:files) { %w(bin/1 bin/2 bin/3/4 bin/directory/file) }
4
- let(:directories) { %w(bin/directory bin/directory-no-content) }
5
- let(:target) { 'target path' }
6
-
7
- context 'failure' do
8
- context 'target not defined' do
9
- let(:target) { nil }
10
-
11
- it 'should fail' do
12
- expect { described_class.copy([], nil) }.to raise_error(/Target not defined/)
13
- end
14
- end
15
- end
16
-
17
- describe 'recursive copy' do
18
- before {
19
- allow(File).to receive(:directory?).and_return(false)
20
- directories.each do |dir|
21
- allow(File).to receive(:directory?).with(dir).and_return(true)
22
- end
23
-
24
- allow(RakeFileUtils).to receive(:mkdir_p)
25
- allow(RakeFileUtils).to receive(:cp)
26
- }
27
-
28
- before {
29
- described_class.copy(source, target)
30
- }
31
-
32
- def no_prefix(file)
33
- file.sub(%r|bin/|, '')
34
- end
35
-
36
- it 'should create target directories' do
37
- expect(RakeFileUtils).to have_received(:mkdir_p).with(File.join(target, '3'))
38
- expect(RakeFileUtils).to have_received(:mkdir_p).with(File.join(target, 'directory'))
39
- end
40
-
41
- it 'should skip source directories' do
42
- directories.each do |dir|
43
- expect(RakeFileUtils).not_to have_received(:cp).with(dir, anything)
44
- end
45
- end
46
-
47
- it 'should copy files with common path removed' do
48
- files.each do |file|
49
- target_path = File.join(target, no_prefix(file))
50
- expect(RakeFileUtils).to have_received(:cp).with(file, target_path, anything)
51
- end
52
- end
53
-
54
- it 'should preserve metdata' do
55
- expect(RakeFileUtils).to have_received(:cp).with(anything, anything, { preserve: true }).exactly(files.length).times
56
- end
57
- end
58
- end
1
+ describe Rake::Funnel::Support::Copier do
2
+ let(:source) { files + directories }
3
+ let(:files) { %w(bin/1 bin/2 bin/3/4 bin/directory/file) }
4
+ let(:directories) { %w(bin/directory bin/directory-no-content) }
5
+ let(:target) { 'target path' }
6
+
7
+ context 'failure' do
8
+ context 'target not defined' do
9
+ let(:target) { nil }
10
+
11
+ it 'should fail' do
12
+ expect { described_class.copy([], nil) }.to raise_error(/Target not defined/)
13
+ end
14
+ end
15
+ end
16
+
17
+ describe 'recursive copy' do
18
+ before {
19
+ allow(File).to receive(:directory?).and_return(false)
20
+ directories.each do |dir|
21
+ allow(File).to receive(:directory?).with(dir).and_return(true)
22
+ end
23
+
24
+ allow(RakeFileUtils).to receive(:mkdir_p)
25
+ allow(RakeFileUtils).to receive(:cp)
26
+ }
27
+
28
+ before {
29
+ described_class.copy(source, target)
30
+ }
31
+
32
+ def no_prefix(file)
33
+ file.sub(%r|bin/|, '')
34
+ end
35
+
36
+ it 'should create target directories' do
37
+ expect(RakeFileUtils).to have_received(:mkdir_p).with(File.join(target, '3'))
38
+ expect(RakeFileUtils).to have_received(:mkdir_p).with(File.join(target, 'directory'))
39
+ end
40
+
41
+ it 'should skip source directories' do
42
+ directories.each do |dir|
43
+ expect(RakeFileUtils).not_to have_received(:cp).with(dir, anything)
44
+ end
45
+ end
46
+
47
+ it 'should copy files with common path removed' do
48
+ files.each do |file|
49
+ target_path = File.join(target, no_prefix(file))
50
+ expect(RakeFileUtils).to have_received(:cp).with(file, target_path, anything)
51
+ end
52
+ end
53
+
54
+ it 'should preserve metdata' do
55
+ expect(RakeFileUtils).to have_received(:cp).with(anything, anything, preserve: true).exactly(files.length).times
56
+ end
57
+ end
58
+ end