aruba 0.14.14 → 1.0.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/.cucumberproignore +3 -0
- data/.github/ISSUE_TEMPLATE.md +48 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +41 -0
- data/.gitignore +1 -0
- data/.rspec +1 -1
- data/.rubocop.yml +20 -181
- data/.rubocop_todo.yml +262 -0
- data/.simplecov +7 -5
- data/.travis.yml +53 -28
- data/.yardopts +3 -0
- data/CHANGELOG.md +301 -2
- data/CONTRIBUTING.md +247 -45
- data/Dockerfile +67 -0
- data/Gemfile +5 -114
- data/LICENSE +1 -1
- data/README.md +57 -180
- data/Rakefile +63 -32
- data/appveyor.yml +8 -11
- data/aruba.gemspec +47 -41
- data/bin/console +7 -0
- data/bin/test +9 -0
- data/cucumber.yml +4 -24
- data/doc/dependency_decisions.yml +35 -13
- data/docker-compose.yml +26 -0
- data/{bin → exe}/aruba +1 -1
- data/fixtures/cli-app/Rakefile +1 -1
- data/fixtures/cli-app/bin/aruba-test-cli +1 -1
- data/fixtures/cli-app/cli-app.gemspec +1 -2
- data/fixtures/cli-app/features/support/aruba.rb +1 -0
- data/fixtures/cli-app/features/support/env.rb +1 -1
- data/fixtures/cli-app/lib/cli/app/suppress_simple_cov_output.rb +3 -3
- data/fixtures/cli-app/lib/cli/app/version.rb +1 -1
- data/fixtures/cli-app/lib/cli/app.rb +1 -5
- data/fixtures/cli-app/spec/spec_helper.rb +4 -7
- data/fixtures/empty-app/Rakefile +1 -1
- data/fixtures/empty-app/cli-app.gemspec +1 -2
- data/fixtures/empty-app/lib/cli/app/version.rb +1 -1
- data/fixtures/getting-started-app/Gemfile +1 -1
- data/lib/aruba/api/commands.rb +85 -143
- data/lib/aruba/api/core.rb +48 -41
- data/lib/aruba/api/environment.rb +16 -7
- data/lib/aruba/api/filesystem.rb +43 -30
- data/lib/aruba/api/text.rb +3 -9
- data/lib/aruba/api.rb +6 -11
- data/lib/aruba/aruba_path.rb +27 -89
- data/lib/aruba/basic_configuration.rb +4 -24
- data/lib/aruba/cli.rb +1 -1
- data/lib/aruba/command.rb +2 -0
- data/lib/aruba/config/jruby.rb +1 -1
- data/lib/aruba/config_wrapper.rb +1 -1
- data/lib/aruba/configuration.rb +92 -0
- data/lib/aruba/console/help.rb +1 -7
- data/lib/aruba/console.rb +5 -5
- data/lib/aruba/contracts/absolute_path.rb +2 -2
- data/lib/aruba/contracts/relative_path.rb +2 -2
- data/lib/aruba/cucumber/command.rb +133 -92
- data/lib/aruba/cucumber/environment.rb +1 -1
- data/lib/aruba/cucumber/file.rb +21 -23
- data/lib/aruba/cucumber/hooks.rb +18 -13
- data/lib/aruba/cucumber/testing_frameworks.rb +74 -50
- data/lib/aruba/cucumber.rb +0 -6
- data/lib/aruba/event_bus/name_resolver.rb +5 -16
- data/lib/aruba/hooks.rb +1 -1
- data/lib/aruba/in_config_wrapper.rb +5 -1
- data/lib/aruba/initializer.rb +36 -42
- data/lib/aruba/matchers/base/base_matcher.rb +2 -2
- data/lib/aruba/matchers/base/message_indenter.rb +19 -0
- data/lib/aruba/matchers/base/object_formatter.rb +2 -9
- data/lib/aruba/matchers/collection/include_an_object.rb +7 -9
- data/lib/aruba/matchers/command/be_successfully_executed.rb +6 -4
- data/lib/aruba/matchers/command/have_exit_status.rb +14 -4
- data/lib/aruba/matchers/command/have_finished_in_time.rb +3 -5
- data/lib/aruba/matchers/command/have_output.rb +10 -5
- data/lib/aruba/matchers/command/have_output_on_stderr.rb +2 -2
- data/lib/aruba/matchers/command/have_output_on_stdout.rb +2 -2
- data/lib/aruba/matchers/command/have_output_size.rb +2 -2
- data/lib/aruba/matchers/directory/be_an_existing_directory.rb +5 -7
- data/lib/aruba/matchers/directory/have_sub_directory.rb +4 -6
- data/lib/aruba/matchers/file/be_a_command_found_in_path.rb +2 -4
- data/lib/aruba/matchers/file/be_an_existing_executable.rb +4 -6
- data/lib/aruba/matchers/file/be_an_existing_file.rb +5 -7
- data/lib/aruba/matchers/file/have_file_content.rb +4 -4
- data/lib/aruba/matchers/file/have_file_size.rb +6 -8
- data/lib/aruba/matchers/file/have_same_file_content.rb +5 -8
- data/lib/aruba/matchers/path/a_path_matching_pattern.rb +2 -4
- data/lib/aruba/matchers/path/be_an_absolute_path.rb +3 -5
- data/lib/aruba/matchers/path/be_an_existing_path.rb +4 -6
- data/lib/aruba/matchers/path/have_permissions.rb +6 -8
- data/lib/aruba/matchers/string/include_output_string.rb +8 -10
- data/lib/aruba/matchers/string/match_output_string.rb +9 -11
- data/lib/aruba/matchers/string/output_string_eq.rb +8 -10
- data/lib/aruba/platform.rb +0 -8
- data/lib/aruba/platforms/announcer.rb +30 -72
- data/lib/aruba/platforms/aruba_file_creator.rb +2 -6
- data/lib/aruba/platforms/aruba_fixed_size_file_creator.rb +2 -2
- data/lib/aruba/platforms/aruba_logger.rb +23 -7
- data/lib/aruba/platforms/command_monitor.rb +11 -103
- data/lib/aruba/platforms/determine_disk_usage.rb +56 -14
- data/lib/aruba/platforms/filesystem_status.rb +10 -14
- data/lib/aruba/platforms/local_environment.rb +2 -2
- data/lib/aruba/platforms/simple_table.rb +3 -11
- data/lib/aruba/platforms/unix_command_string.rb +7 -11
- data/lib/aruba/platforms/unix_environment_variables.rb +18 -27
- data/lib/aruba/platforms/unix_platform.rb +16 -50
- data/lib/aruba/platforms/unix_which.rb +2 -1
- data/lib/aruba/platforms/windows_command_string.rb +15 -10
- data/lib/aruba/platforms/windows_environment_variables.rb +43 -44
- data/lib/aruba/platforms/windows_platform.rb +4 -0
- data/lib/aruba/platforms/windows_which.rb +4 -3
- data/lib/aruba/processes/basic_process.rb +18 -20
- data/lib/aruba/processes/debug_process.rb +12 -3
- data/lib/aruba/processes/in_process.rb +17 -8
- data/lib/aruba/processes/spawn_process.rb +36 -39
- data/lib/aruba/rspec.rb +14 -36
- data/lib/aruba/runtime.rb +3 -6
- data/lib/aruba/setup.rb +1 -1
- data/lib/aruba/tasks/docker_helpers.rb +154 -0
- data/lib/aruba/version.rb +1 -1
- metadata +190 -242
- data/features/.nav +0 -72
- data/features/01_getting_started_with_aruba/cleanup_working_directory.feature +0 -57
- data/features/01_getting_started_with_aruba/run_commands.feature +0 -217
- data/features/01_getting_started_with_aruba/supported_testing_frameworks.feature +0 -88
- data/features/02_configure_aruba/activate_announcer_on_command_failure.feature +0 -38
- data/features/02_configure_aruba/basics.feature +0 -151
- data/features/02_configure_aruba/command_runtime_environment.feature +0 -129
- data/features/02_configure_aruba/console_history_file.feature +0 -38
- data/features/02_configure_aruba/exit_timeout.feature +0 -60
- data/features/02_configure_aruba/fixtures_directories.feature +0 -38
- data/features/02_configure_aruba/fixtures_path_prefix.feature +0 -23
- data/features/02_configure_aruba/home_directory.feature +0 -80
- data/features/02_configure_aruba/io_timeout.feature +0 -30
- data/features/02_configure_aruba/keep_ansi.feature +0 -30
- data/features/02_configure_aruba/log_level.feature +0 -38
- data/features/02_configure_aruba/physical_block_size.feature +0 -53
- data/features/02_configure_aruba/remove_ansi_escape_sequences.feature +0 -38
- data/features/02_configure_aruba/root_directory.feature +0 -30
- data/features/02_configure_aruba/startup_wait_time.feature +0 -48
- data/features/02_configure_aruba/working_directory.feature +0 -38
- data/features/03_testing_frameworks/cucumber/announce_information_for_troubleshooting.feature +0 -306
- data/features/03_testing_frameworks/cucumber/disable_bunder.feature +0 -18
- data/features/03_testing_frameworks/cucumber/steps/command/check_for_exit_statuses.feature +0 -136
- data/features/03_testing_frameworks/cucumber/steps/command/check_output_of_command.feature +0 -514
- data/features/03_testing_frameworks/cucumber/steps/command/check_stderr_of_command.feature +0 -68
- data/features/03_testing_frameworks/cucumber/steps/command/check_stdout_of_command.feature +0 -109
- data/features/03_testing_frameworks/cucumber/steps/command/debug_your_command_in_aruba.feature +0 -118
- data/features/03_testing_frameworks/cucumber/steps/command/run_a_command.feature +0 -66
- data/features/03_testing_frameworks/cucumber/steps/command/run_command_in_process.feature +0 -485
- data/features/03_testing_frameworks/cucumber/steps/command/run_command_interactively.feature +0 -90
- data/features/03_testing_frameworks/cucumber/steps/command/run_commands_which_require_a_shell.feature +0 -79
- data/features/03_testing_frameworks/cucumber/steps/command/send_signal_to_command.feature +0 -83
- data/features/03_testing_frameworks/cucumber/steps/command/stop_command.feature +0 -285
- data/features/03_testing_frameworks/cucumber/steps/environment/append_environment_variable.feature +0 -52
- data/features/03_testing_frameworks/cucumber/steps/environment/modify_home_variable_for_testing.feature +0 -62
- data/features/03_testing_frameworks/cucumber/steps/environment/prepend_environment_variable.feature +0 -52
- data/features/03_testing_frameworks/cucumber/steps/environment/set_environment_variable.feature +0 -49
- data/features/03_testing_frameworks/cucumber/steps/filesystem/append_to_file.feature +0 -45
- data/features/03_testing_frameworks/cucumber/steps/filesystem/cd_to_directory.feature +0 -33
- data/features/03_testing_frameworks/cucumber/steps/filesystem/check_existence_of_directory.feature +0 -57
- data/features/03_testing_frameworks/cucumber/steps/filesystem/check_existence_of_file.feature +0 -43
- data/features/03_testing_frameworks/cucumber/steps/filesystem/check_file_content.feature +0 -143
- data/features/03_testing_frameworks/cucumber/steps/filesystem/check_non_existence_of_directory.feature +0 -69
- data/features/03_testing_frameworks/cucumber/steps/filesystem/check_non_existence_of_file.feature +0 -80
- data/features/03_testing_frameworks/cucumber/steps/filesystem/check_permissions_of_file.feature +0 -39
- data/features/03_testing_frameworks/cucumber/steps/filesystem/compare_files.feature +0 -42
- data/features/03_testing_frameworks/cucumber/steps/filesystem/copy_file_or_directory.feature +0 -45
- data/features/03_testing_frameworks/cucumber/steps/filesystem/create_directory.feature +0 -57
- data/features/03_testing_frameworks/cucumber/steps/filesystem/create_file.feature +0 -76
- data/features/03_testing_frameworks/cucumber/steps/filesystem/move_file_or_directory.feature +0 -44
- data/features/03_testing_frameworks/cucumber/steps/filesystem/overwrite_file.feature +0 -72
- data/features/03_testing_frameworks/cucumber/steps/filesystem/remove_directory.feature +0 -38
- data/features/03_testing_frameworks/cucumber/steps/filesystem/remove_file.feature +0 -38
- data/features/03_testing_frameworks/cucumber/steps/filesystem/use_fixtures_for_setup_test.feature +0 -77
- data/features/03_testing_frameworks/rspec/hooks/define_after_hook_for_commands.feature +0 -43
- data/features/03_testing_frameworks/rspec/hooks/define_before_hook_for_commands.feature +0 -71
- data/features/03_testing_frameworks/rspec/setup_aruba_for_rspec.feature +0 -179
- data/features/04_aruba_api/command/find_a_started_command.feature +0 -83
- data/features/04_aruba_api/command/find_command_in_PATH.feature +0 -37
- data/features/04_aruba_api/command/read_stderr_of_command.feature +0 -46
- data/features/04_aruba_api/command/read_stdout_of_command.feature +0 -46
- data/features/04_aruba_api/command/run_command.feature +0 -423
- data/features/04_aruba_api/command/run_simple.feature +0 -254
- data/features/04_aruba_api/command/send_signal_to_command.feature +0 -53
- data/features/04_aruba_api/command/stop_all_commands.feature +0 -57
- data/features/04_aruba_api/command/stop_single_command.feature +0 -132
- data/features/04_aruba_api/command/terminate_all_commands.feature +0 -57
- data/features/04_aruba_api/command/use_last_command_started.feature +0 -50
- data/features/04_aruba_api/command/use_last_command_stopped.feature +0 -89
- data/features/04_aruba_api/core/expand_path.feature +0 -88
- data/features/04_aruba_api/environment/append_environment_variable.feature +0 -128
- data/features/04_aruba_api/environment/delete_environment_variable.feature +0 -63
- data/features/04_aruba_api/environment/prepend_environment_variable.feature +0 -128
- data/features/04_aruba_api/environment/set_environment_variable.feature +0 -376
- data/features/04_aruba_api/filesystem/cd_to_directory.feature +0 -184
- data/features/04_aruba_api/filesystem/check_existence_file_or_directory.feature +0 -62
- data/features/04_aruba_api/filesystem/check_if_path_is_absolute.feature +0 -48
- data/features/04_aruba_api/filesystem/check_if_path_is_directory.feature +0 -53
- data/features/04_aruba_api/filesystem/check_if_path_is_file.feature +0 -54
- data/features/04_aruba_api/filesystem/check_if_path_is_relative.feature +0 -48
- data/features/04_aruba_api/filesystem/create_directory.feature +0 -57
- data/features/04_aruba_api/filesystem/move_file_or_directory.feature +0 -119
- data/features/04_aruba_api/filesystem/report_disk_usage.feature +0 -152
- data/features/04_aruba_api/filesystem/use_fixtures.feature +0 -104
- data/features/04_aruba_api/text/extract_text.feature +0 -87
- data/features/04_aruba_api/text/replace_variables.feature +0 -45
- data/features/04_aruba_api/text/sanitize_text.feature +0 -228
- data/features/04_aruba_api/text/unescape_text.feature +0 -127
- data/features/05_use_rspec_matchers/command/check_timeouts.feature +0 -48
- data/features/05_use_rspec_matchers/directory/have_sub_directory.feature +0 -110
- data/features/05_use_rspec_matchers/file/be_a_command_found_in_path.feature +0 -115
- data/features/05_use_rspec_matchers/file/be_existing_executable.feature +0 -88
- data/features/05_use_rspec_matchers/file/be_existing_file.feature +0 -82
- data/features/05_use_rspec_matchers/file/have_file_content.feature +0 -123
- data/features/05_use_rspec_matchers/file/have_file_size.feature +0 -107
- data/features/05_use_rspec_matchers/path/be_an_absolute_path.feature +0 -74
- data/features/05_use_rspec_matchers/path/be_an_existing_path.feature +0 -97
- data/features/05_use_rspec_matchers/path/have_permissions.feature +0 -118
- data/features/06_use_aruba_cli/initialize_project_with_aruba.feature +0 -79
- data/features/06_use_aruba_cli/open_console.feature +0 -55
- data/features/08_other/improve_performance_if_using_jruby.feature +0 -37
- data/features/step_definitions/hooks.rb +0 -146
- data/features/support/aruba.rb +0 -7
- data/features/support/env.rb +0 -33
- data/features/support/simplecov_setup.rb +0 -11
- data/fixtures/spawn_process/stderr.sh +0 -3
- data/lib/aruba/api/deprecated.rb +0 -1155
- data/lib/aruba/config.rb +0 -107
- data/lib/aruba/cucumber/core.rb +0 -5
- data/lib/aruba/cucumber/deprecated.rb +0 -93
- data/lib/aruba/cucumber/rvm.rb +0 -3
- data/lib/aruba/in_process.rb +0 -16
- data/lib/aruba/jruby.rb +0 -4
- data/lib/aruba/matchers/deprecated/file.rb +0 -17
- data/lib/aruba/matchers/deprecated.rb +0 -1
- data/lib/aruba/matchers/path/match_path_pattern.rb +0 -41
- data/lib/aruba/matchers/rspec_matcher_include_regexp.rb +0 -25
- data/lib/aruba/platforms/disk_usage_calculator.rb +0 -20
- data/lib/aruba/reporting.rb +0 -126
- data/lib/aruba/spawn_process.rb +0 -14
- data/script/bootstrap +0 -24
- data/script/console +0 -16
- data/script/test +0 -3
- data/spec/aruba/api/bundler_spec.rb +0 -15
- data/spec/aruba/api/commands_spec.rb +0 -30
- data/spec/aruba/api/core_spec.rb +0 -184
- data/spec/aruba/api/deprecated_spec.rb +0 -421
- data/spec/aruba/api/filesystem_spec.rb +0 -746
- data/spec/aruba/api/runtime_spec.rb +0 -28
- data/spec/aruba/api_spec.rb +0 -73
- data/spec/aruba/aruba_path_spec.rb +0 -103
- data/spec/aruba/basic_configuration_spec.rb +0 -5
- data/spec/aruba/configuration_spec.rb +0 -5
- data/spec/aruba/hooks_spec.rb +0 -17
- data/spec/aruba/in_config_wrapper_spec.rb +0 -25
- data/spec/aruba/jruby_spec.rb +0 -73
- data/spec/aruba/matchers/command/have_output_size_spec.rb +0 -25
- data/spec/aruba/matchers/command_spec.rb +0 -174
- data/spec/aruba/matchers/deprecated_spec.rb +0 -120
- data/spec/aruba/matchers/directory_spec.rb +0 -57
- data/spec/aruba/matchers/file_spec.rb +0 -208
- data/spec/aruba/matchers/path_spec.rb +0 -58
- data/spec/aruba/platform/simple_table_spec.rb +0 -23
- data/spec/aruba/platform/windows_environment_variables_spec.rb +0 -500
- data/spec/aruba/platforms/unix_command_string_spec.rb +0 -17
- data/spec/aruba/platforms/windows_command_string_spec.rb +0 -22
- data/spec/aruba/processes/spawn_process_spec.rb +0 -112
- data/spec/aruba/rspec_spec.rb +0 -15
- data/spec/aruba/runtime_spec.rb +0 -29
- data/spec/event_bus/name_resolver_spec.rb +0 -68
- data/spec/event_bus_spec.rb +0 -158
- data/spec/spec_helper.rb +0 -22
- data/spec/support/configs/.keep +0 -0
- data/spec/support/configs/aruba.rb +0 -5
- data/spec/support/configs/pry.rb +0 -3
- data/spec/support/configs/rspec.rb +0 -15
- data/spec/support/helpers/.keep +0 -0
- data/spec/support/helpers/reporting.rb +0 -44
- data/spec/support/matchers/.keep +0 -0
- data/spec/support/matchers/option.rb +0 -35
- data/spec/support/shared_contexts/.keep +0 -0
- data/spec/support/shared_contexts/aruba.rb +0 -49
- data/spec/support/shared_examples/.keep +0 -0
- data/spec/support/shared_examples/configuration.rb +0 -116
- data/spec/support/shared_examples/directory.rb +0 -7
- data/spec/support/shared_examples/file.rb +0 -7
- data/templates/css/console.css +0 -24
- data/templates/css/filesystem.css +0 -42
- data/templates/css/pygments-autumn.css +0 -59
- data/templates/files.erb +0 -14
- data/templates/images/LICENSE +0 -22
- data/templates/images/folder.png +0 -0
- data/templates/images/page_white.png +0 -0
- data/templates/images/page_white_gherkin.png +0 -0
- data/templates/images/page_white_ruby.png +0 -0
- data/templates/index.erb +0 -20
- data/templates/js/filesystem.js +0 -5
- data/templates/js/jquery-1.11.3.min.js +0 -5
- data/templates/main.erb +0 -34
data/CONTRIBUTING.md
CHANGED
|
@@ -1,71 +1,273 @@
|
|
|
1
|
-
|
|
1
|
+
# Contributing to the Cucumber Aruba Project
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## Introduction
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
* Do you have an idea for a new feature? Then don't expect it to be implemented unless you or someone else sends a [pull request](https://help.github.com/articles/using-pull-requests). You might be better to start a discussion on [the google group](http://groups.google.com/group/cukes).
|
|
7
|
-
* Reporting a bug? Please tell us:
|
|
8
|
-
* which version of Aruba you're using
|
|
9
|
-
* which version of Ruby you're using.
|
|
10
|
-
* How to reproduce it. Bugs with a failing test in a [pull request](https://help.github.com/articles/using-pull-requests) get fixed much quicker. Some bugs may never be fixed.
|
|
11
|
-
* Want to paste some code or output? Put \`\`\` on a line above and below your code/output. See [GFM](https://help.github.com/articles/github-flavored-markdown)'s *Fenced Code Blocks* for details.
|
|
12
|
-
* We love [pull requests](https://help.github.com/articles/using-pull-requests). But if you don't have a test to go with it we probably won't merge it.
|
|
5
|
+
We would love to get help from you as a **user** and a **contributor**.
|
|
13
6
|
|
|
14
|
-
|
|
7
|
+
### As a **User**
|
|
15
8
|
|
|
16
|
-
|
|
9
|
+
* Tell us how "Aruba" works for you
|
|
10
|
+
* Spread the word if you like our work and please tell us if something is (utterly) wrong
|
|
11
|
+
* Encourage people in testing their code and keep communicating their needs
|
|
17
12
|
|
|
18
|
-
|
|
13
|
+
### As a **Contributor**
|
|
14
|
+
|
|
15
|
+
* Send us bug fixes
|
|
16
|
+
* Add new features to the code
|
|
17
|
+
* Discuss changes
|
|
18
|
+
* Add missing documentation
|
|
19
|
+
* Improve our test coverage
|
|
20
|
+
|
|
21
|
+
The rest of this document is a guide for those maintaining Aruba, and others
|
|
22
|
+
who would like to submit patches.
|
|
23
|
+
|
|
24
|
+
## Contributing to the Aruba project
|
|
25
|
+
|
|
26
|
+
It would be great if all people who want to contribute to the Aruba project
|
|
27
|
+
— contributors and maintainers — follow the guidelines in this
|
|
28
|
+
section. There are also "Getting started" sections both for
|
|
29
|
+
[contributors](#getting-started-as-a-contributor) and
|
|
30
|
+
[maintainers](#getting-started-as-a-maintainer).
|
|
31
|
+
|
|
32
|
+
### Issues
|
|
33
|
+
|
|
34
|
+
About to create a new GitHub Issue? We appreciate that. But before you do,
|
|
35
|
+
please learn our basic rules:
|
|
36
|
+
|
|
37
|
+
* This is not a support forum. If you have a question, please go to
|
|
38
|
+
[The Cukes Google Group](http://groups.google.com/group/cukes).
|
|
39
|
+
* Do you have an idea for a new feature? Then don't expect it to be implemented
|
|
40
|
+
unless you or someone else submits a
|
|
41
|
+
[pull request](https://help.github.com/articles/using-pull-requests). It
|
|
42
|
+
might be better to start a discussion on
|
|
43
|
+
[the Google Group](http://groups.google.com/group/cukes).
|
|
44
|
+
* Reporting a bug? Follow our comments in the Issue Template, which is
|
|
45
|
+
pre-filled when you create the new GitHub Issue.
|
|
46
|
+
* We love [pull requests](https://help.github.com/articles/using-pull-requests).
|
|
47
|
+
The same here: Please consider our comments within the pull request template.
|
|
48
|
+
|
|
49
|
+
### Pull Requests
|
|
50
|
+
|
|
51
|
+
#### Contributors
|
|
52
|
+
|
|
53
|
+
Please...
|
|
19
54
|
|
|
20
55
|
* Fork the project. Make a branch for your change.
|
|
21
|
-
* Make your feature addition or bug fix
|
|
22
|
-
|
|
23
|
-
*
|
|
24
|
-
|
|
25
|
-
|
|
56
|
+
* Make your feature addition or bug fix — if you're unsure if your
|
|
57
|
+
addition will be accepted, open a GitHub Issue for discussion first
|
|
58
|
+
* Make sure your patch is well covered by tests. We don't accept changes that
|
|
59
|
+
aren't tested.
|
|
60
|
+
* Do not change the `Rakefile`, gem version number in `version.rb`, or
|
|
61
|
+
[`CHANGELOG.md`][].
|
|
62
|
+
(If you want to have your own version, that is fine but bump version in a
|
|
63
|
+
separate commit, so that we can ignore that commit when we merge your change.)
|
|
64
|
+
* Make sure your pull request complies with our development style guidelines.
|
|
65
|
+
* Rebase your branch if needed. This reduces clutter in our git history.
|
|
66
|
+
* Make sure you don't break other people's code. On major changes: First
|
|
67
|
+
deprecate, then bump major version, then make breaking changes,
|
|
68
|
+
* Split up your changes into reviewable git commits which combine all
|
|
69
|
+
lines/files relevant for a single change.
|
|
26
70
|
* Send us a pull request.
|
|
27
71
|
|
|
28
|
-
|
|
72
|
+
#### Maintainers
|
|
73
|
+
|
|
74
|
+
* Use pull requests for larger or controversial changes made by yourself or
|
|
75
|
+
changes you might expected to break the build.
|
|
76
|
+
* Commit smaller changes directly to master, e.g. fixing typos, adding tests or
|
|
77
|
+
adding documentation.
|
|
78
|
+
* Update [`CHANGELOG.md`][] when a pull request is merged.
|
|
79
|
+
* Make sure all tests are green before merging a pull request.
|
|
80
|
+
|
|
81
|
+
### Development style guidelines
|
|
82
|
+
|
|
83
|
+
* We try to follow the recommendations in the
|
|
84
|
+
[Ruby Community Style Guide][] and use
|
|
85
|
+
[`rubocop`][] to "enforce" it. Please see
|
|
86
|
+
[.rubocop.yml][] for exceptions.
|
|
87
|
+
* There should be `action` methods and `getter` methods in Aruba. Only the
|
|
88
|
+
latter should return values. Please expect the first ones to return `nil`.
|
|
89
|
+
* Add documentation — aka acceptance tests — for new features
|
|
90
|
+
using Aruba's Cucumber steps. Place them somewhere suitable in [features/].
|
|
91
|
+
* Add unit tests where needed to cover edge cases which are not (directly)
|
|
92
|
+
relevant for users.
|
|
93
|
+
* Add [YARD] developer documentation to all relevant methods added.
|
|
94
|
+
* Format your commit messages following these seven rules — see
|
|
95
|
+
the ["How to Write a Git Commit Message"] blog post for a well-written
|
|
96
|
+
explanation about the why.
|
|
97
|
+
1. Separate subject from body with a blank line
|
|
98
|
+
2. Limit the subject line to 50 characters
|
|
99
|
+
3. Capitalize the subject line
|
|
100
|
+
4. Do not end the subject line with a period
|
|
101
|
+
5. Use the imperative mood in the subject line
|
|
102
|
+
6. Wrap the body at 72 characters
|
|
103
|
+
7. Use the body to explain what and why vs. how (optional if subject is self-explanatory)
|
|
104
|
+
|
|
105
|
+
## Getting started as a "Contributor"
|
|
106
|
+
|
|
107
|
+
### Requirements
|
|
108
|
+
|
|
109
|
+
To get started with Aruba, you only need [Bundler].
|
|
110
|
+
|
|
111
|
+
Install Aruba's dependencies:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
bundle install
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Running tests
|
|
118
|
+
|
|
119
|
+
Run the following command to run the test suite.
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# Run the test suite
|
|
123
|
+
bin/test
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Or use these Rake tasks:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
# Run the whole test suite
|
|
130
|
+
rake test
|
|
131
|
+
# Run RSpec tests
|
|
132
|
+
rake spec
|
|
133
|
+
# Run Cucumber features
|
|
134
|
+
rake cucumber
|
|
135
|
+
# Run Cucumber features which are "WORK IN PROGRESS" and are allowed to fail
|
|
136
|
+
rake cucumber:wip
|
|
137
|
+
```
|
|
29
138
|
|
|
30
|
-
|
|
31
|
-
|
|
139
|
+
If you have problems because our assumptions about your local setup are wrong,
|
|
140
|
+
perhaps you can use this Docker workflow. This requires [Docker] to be
|
|
141
|
+
installed on your local system.
|
|
32
142
|
|
|
33
|
-
|
|
34
|
-
|
|
143
|
+
```bash
|
|
144
|
+
# Build the docker container
|
|
145
|
+
bundle exec rake docker:build
|
|
35
146
|
|
|
36
|
-
|
|
147
|
+
# Alternative: Build with disabled cache
|
|
148
|
+
bundle exec rake 'docker:build[false]'
|
|
37
149
|
|
|
38
|
-
|
|
150
|
+
# Build image with version tag
|
|
151
|
+
bundle exec rake 'docker:build[false, 0.1.0]'
|
|
39
152
|
|
|
40
|
-
|
|
41
|
-
|
|
153
|
+
# Run the whole test suite in "docker"-container
|
|
154
|
+
RUN_IN_DOCKER=1 bin/test
|
|
42
155
|
|
|
43
|
-
|
|
156
|
+
# Run only selected scenario
|
|
157
|
+
RUN_IN_DOCKER=1 bin/test cucumber features/steps/command/shell.feature:14
|
|
158
|
+
```
|
|
44
159
|
|
|
45
|
-
|
|
46
|
-
* Make sure `History.md` is updated with the upcoming version number, and has entries for all fixes.
|
|
47
|
-
* No need to add a `History.md` header at this point - this should be done when a new change is made, later.
|
|
160
|
+
### Installing your own gems used for development
|
|
48
161
|
|
|
49
|
-
|
|
162
|
+
A `Gemfile.local` file can be used, to have your own gems installed to support
|
|
163
|
+
your normal development workflow.
|
|
50
164
|
|
|
51
|
-
|
|
52
|
-
bundle exec rake
|
|
53
|
-
git commit -m "Release X.Y.Z"
|
|
54
|
-
rake release
|
|
165
|
+
Example `Gemfile.local`:
|
|
55
166
|
|
|
56
|
-
|
|
167
|
+
```ruby
|
|
168
|
+
gem 'pry'
|
|
169
|
+
gem 'pry-byebug'
|
|
170
|
+
gem 'byebug'
|
|
171
|
+
```
|
|
57
172
|
|
|
58
|
-
|
|
173
|
+
### Running a developer console
|
|
59
174
|
|
|
60
|
-
|
|
175
|
+
The interactive Aruba console starts an IRB console with Aruba's API loaded:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
bin/console
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Linting
|
|
182
|
+
|
|
183
|
+
Aruba's Rakefile provides the following linting tasks
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
bundle exec rake lint # Run all linters
|
|
187
|
+
bundle exec rake lint:coding_guidelines # Lint our code with "rubocop"
|
|
188
|
+
bundle exec rake lint:licenses # Check for relevant licenses in project
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Building and installing your local Aruba version
|
|
192
|
+
|
|
193
|
+
You can use the following Rake tasks to build and install your work-in-progress locally:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
# Build your copy
|
|
197
|
+
bundle exec rake build
|
|
198
|
+
# Build and install your copy
|
|
199
|
+
bundle exec rake install
|
|
200
|
+
# Build and install your copy without network access
|
|
201
|
+
bundle exec rake install:local
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## Getting started as a "Maintainer"
|
|
205
|
+
|
|
206
|
+
### Release Process
|
|
207
|
+
|
|
208
|
+
* Bump the version number in `lib/aruba/version.rb`
|
|
209
|
+
* Make sure [`CHANGELOG.md`] is updated with the upcoming version number, and has
|
|
210
|
+
entries for all fixes.
|
|
211
|
+
* No need to add a [`CHANGELOG.md`] header at this point - this should be done
|
|
212
|
+
later, when a new change is made.
|
|
213
|
+
* If a major version is released, update the `still` branch, which points to
|
|
214
|
+
the "old" major version.
|
|
215
|
+
|
|
216
|
+
Now release it:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
# update dependencies
|
|
220
|
+
bundle update
|
|
221
|
+
|
|
222
|
+
# Run test suite
|
|
223
|
+
bin/test
|
|
224
|
+
|
|
225
|
+
# Release gem
|
|
226
|
+
git commit -m "Version bump"
|
|
227
|
+
bundle exec rake release
|
|
228
|
+
|
|
229
|
+
# If it's a major relase:
|
|
230
|
+
# Merge changes back to have correct documentation
|
|
231
|
+
git checkout still
|
|
232
|
+
git merge master
|
|
233
|
+
git push
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Now send a PR to [cucumber/website] adding an article
|
|
237
|
+
with details of the new release. Then merge it - an aruba maintainer should
|
|
238
|
+
normally be allowed to merge PRs on [cucumber/website]. A copy of an old
|
|
239
|
+
announcement can be used as basis for the new article.
|
|
240
|
+
|
|
241
|
+
Now, send an email with the link to the article to `cukes@googlegroups.com`.
|
|
242
|
+
|
|
243
|
+
### Gaining Release Karma
|
|
244
|
+
|
|
245
|
+
To become a release manager, create a pull request adding your name to the list
|
|
246
|
+
below, and include your Rubygems email address in the ticket. One of the
|
|
247
|
+
existing Release managers will then add you.
|
|
61
248
|
|
|
62
249
|
Current release managers:
|
|
63
|
-
*
|
|
64
|
-
* Matt Wynne ([@mattwynne](
|
|
65
|
-
*
|
|
66
|
-
* Tom Brand ([@tom025](https://github.com/tom025))
|
|
67
|
-
* Dennis Günnewig ([@maxmeyer](http://github.com/maxmeyer), [@dg-rationdata](http://github.com/dg-rationdata))
|
|
250
|
+
* Aslak Hellesøy ([@aslakhellesoy](https://github.com/aslakhellesoy))
|
|
251
|
+
* Matt Wynne ([@mattwynne](https://github.com/mattwynne))
|
|
252
|
+
* Matijs van Zuijlen ([@mvz](https://github.com/mvz))
|
|
68
253
|
|
|
69
254
|
To grant release karma, issue the following command:
|
|
70
255
|
|
|
71
|
-
|
|
256
|
+
```bash
|
|
257
|
+
gem owner aruba --add <NEW OWNER RUBYGEMS EMAIL>
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
[`CHANGELOG.md`]: CHANGELOG.md
|
|
261
|
+
[CHANGELOG.md]: CHANGELOG.md
|
|
262
|
+
|
|
263
|
+
[`rubocop`]: https://github.com/bbatsov/rubocop
|
|
264
|
+
[Ruby Community Style Guide]: https://github.com/bbatsov/ruby-style-guide
|
|
265
|
+
[.rubocop.yml]: .rubocop.yml
|
|
266
|
+
[features/]: features/
|
|
267
|
+
|
|
268
|
+
[Bundler]: https://bundler.io/
|
|
269
|
+
|
|
270
|
+
[Docker]: https://docs.docker.com/
|
|
271
|
+
[YARD]: http://yardoc.org/
|
|
272
|
+
["How to Write a Git Commit Message"]: http://chris.beams.io/posts/git-commit/
|
|
273
|
+
[cucumber/website]: https://github.com/cucumber/website
|
data/Dockerfile
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
FROM ubuntu:14.04
|
|
2
|
+
MAINTAINER Aruba Maintainers <cukes-devs@googlegroups.com>
|
|
3
|
+
|
|
4
|
+
# Packages needed to install RVM and run Bundler gem commands
|
|
5
|
+
RUN apt-get update -qq \
|
|
6
|
+
&& apt-get -y install ca-certificates curl git-core --no-install-recommends \
|
|
7
|
+
&& rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin
|
|
8
|
+
|
|
9
|
+
# Create guest user early (before rvm) so uid:gid are 1000:000
|
|
10
|
+
RUN useradd -m -s /bin/bash guest
|
|
11
|
+
|
|
12
|
+
# Temporarily install RVM as root - just for requirements
|
|
13
|
+
RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 \
|
|
14
|
+
&& curl -L get.rvm.io | bash -s stable \
|
|
15
|
+
&& bash -l -c 'rvm requirements 2.2.1' \
|
|
16
|
+
&& bash -l -c 'echo yes | rvm implode' \
|
|
17
|
+
|
|
18
|
+
# Fix locale
|
|
19
|
+
ENV DEBIAN_FRONTEND noninteractive
|
|
20
|
+
RUN dpkg-reconfigure locales && locale-gen en_US.UTF-8 && /usr/sbin/update-locale LANG=en_US.UTF-8 \
|
|
21
|
+
&& echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen && locale-gen
|
|
22
|
+
ENV LC_ALL C.UTF-8
|
|
23
|
+
ENV LANG C.UTF-8
|
|
24
|
+
ENV LANGUAGE C.UTF-8
|
|
25
|
+
|
|
26
|
+
# Zsh (just for the sake of a handful of Cucumber scenarios)
|
|
27
|
+
RUN apt-get update -qq \
|
|
28
|
+
&& apt-get -y install zsh --no-install-recommends \
|
|
29
|
+
&& rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin
|
|
30
|
+
|
|
31
|
+
# Python (just for the sake of a handful of Cucumber scenarios)
|
|
32
|
+
RUN apt-get update -qq \
|
|
33
|
+
&& apt-get -y install python --no-install-recommends \
|
|
34
|
+
&& rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin
|
|
35
|
+
|
|
36
|
+
# Java (for javac - also for just a few Cucumber scenarios)
|
|
37
|
+
RUN apt-get update -qq \
|
|
38
|
+
&& apt-get -y install openjdk-7-jdk --no-install-recommends \
|
|
39
|
+
&& rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin
|
|
40
|
+
|
|
41
|
+
# Cache needed gems - for faster test reruns
|
|
42
|
+
ADD Gemfile Gemfile.lock aruba.gemspec /home/guest/cache/aruba/
|
|
43
|
+
ADD lib/aruba/version.rb /home/guest/cache/aruba/lib/aruba/version.rb
|
|
44
|
+
RUN chown -R guest:guest /home/guest/cache
|
|
45
|
+
|
|
46
|
+
USER guest
|
|
47
|
+
ENV HOME /home/guest
|
|
48
|
+
WORKDIR /home/guest
|
|
49
|
+
|
|
50
|
+
# Install RVM as guest
|
|
51
|
+
RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 \
|
|
52
|
+
&& /bin/bash -l -c "echo 'gem: --no-ri --no-rdoc' > ~/.gemrc" \
|
|
53
|
+
&& curl -L get.rvm.io | bash -s stable \
|
|
54
|
+
&& /bin/bash -l -c "rvm install 2.3.0 && rvm cleanup all" \
|
|
55
|
+
&& /bin/bash -l -c "gem install bundler --no-ri --no-rdoc" \
|
|
56
|
+
&& echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"' >> ~/.bashrc \
|
|
57
|
+
&& echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"' >> ~/.zshrc
|
|
58
|
+
|
|
59
|
+
# Download and install aruba + dependencies
|
|
60
|
+
WORKDIR /home/guest/cache/aruba
|
|
61
|
+
RUN bash -l -c "bundle install"
|
|
62
|
+
|
|
63
|
+
# Default working directory
|
|
64
|
+
RUN mkdir -p /home/guest/aruba
|
|
65
|
+
WORKDIR /home/guest/aruba
|
|
66
|
+
|
|
67
|
+
CMD ["bundle exec rake test"]
|
data/Gemfile
CHANGED
|
@@ -3,119 +3,10 @@ source 'https://rubygems.org'
|
|
|
3
3
|
# Use dependencies from gemspec
|
|
4
4
|
gemspec
|
|
5
5
|
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
unless RUBY_PLATFORM.include?('java')
|
|
9
|
-
if RUBY_VERSION >= '2.2'
|
|
10
|
-
gem 'byebug', '~> 10.0'
|
|
11
|
-
gem 'pry-byebug', '~> 3.4'
|
|
12
|
-
elsif RUBY_VERSION >= '2'
|
|
13
|
-
gem 'byebug', '~> 9.0'
|
|
14
|
-
gem 'pry-byebug', '~> 3.4'
|
|
15
|
-
elsif RUBY_VERSION > '1.9'
|
|
16
|
-
gem 'debugger', '~> 1.6.8'
|
|
17
|
-
gem 'pry-debugger', '~> 0.2.3'
|
|
18
|
-
end
|
|
19
|
-
end
|
|
6
|
+
# Load local Gemfile
|
|
7
|
+
load File.expand_path('Gemfile.local', __dir__) if File.file? File.expand_path('Gemfile.local', __dir__)
|
|
20
8
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
gem 'pry-doc', '~> 1.0.0'
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# Tools to run during development
|
|
29
|
-
group :development do
|
|
30
|
-
# License compliance
|
|
31
|
-
if RUBY_VERSION >= '2.3'
|
|
32
|
-
gem 'license_finder', '~> 5.0'
|
|
33
|
-
elsif RUBY_VERSION >= '2.0.0'
|
|
34
|
-
gem 'license_finder', '~> 2.0.4'
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
group :development, :test do
|
|
39
|
-
# we use this to demonstrate interactive debugging within our feature tests
|
|
40
|
-
if RUBY_VERSION >= '2'
|
|
41
|
-
gem 'pry', '~> 0.12.2'
|
|
42
|
-
else
|
|
43
|
-
gem 'pry', '~> 0.9.12'
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
# Run development and test tasks
|
|
47
|
-
if RUBY_VERSION >= '2.0.0'
|
|
48
|
-
gem 'rake', '~> 12.3'
|
|
49
|
-
elsif RUBY_VERSION >= '1.9.3'
|
|
50
|
-
gem 'rake', '~> 12.2.0'
|
|
51
|
-
else
|
|
52
|
-
gem 'rake', '~> 10.5.0'
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
if RUBY_VERSION >= '2.0.0'
|
|
56
|
-
# Lint travis yaml
|
|
57
|
-
gem 'travis-yaml'
|
|
58
|
-
|
|
59
|
-
# Reporting
|
|
60
|
-
gem 'bcat', '~> 0.6.2'
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# YARD documentation
|
|
64
|
-
if RUBY_VERSION >= '2.3.0'
|
|
65
|
-
gem 'yard', '~> 0.9.11'
|
|
66
|
-
gem 'kramdown', '~> 2.1'
|
|
67
|
-
elsif RUBY_VERSION >= '2.0.0'
|
|
68
|
-
gem 'yard', '~> 0.9.11'
|
|
69
|
-
gem 'kramdown', '~> 1.7.0'
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
# Code Coverage
|
|
73
|
-
unless RUBY_PLATFORM.include?('java')
|
|
74
|
-
gem 'simplecov', '~> 0.10'
|
|
75
|
-
if RUBY_VERSION < '2.0.0'
|
|
76
|
-
gem 'json', '< 2.3.0'
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
# Test api
|
|
82
|
-
gem 'rspec', '~> 3.4'
|
|
83
|
-
gem 'fuubar', '~> 2.0'
|
|
84
|
-
|
|
85
|
-
# using platform for this make bundler complain about the same gem given
|
|
86
|
-
# twice
|
|
87
|
-
if RUBY_VERSION < '1.9.3'
|
|
88
|
-
gem 'cucumber', '~> 1.3.20'
|
|
89
|
-
else
|
|
90
|
-
gem 'cucumber', '~> 2.0'
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
if RUBY_VERSION < '1.9.2'
|
|
94
|
-
gem 'childprocess', '~> 0.6.3'
|
|
95
|
-
elsif RUBY_VERSION < '2.3.0'
|
|
96
|
-
gem 'childprocess', '~> 1.0.1'
|
|
97
|
-
else
|
|
98
|
-
gem 'childprocess', ['>= 2.0', '< 4.0']
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
if RUBY_VERSION < '1.9.2'
|
|
102
|
-
gem 'contracts', '~> 0.15.0'
|
|
103
|
-
else
|
|
104
|
-
gem 'contracts', '~> 0.16.0'
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
if RUBY_VERSION >= '2.0.0'
|
|
108
|
-
# Make aruba compliant to ruby community guide
|
|
109
|
-
gem 'rubocop', '~> 0.32', '< 0.41.1'
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
if RUBY_VERSION < '2.0.0'
|
|
113
|
-
gem 'ffi', '< 1.11.0'
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
if RUBY_VERSION < '1.9.3'
|
|
117
|
-
gem 'minitest', '~> 5.8.0'
|
|
118
|
-
else
|
|
119
|
-
gem 'minitest', '~> 5.8'
|
|
120
|
-
end
|
|
9
|
+
unless RUBY_PLATFORM.include?('java')
|
|
10
|
+
gem 'byebug', '~> 11.0'
|
|
11
|
+
gem 'pry-byebug', '~> 3.4'
|
|
121
12
|
end
|
data/LICENSE
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Copyright (c) 2010-
|
|
1
|
+
Copyright (c) 2010-2020 Aslak Hellesøy, David Chelimsky, Mike Sassak, Jarl Friis, Matt Wynne, Dennis Günnewig and Matijs van Zuijlen
|
|
2
2
|
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
4
|
a copy of this software and associated documentation files (the
|