aruba 1.0.4 → 1.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.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -1
  3. data/CONTRIBUTING.md +11 -23
  4. data/README.md +1 -2
  5. data/exe/aruba +2 -2
  6. data/lib/aruba.rb +1 -1
  7. data/lib/aruba/api.rb +11 -11
  8. data/lib/aruba/api/bundler.rb +1 -1
  9. data/lib/aruba/api/commands.rb +7 -7
  10. data/lib/aruba/api/core.rb +20 -20
  11. data/lib/aruba/api/environment.rb +2 -2
  12. data/lib/aruba/api/filesystem.rb +41 -14
  13. data/lib/aruba/api/text.rb +4 -4
  14. data/lib/aruba/aruba_path.rb +2 -2
  15. data/lib/aruba/basic_configuration.rb +11 -11
  16. data/lib/aruba/cli.rb +7 -7
  17. data/lib/aruba/command.rb +4 -4
  18. data/lib/aruba/config/jruby.rb +9 -9
  19. data/lib/aruba/config_wrapper.rb +2 -2
  20. data/lib/aruba/configuration.rb +14 -14
  21. data/lib/aruba/console.rb +11 -11
  22. data/lib/aruba/console/help.rb +5 -5
  23. data/lib/aruba/contracts/absolute_path.rb +1 -1
  24. data/lib/aruba/contracts/enum.rb +1 -1
  25. data/lib/aruba/contracts/is_power_of_two.rb +1 -1
  26. data/lib/aruba/contracts/relative_path.rb +1 -1
  27. data/lib/aruba/cucumber.rb +7 -7
  28. data/lib/aruba/cucumber/command.rb +31 -31
  29. data/lib/aruba/cucumber/environment.rb +7 -7
  30. data/lib/aruba/cucumber/file.rb +7 -3
  31. data/lib/aruba/cucumber/hooks.rb +29 -29
  32. data/lib/aruba/cucumber/testing_frameworks.rb +18 -18
  33. data/lib/aruba/event_bus.rb +4 -4
  34. data/lib/aruba/event_bus/name_resolver.rb +4 -4
  35. data/lib/aruba/file_size.rb +1 -1
  36. data/lib/aruba/generators/script_file.rb +2 -2
  37. data/lib/aruba/in_config_wrapper.rb +1 -1
  38. data/lib/aruba/initializer.rb +10 -10
  39. data/lib/aruba/matchers/base/base_matcher.rb +1 -1
  40. data/lib/aruba/matchers/base/message_indenter.rb +1 -1
  41. data/lib/aruba/matchers/base/object_formatter.rb +2 -2
  42. data/lib/aruba/matchers/collection.rb +1 -1
  43. data/lib/aruba/matchers/collection/all.rb +1 -1
  44. data/lib/aruba/matchers/collection/include_an_object.rb +2 -2
  45. data/lib/aruba/matchers/command.rb +1 -1
  46. data/lib/aruba/matchers/command/be_successfully_executed.rb +4 -4
  47. data/lib/aruba/matchers/command/have_finished_in_time.rb +1 -1
  48. data/lib/aruba/matchers/command/have_output.rb +1 -1
  49. data/lib/aruba/matchers/directory.rb +1 -1
  50. data/lib/aruba/matchers/directory/be_an_existing_directory.rb +2 -2
  51. data/lib/aruba/matchers/directory/have_sub_directory.rb +3 -3
  52. data/lib/aruba/matchers/environment.rb +1 -1
  53. data/lib/aruba/matchers/file.rb +1 -1
  54. data/lib/aruba/matchers/file/be_a_command_found_in_path.rb +1 -1
  55. data/lib/aruba/matchers/file/be_an_existing_executable.rb +2 -2
  56. data/lib/aruba/matchers/file/be_an_existing_file.rb +2 -2
  57. data/lib/aruba/matchers/file/have_file_content.rb +1 -1
  58. data/lib/aruba/matchers/file/have_file_size.rb +1 -1
  59. data/lib/aruba/matchers/file/have_same_file_content.rb +2 -2
  60. data/lib/aruba/matchers/path.rb +1 -1
  61. data/lib/aruba/matchers/path/a_path_matching_pattern.rb +1 -1
  62. data/lib/aruba/matchers/path/be_an_absolute_path.rb +1 -1
  63. data/lib/aruba/matchers/path/be_an_existing_path.rb +1 -1
  64. data/lib/aruba/matchers/path/have_permissions.rb +2 -2
  65. data/lib/aruba/matchers/string.rb +1 -1
  66. data/lib/aruba/matchers/string/include_output_string.rb +1 -1
  67. data/lib/aruba/matchers/string/match_output_string.rb +1 -1
  68. data/lib/aruba/matchers/string/output_string_eq.rb +1 -1
  69. data/lib/aruba/platform.rb +2 -2
  70. data/lib/aruba/platforms/announcer.rb +14 -14
  71. data/lib/aruba/platforms/aruba_fixed_size_file_creator.rb +1 -1
  72. data/lib/aruba/platforms/aruba_logger.rb +1 -1
  73. data/lib/aruba/platforms/command_monitor.rb +5 -5
  74. data/lib/aruba/platforms/determine_disk_usage.rb +1 -1
  75. data/lib/aruba/platforms/filesystem_status.rb +1 -1
  76. data/lib/aruba/platforms/simple_table.rb +1 -1
  77. data/lib/aruba/platforms/unix_command_string.rb +2 -2
  78. data/lib/aruba/platforms/unix_platform.rb +22 -22
  79. data/lib/aruba/platforms/unix_which.rb +1 -1
  80. data/lib/aruba/platforms/windows_command_string.rb +2 -2
  81. data/lib/aruba/platforms/windows_environment_variables.rb +1 -1
  82. data/lib/aruba/platforms/windows_platform.rb +6 -6
  83. data/lib/aruba/platforms/windows_which.rb +5 -5
  84. data/lib/aruba/processes/basic_process.rb +2 -2
  85. data/lib/aruba/processes/debug_process.rb +5 -5
  86. data/lib/aruba/processes/in_process.rb +7 -7
  87. data/lib/aruba/processes/spawn_process.rb +17 -22
  88. data/lib/aruba/rspec.rb +6 -6
  89. data/lib/aruba/runtime.rb +6 -6
  90. data/lib/aruba/setup.rb +3 -3
  91. data/lib/aruba/version.rb +1 -1
  92. metadata +21 -22
  93. data/lib/aruba/tasks/docker_helpers.rb +0 -156
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 26d3e68b36ad2938d35b9f147b8b776b3eb1e25b2e2a271f5346b8b423888964
4
- data.tar.gz: 4a70c60f9ccb254e8c5edb7b9c91cc51274f11912c2c1554df61ed8d96cb3b5f
3
+ metadata.gz: 9b464d3e65f58bdcafd421ed026c8541de9cc9723258f76175b8b8ad3dab4621
4
+ data.tar.gz: 2215471629083ac51e4b5e31694ac60408d374f8a0aa504addb79ae70f364e84
5
5
  SHA512:
6
- metadata.gz: 10d08cceb237bb14cd0c0559163326c3340eba5a7db7275d876f6836ec11323b37e734dff617f727c783b653cbdbf47c333952177b0cea4b2117ea4d8ba4d2a7
7
- data.tar.gz: 9c71d0e7409899b56b36d53c2a4581ea7143093bacd6dd8fbacac60c211512e7bd4118ef69f7f4e8bca651010609079f05c90f746cdb9f2fdcba41ae9e684430
6
+ metadata.gz: 2222d8d29dccca2bcbe973512ae24bbdc14a82d2b7dbb3e1fd84b72c35793af4919043cc077bacb2e48db3fbe9c8f60d2c8ed032a36a93d88a0c2ec3ef2e190f
7
+ data.tar.gz: 007bda65f38b79499f0fda2243f44539c76e541d871cf66b841adafbe1f9a7800946d96c32637264313a24f381f4f97d176a93a02d0e171f1d116d3467b58c19
data/CHANGELOG.md CHANGED
@@ -6,6 +6,15 @@ This project adheres to [Semantic Versioning][1].
6
6
 
7
7
  This document is formatted according to the principles of [Keep A CHANGELOG][2].
8
8
 
9
+ ## [Unreleased]
10
+
11
+ ## [1.1.0] / 2021-04-14
12
+
13
+ * Add step and API to add whole lines to a file ([#780] by [mvz])
14
+ * Deprecate file creation when using `append_to_file` ([#781] by [mvz])
15
+ * Update dependencies to cucumber to allow working with incoming major versions
16
+ ([#801] by [mattwynne])
17
+
9
18
  ## [1.0.4] / 2021-01-04
10
19
 
11
20
  * Update rubocop and fix new offenses (various pull requests)
@@ -964,6 +973,7 @@ Note: These are changes w.r.t. Aruba version 0.14.1.
964
973
 
965
974
  <!-- issues & pull requests -->
966
975
 
976
+ [#801]: https://github.com/cucumber/aruba/pull/801
967
977
  [#727]: https://github.com/cucumber/aruba/pull/727
968
978
  [#725]: https://github.com/cucumber/aruba/pull/725
969
979
  [#724]: https://github.com/cucumber/aruba/pull/724
@@ -1242,7 +1252,9 @@ Note: These are changes w.r.t. Aruba version 0.14.1.
1242
1252
 
1243
1253
  <!-- Releases -->
1244
1254
 
1245
- [Unreleased]: https://github.com/cucumber/aruba/compare/v1.0.3...master
1255
+ [Unreleased]: https://github.com/cucumber/aruba/compare/v1.1.0...master
1256
+ [1.1.0]: https://github.com/cucumber/aruba/compare/v1.0.4...v1.1.0
1257
+ [1.0.4]: https://github.com/cucumber/aruba/compare/v1.0.3...v1.0.4
1246
1258
  [1.0.3]: https://github.com/cucumber/aruba/compare/v1.0.2...v1.0.3
1247
1259
  [1.0.2]: https://github.com/cucumber/aruba/compare/v1.0.1...v1.0.2
1248
1260
  [1.0.1]: https://github.com/cucumber/aruba/compare/v1.0.0...v1.0.1
data/CONTRIBUTING.md CHANGED
@@ -118,22 +118,15 @@ bundle install
118
118
 
119
119
  Run the following command to run the test suite.
120
120
 
121
- ```bash
122
- # Run the test suite
123
- bin/test
124
- ```
125
-
126
- Or use these Rake tasks:
127
-
128
121
  ```bash
129
122
  # Run the whole test suite
130
- rake test
123
+ bundle exec rake
131
124
  # Run RSpec tests
132
- rake spec
125
+ bundle exec rake spec
133
126
  # Run Cucumber features
134
- rake cucumber
127
+ bundle exec rake cucumber
135
128
  # Run Cucumber features which are "WORK IN PROGRESS" and are allowed to fail
136
- rake cucumber:wip
129
+ bundle exec rake cucumber:wip
137
130
  ```
138
131
 
139
132
  If you have problems because our assumptions about your local setup are wrong,
@@ -142,19 +135,14 @@ installed on your local system.
142
135
 
143
136
  ```bash
144
137
  # Build the docker container
145
- bundle exec rake docker:build
146
-
147
- # Alternative: Build with disabled cache
148
- bundle exec rake 'docker:build[false]'
138
+ docker build -t test-aruba .
149
139
 
150
- # Build image with version tag
151
- bundle exec rake 'docker:build[false, 0.1.0]'
140
+ # Open a bash shell inside the container with attached volume so changes to the
141
+ # code will be picked up automatically.
142
+ docker run -v $PWD:/aruba --rm -it test-aruba:latest bash
152
143
 
153
- # Run the whole test suite in "docker"-container
154
- RUN_IN_DOCKER=1 bin/test
155
-
156
- # Run only selected scenario
157
- RUN_IN_DOCKER=1 bin/test cucumber features/steps/command/shell.feature:14
144
+ # Run the test suite
145
+ bundle exec rake
158
146
  ```
159
147
 
160
148
  ### Installing your own gems used for development
@@ -218,7 +206,7 @@ Now release it:
218
206
  bundle update
219
207
 
220
208
  # Run test suite
221
- bin/test
209
+ bundle exec rake
222
210
 
223
211
  # Release gem
224
212
  git commit -m "Version bump"
data/README.md CHANGED
@@ -32,8 +32,7 @@ gem install aruba
32
32
  ### As a user getting started with Aruba
33
33
 
34
34
  Our most current documentation to get started with Aruba as a user can be
35
- found on [Cucumber Jam](https://app.cucumber.pro/projects/aruba).
36
- It is generated from our feature files describing the use of Aruba.
35
+ found in [./features/](https://github.com/cucumber/aruba/tree/master/features/).
37
36
 
38
37
  ### As a user getting started with a ruby testing framework
39
38
 
data/exe/aruba CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $LOAD_PATH << File.expand_path('../lib', __dir__)
3
+ $LOAD_PATH << File.expand_path("../lib", __dir__)
4
4
 
5
- require 'aruba/cli'
5
+ require "aruba/cli"
6
6
 
7
7
  Aruba::Cli.start
data/lib/aruba.rb CHANGED
@@ -1 +1 @@
1
- require 'aruba/api'
1
+ require "aruba/api"
data/lib/aruba/api.rb CHANGED
@@ -1,18 +1,18 @@
1
- require 'rspec/expectations'
2
- require 'shellwords'
1
+ require "rspec/expectations"
2
+ require "shellwords"
3
3
 
4
- require 'aruba/version'
4
+ require "aruba/version"
5
5
 
6
- require 'aruba/platform'
7
- require 'aruba/api/core'
8
- require 'aruba/api/commands'
6
+ require "aruba/platform"
7
+ require "aruba/api/core"
8
+ require "aruba/api/commands"
9
9
 
10
- require 'aruba/api/environment'
11
- require 'aruba/api/filesystem'
12
- require 'aruba/api/text'
13
- require 'aruba/api/bundler'
10
+ require "aruba/api/environment"
11
+ require "aruba/api/filesystem"
12
+ require "aruba/api/text"
13
+ require "aruba/api/bundler"
14
14
 
15
- Aruba.platform.require_matching_files('../matchers/**/*.rb', __FILE__)
15
+ Aruba.platform.require_matching_files("../matchers/**/*.rb", __FILE__)
16
16
 
17
17
  # Aruba
18
18
  module Aruba
@@ -1,4 +1,4 @@
1
- require 'aruba/api/environment'
1
+ require "aruba/api/environment"
2
2
 
3
3
  module Aruba
4
4
  module Api
@@ -1,7 +1,7 @@
1
- require 'pathname'
1
+ require "pathname"
2
2
 
3
- require 'aruba/platform'
4
- require 'aruba/command'
3
+ require "aruba/platform"
4
+ require "aruba/command"
5
5
 
6
6
  # require 'win32/file' if File::ALT_SEPARATOR
7
7
 
@@ -22,7 +22,7 @@ module Aruba
22
22
  def which(program, path = nil)
23
23
  with_environment do
24
24
  # ENV is set within this block
25
- path = ENV['PATH'] if path.nil?
25
+ path = ENV["PATH"] if path.nil?
26
26
 
27
27
  Aruba.platform.which(program, path)
28
28
  end
@@ -35,7 +35,7 @@ module Aruba
35
35
  def pipe_in_file(file_name)
36
36
  file_name = expand_path(file_name)
37
37
 
38
- File.open(file_name, 'r').each_line do |line|
38
+ File.open(file_name, "r").each_line do |line|
39
39
  last_command_started.write(line)
40
40
  end
41
41
  end
@@ -152,7 +152,7 @@ module Aruba
152
152
 
153
153
  unless command.interactive?
154
154
  raise NotImplementedError,
155
- 'Running interactively is not supported with this process launcher.'
155
+ "Running interactively is not supported with this process launcher."
156
156
  end
157
157
 
158
158
  start_command(command)
@@ -232,7 +232,7 @@ module Aruba
232
232
  @commands << cmd
233
233
 
234
234
  environment = aruba.environment
235
- working_directory = expand_path('.')
235
+ working_directory = expand_path(".")
236
236
  event_bus = aruba.event_bus
237
237
 
238
238
  cmd = Aruba.platform.detect_ruby(cmd)
@@ -1,7 +1,7 @@
1
- require 'rspec/expectations'
2
- require 'aruba/runtime'
3
- require 'aruba/errors'
4
- require 'aruba/setup'
1
+ require "rspec/expectations"
2
+ require "aruba/runtime"
3
+ require "aruba/errors"
4
+ require "aruba/setup"
5
5
 
6
6
  # Aruba
7
7
  module Aruba
@@ -38,8 +38,8 @@ module Aruba
38
38
  # @yield
39
39
  # The block which should be run in current directory
40
40
  def in_current_directory(&block)
41
- create_directory '.' unless directory?('.')
42
- cd('.', &block)
41
+ create_directory "." unless directory?(".")
42
+ cd(".", &block)
43
43
  end
44
44
 
45
45
  # Switch to directory
@@ -64,9 +64,9 @@ module Aruba
64
64
  "#{expand_path(dir)} is not a directory or does not exist."
65
65
  end
66
66
 
67
- old_directory = expand_path('.')
67
+ old_directory = expand_path(".")
68
68
  aruba.current_directory << dir
69
- new_directory = expand_path('.')
69
+ new_directory = expand_path(".")
70
70
 
71
71
  aruba.event_bus.notify Events::ChangedWorkingDirectory.new(old: old_directory,
72
72
  new: new_directory)
@@ -78,8 +78,8 @@ module Aruba
78
78
  Aruba.platform.chdir real_new_directory
79
79
 
80
80
  result = with_environment(
81
- 'OLDPWD' => old_dir,
82
- 'PWD' => real_new_directory,
81
+ "OLDPWD" => old_dir,
82
+ "PWD" => real_new_directory,
83
83
  &block
84
84
  )
85
85
  ensure
@@ -94,9 +94,9 @@ module Aruba
94
94
  raise ArgumentError, "#{expand_path(dir)} is not a directory or does not exist."
95
95
  end
96
96
 
97
- old_directory = expand_path('.')
97
+ old_directory = expand_path(".")
98
98
  aruba.current_directory << dir
99
- new_directory = expand_path('.')
99
+ new_directory = expand_path(".")
100
100
 
101
101
  aruba.event_bus.notify Events::ChangedWorkingDirectory.new(old: old_directory,
102
102
  new: new_directory)
@@ -143,7 +143,7 @@ module Aruba
143
143
  def expand_path(file_name, dir_string = nil)
144
144
  unless file_name.is_a?(String) && !file_name.empty?
145
145
  message = "Filename #{file_name} needs to be a string." \
146
- ' It cannot be nil or empty either. '\
146
+ " It cannot be nil or empty either. "\
147
147
  "Please use `expand_path('.')` if you want the current directory to be expanded."
148
148
 
149
149
  raise ArgumentError, message
@@ -152,7 +152,7 @@ module Aruba
152
152
  unless Aruba.platform.directory? File.join(aruba.config.root_directory,
153
153
  aruba.config.working_directory)
154
154
  raise "Aruba's working directory does not exist." \
155
- ' Maybe you forgot to run `setup_aruba` before using its API.'
155
+ " Maybe you forgot to run `setup_aruba` before using its API."
156
156
  end
157
157
 
158
158
  prefix = file_name[0]
@@ -162,22 +162,22 @@ module Aruba
162
162
  path = File.join(*[aruba.fixtures_directory, rest].compact)
163
163
  unless Aruba.platform.exist? path
164
164
  aruba_fixture_candidates = aruba.config.fixtures_directories
165
- .map { |p| format('"%s"', p) }.join(', ')
165
+ .map { |p| format('"%s"', p) }.join(", ")
166
166
 
167
167
  raise ArgumentError,
168
168
  "Fixture \"#{rest}\" does not exist" \
169
169
  " in fixtures directory \"#{aruba.fixtures_directory}\"." \
170
- ' This was the one we found first on your system from all possible' \
170
+ " This was the one we found first on your system from all possible" \
171
171
  " candidates: #{aruba_fixture_candidates}."
172
172
  end
173
173
 
174
174
  path
175
- elsif prefix == '~'
175
+ elsif prefix == "~"
176
176
  path = with_environment do
177
177
  File.expand_path(file_name)
178
178
  end
179
179
 
180
- raise ArgumentError, 'Expanding "~/" to "/" is not allowed' if path == '/'
180
+ raise ArgumentError, 'Expanding "~/" to "/" is not allowed' if path == "/"
181
181
 
182
182
  unless Aruba.platform.absolute_path? path
183
183
  raise ArgumentError,
@@ -192,8 +192,8 @@ module Aruba
192
192
  aruba.logger.warn \
193
193
  "Aruba's `expand_path` method was called with an absolute path" \
194
194
  " at #{caller_file_line}, which is not recommended." \
195
- ' Change the call to pass a relative path or set '\
196
- '`config.allow_absolute_paths = true` to silence this warning'
195
+ " Change the call to pass a relative path or set "\
196
+ "`config.allow_absolute_paths = true` to silence this warning"
197
197
  end
198
198
  file_name
199
199
  else
@@ -1,4 +1,4 @@
1
- require 'aruba/platform'
1
+ require "aruba/platform"
2
2
 
3
3
  # Aruba
4
4
  module Aruba
@@ -96,7 +96,7 @@ module Aruba
96
96
 
97
97
  environment_change = { old: old_environment,
98
98
  new: new_environment,
99
- changed: { name: name, value: '' } }
99
+ changed: { name: name, value: "" } }
100
100
  aruba.event_bus.notify Events::ChangedEnvironmentVariable.new(environment_change)
101
101
 
102
102
  self
@@ -1,10 +1,10 @@
1
- require 'pathname'
1
+ require "pathname"
2
2
 
3
- require 'aruba/platform'
3
+ require "aruba/platform"
4
4
 
5
- Aruba.platform.require_matching_files('../matchers/file/*.rb', __FILE__)
6
- Aruba.platform.require_matching_files('../matchers/directory/*.rb', __FILE__)
7
- Aruba.platform.require_matching_files('../matchers/path/*.rb', __FILE__)
5
+ Aruba.platform.require_matching_files("../matchers/file/*.rb", __FILE__)
6
+ Aruba.platform.require_matching_files("../matchers/directory/*.rb", __FILE__)
7
+ Aruba.platform.require_matching_files("../matchers/path/*.rb", __FILE__)
8
8
 
9
9
  # Aruba
10
10
  module Aruba
@@ -67,7 +67,7 @@ module Aruba
67
67
  # @return [Array]
68
68
  # List of files and directories
69
69
  def all_paths
70
- list('.').map { |path| expand_path(path) }
70
+ list(".").map { |path| expand_path(path) }
71
71
  end
72
72
 
73
73
  # Return all existing files in current directory
@@ -75,7 +75,7 @@ module Aruba
75
75
  # @return [Array]
76
76
  # List of files
77
77
  def all_files
78
- list('.').select { |p| file? p }.map { |p| expand_path(p) }
78
+ list(".").select { |p| file? p }.map { |p| expand_path(p) }
79
79
  end
80
80
 
81
81
  # Return all existing directories in current directory
@@ -83,7 +83,7 @@ module Aruba
83
83
  # @return [Array]
84
84
  # List of files
85
85
  def all_directories
86
- list('.').select { |p| directory? p }.map { |p| expand_path(p) }
86
+ list(".").select { |p| directory? p }.map { |p| expand_path(p) }
87
87
  end
88
88
 
89
89
  # Create directory object
@@ -108,8 +108,8 @@ module Aruba
108
108
  %(Only directories are supported. Path "#{name}" is not a directory.)
109
109
  end
110
110
 
111
- existing_files = Dir.glob(expand_path(File.join(name, '**', '*')))
112
- current_working_directory = Pathname.new(expand_path('.'))
111
+ existing_files = Dir.glob(expand_path(File.join(name, "**", "*")))
112
+ current_working_directory = Pathname.new(expand_path("."))
113
113
 
114
114
  existing_files.map do |d|
115
115
  Pathname.new(d).relative_path_from(current_working_directory).to_s
@@ -191,7 +191,7 @@ module Aruba
191
191
  end
192
192
 
193
193
  if source.count > 1 && exist?(destination) && !directory?(destination)
194
- raise ArgumentError, 'Multiples sources can only be copied to a directory'
194
+ raise ArgumentError, "Multiples sources can only be copied to a directory"
195
195
  end
196
196
 
197
197
  source_paths = source.map { |f| expand_path(f) }
@@ -240,7 +240,7 @@ module Aruba
240
240
  end
241
241
 
242
242
  if source.count > 1 && exist?(destination) && !directory?(destination)
243
- raise ArgumentError, 'Multiple sources can only be copied to a directory'
243
+ raise ArgumentError, "Multiple sources can only be copied to a directory"
244
244
  end
245
245
 
246
246
  source_paths = source.map { |f| expand_path(f) }
@@ -326,8 +326,35 @@ module Aruba
326
326
  def append_to_file(file_name, file_content)
327
327
  file_name = expand_path(file_name)
328
328
 
329
- Aruba.platform.mkdir(File.dirname(file_name))
330
- File.open(file_name, 'a') { |f| f << file_content }
329
+ unless File.exist? file_name
330
+ Aruba.platform.deprecated("The ability to call #append_to_file with a file that" \
331
+ " does not exist is deprecated and will be removed in" \
332
+ " Aruba 2.0.")
333
+ Aruba.platform.mkdir(File.dirname(file_name))
334
+ end
335
+ File.open(file_name, "a") { |f| f << file_content }
336
+ end
337
+
338
+ # Append lines to a (text) file. This will make sure a newline is present
339
+ # between the old content and the new.
340
+ #
341
+ # @param [String] file_name
342
+ # The name of the file to be used
343
+ #
344
+ # @param [String] file_content
345
+ # The lines which should be appended to file
346
+ def append_lines_to_file(file_name, file_content)
347
+ file_name = expand_path(file_name)
348
+
349
+ last = File.open(file_name) do |f|
350
+ f.seek(-3, IO::SEEK_END)
351
+ f.read
352
+ end
353
+
354
+ File.open(file_name, "a") do |f|
355
+ f << "\n" unless last.end_with? "\n"
356
+ f << file_content
357
+ end
331
358
  end
332
359
 
333
360
  # Create a directory in current directory