rails_packager 0.0.1

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 (107) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +34 -0
  4. data/exe/rails_package +25 -0
  5. data/lib/rails_packager.rb +8 -0
  6. data/lib/rails_packager/command.rb +84 -0
  7. data/lib/rails_packager/command_parser.rb +66 -0
  8. data/lib/rails_packager/engine.rb +4 -0
  9. data/lib/rails_packager/runner.rb +138 -0
  10. data/lib/rails_packager/util.rb +30 -0
  11. data/lib/rails_packager/version.rb +3 -0
  12. data/lib/tasks/rails_packager_tasks.rake +8 -0
  13. data/test/dummy/Gemfile +2 -0
  14. data/test/dummy/README.rdoc +28 -0
  15. data/test/dummy/Rakefile +6 -0
  16. data/test/dummy/app/assets/javascripts/application.js +13 -0
  17. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  18. data/test/dummy/app/controllers/application_controller.rb +5 -0
  19. data/test/dummy/app/helpers/application_helper.rb +2 -0
  20. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  21. data/test/dummy/bin/bundle +3 -0
  22. data/test/dummy/bin/rails +4 -0
  23. data/test/dummy/bin/rake +4 -0
  24. data/test/dummy/bin/setup +29 -0
  25. data/test/dummy/config.ru +4 -0
  26. data/test/dummy/config/application.rb +22 -0
  27. data/test/dummy/config/boot.rb +5 -0
  28. data/test/dummy/config/database.yml +25 -0
  29. data/test/dummy/config/environment.rb +5 -0
  30. data/test/dummy/config/environments/development.rb +41 -0
  31. data/test/dummy/config/environments/production.rb +79 -0
  32. data/test/dummy/config/environments/test.rb +42 -0
  33. data/test/dummy/config/initializers/assets.rb +11 -0
  34. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  35. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  36. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  37. data/test/dummy/config/initializers/inflections.rb +16 -0
  38. data/test/dummy/config/initializers/mime_types.rb +4 -0
  39. data/test/dummy/config/initializers/session_store.rb +3 -0
  40. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  41. data/test/dummy/config/locales/en.yml +23 -0
  42. data/test/dummy/config/routes.rb +56 -0
  43. data/test/dummy/config/secrets.yml +22 -0
  44. data/test/dummy/db/development.sqlite3 +0 -0
  45. data/test/dummy/db/schema.rb +15 -0
  46. data/test/dummy/db/test.sqlite3 +0 -0
  47. data/test/dummy/log/development.log +7 -0
  48. data/test/dummy/log/test.log +21747 -0
  49. data/test/dummy/public/404.html +67 -0
  50. data/test/dummy/public/422.html +67 -0
  51. data/test/dummy/public/500.html +66 -0
  52. data/test/dummy/public/favicon.ico +0 -0
  53. data/test/files/environment-variable-in-one-command-merges-with-env.yml +9 -0
  54. data/test/files/environment-variable-in-one-command.yml +5 -0
  55. data/test/files/environment-variable-replacement.yml +7 -0
  56. data/test/files/execution-path.yml +3 -0
  57. data/test/files/failure-integration.yml +6 -0
  58. data/test/files/files-is-within-quotes.yml +2 -0
  59. data/test/files/files-not-its-own-argument.yml +2 -0
  60. data/test/files/fully-customized.yml +13 -0
  61. data/test/files/missing-command-name.yml +5 -0
  62. data/test/files/quotes-in-command.yml +2 -0
  63. data/test/files/simple-integration.yml +7 -0
  64. data/test/integration_test.rb +224 -0
  65. data/test/jruby_dummy/Jarfile +1 -0
  66. data/test/jruby_dummy/README.rdoc +28 -0
  67. data/test/jruby_dummy/Rakefile +6 -0
  68. data/test/jruby_dummy/app/assets/javascripts/application.js +13 -0
  69. data/test/jruby_dummy/app/assets/stylesheets/application.css +15 -0
  70. data/test/jruby_dummy/app/controllers/application_controller.rb +5 -0
  71. data/test/jruby_dummy/app/helpers/application_helper.rb +2 -0
  72. data/test/jruby_dummy/app/views/layouts/application.html.erb +14 -0
  73. data/test/jruby_dummy/bin/bundle +3 -0
  74. data/test/jruby_dummy/bin/rails +4 -0
  75. data/test/jruby_dummy/bin/rake +4 -0
  76. data/test/jruby_dummy/bin/setup +29 -0
  77. data/test/jruby_dummy/config.ru +4 -0
  78. data/test/jruby_dummy/config/application.rb +22 -0
  79. data/test/jruby_dummy/config/boot.rb +5 -0
  80. data/test/jruby_dummy/config/database.yml +23 -0
  81. data/test/jruby_dummy/config/environment.rb +5 -0
  82. data/test/jruby_dummy/config/environments/development.rb +41 -0
  83. data/test/jruby_dummy/config/environments/production.rb +79 -0
  84. data/test/jruby_dummy/config/environments/test.rb +42 -0
  85. data/test/jruby_dummy/config/initializers/assets.rb +11 -0
  86. data/test/jruby_dummy/config/initializers/backtrace_silencers.rb +7 -0
  87. data/test/jruby_dummy/config/initializers/cookies_serializer.rb +3 -0
  88. data/test/jruby_dummy/config/initializers/filter_parameter_logging.rb +4 -0
  89. data/test/jruby_dummy/config/initializers/inflections.rb +16 -0
  90. data/test/jruby_dummy/config/initializers/mime_types.rb +4 -0
  91. data/test/jruby_dummy/config/initializers/session_store.rb +3 -0
  92. data/test/jruby_dummy/config/initializers/wrap_parameters.rb +14 -0
  93. data/test/jruby_dummy/config/locales/en.yml +23 -0
  94. data/test/jruby_dummy/config/routes.rb +56 -0
  95. data/test/jruby_dummy/config/secrets.yml +22 -0
  96. data/test/jruby_dummy/db/schema.rb +15 -0
  97. data/test/jruby_dummy/public/404.html +67 -0
  98. data/test/jruby_dummy/public/422.html +67 -0
  99. data/test/jruby_dummy/public/500.html +66 -0
  100. data/test/jruby_dummy/public/favicon.ico +0 -0
  101. data/test/rails_packager/command_parser_test.rb +74 -0
  102. data/test/rails_packager/runner_test.rb +225 -0
  103. data/test/rails_packager/util_test.rb +84 -0
  104. data/test/rails_packager_test.rb +7 -0
  105. data/test/support/util_helper.rb +20 -0
  106. data/test/test_helper.rb +22 -0
  107. metadata +279 -0
@@ -0,0 +1,14 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # This file contains settings for ActionController::ParamsWrapper which
4
+ # is enabled by default.
5
+
6
+ # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
7
+ ActiveSupport.on_load(:action_controller) do
8
+ wrap_parameters format: [:json] if respond_to?(:wrap_parameters)
9
+ end
10
+
11
+ # To enable root element in JSON for ActiveRecord objects.
12
+ # ActiveSupport.on_load(:active_record) do
13
+ # self.include_root_in_json = true
14
+ # end
@@ -0,0 +1,23 @@
1
+ # Files in the config/locales directory are used for internationalization
2
+ # and are automatically loaded by Rails. If you want to use locales other
3
+ # than English, add the necessary files in this directory.
4
+ #
5
+ # To use the locales, use `I18n.t`:
6
+ #
7
+ # I18n.t 'hello'
8
+ #
9
+ # In views, this is aliased to just `t`:
10
+ #
11
+ # <%= t('hello') %>
12
+ #
13
+ # To use a different locale, set it with `I18n.locale`:
14
+ #
15
+ # I18n.locale = :es
16
+ #
17
+ # This would use the information in config/locales/es.yml.
18
+ #
19
+ # To learn more, please read the Rails Internationalization guide
20
+ # available at http://guides.rubyonrails.org/i18n.html.
21
+
22
+ en:
23
+ hello: "Hello world"
@@ -0,0 +1,56 @@
1
+ Rails.application.routes.draw do
2
+ # The priority is based upon order of creation: first created -> highest priority.
3
+ # See how all your routes lay out with "rake routes".
4
+
5
+ # You can have the root of your site routed with "root"
6
+ # root 'welcome#index'
7
+
8
+ # Example of regular route:
9
+ # get 'products/:id' => 'catalog#view'
10
+
11
+ # Example of named route that can be invoked with purchase_url(id: product.id)
12
+ # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase
13
+
14
+ # Example resource route (maps HTTP verbs to controller actions automatically):
15
+ # resources :products
16
+
17
+ # Example resource route with options:
18
+ # resources :products do
19
+ # member do
20
+ # get 'short'
21
+ # post 'toggle'
22
+ # end
23
+ #
24
+ # collection do
25
+ # get 'sold'
26
+ # end
27
+ # end
28
+
29
+ # Example resource route with sub-resources:
30
+ # resources :products do
31
+ # resources :comments, :sales
32
+ # resource :seller
33
+ # end
34
+
35
+ # Example resource route with more complex sub-resources:
36
+ # resources :products do
37
+ # resources :comments
38
+ # resources :sales do
39
+ # get 'recent', on: :collection
40
+ # end
41
+ # end
42
+
43
+ # Example resource route with concerns:
44
+ # concern :toggleable do
45
+ # post 'toggle'
46
+ # end
47
+ # resources :posts, concerns: :toggleable
48
+ # resources :photos, concerns: :toggleable
49
+
50
+ # Example resource route within a namespace:
51
+ # namespace :admin do
52
+ # # Directs /admin/products/* to Admin::ProductsController
53
+ # # (app/controllers/admin/products_controller.rb)
54
+ # resources :products
55
+ # end
56
+ end
@@ -0,0 +1,22 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Your secret key is used for verifying the integrity of signed cookies.
4
+ # If you change this key, all old signed cookies will become invalid!
5
+
6
+ # Make sure the secret is at least 30 characters and all random,
7
+ # no regular words or you'll be exposed to dictionary attacks.
8
+ # You can use `rake secret` to generate a secure secret key.
9
+
10
+ # Make sure the secrets in this file are kept private
11
+ # if you're sharing your code publicly.
12
+
13
+ development:
14
+ secret_key_base: 8952434dbcc12f449b0bc6e1b88f76cf2cd2c971b0dbb6313787b9e8ca9df06cc05fffee0b314a195b86750f2ab9c18918ee385b71ce593003ab6a25126610d1
15
+
16
+ test:
17
+ secret_key_base: 5c69147aae051e785d78b4c9e74d1cf198167d0a53a65c594ce5d26057789f4aaa2c25503fdfdbdf8066433b7a5a26d07e2c17cba7ad26efff33777464332bc1
18
+
19
+ # Do not keep production secrets in the repository,
20
+ # instead read values from the environment.
21
+ production:
22
+ secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
@@ -0,0 +1,15 @@
1
+ # This file is auto-generated from the current state of the database. Instead
2
+ # of editing this file, please use the migrations feature of Active Record to
3
+ # incrementally modify your database, and then regenerate this schema definition.
4
+ #
5
+ # Note that this schema.rb definition is the authoritative source for your
6
+ # database schema. If you need to create the application database on another
7
+ # system, you should be using db:schema:load, not running all the migrations
8
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
9
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
10
+ #
11
+ # It's strongly recommended that you check this file into your version control system.
12
+
13
+ ActiveRecord::Schema.define(version: 0) do
14
+
15
+ end
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/404.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The page you were looking for doesn't exist.</h1>
62
+ <p>You may have mistyped the address or the page may have moved.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/422.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The change you wanted was rejected.</h1>
62
+ <p>Maybe you tried to change something you didn't have access to.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,66 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/500.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>We're sorry, but something went wrong.</h1>
62
+ </div>
63
+ <p>If you are the application owner check the logs for more information.</p>
64
+ </div>
65
+ </body>
66
+ </html>
File without changes
@@ -0,0 +1,74 @@
1
+ require "test_helper"
2
+
3
+ class RailsPackager::CommandParserTest < ActiveSupport::TestCase
4
+ test "simple command" do
5
+ parsed = RailsPackager::CommandParser.parse("cmd")
6
+ assert_equal({}, parsed.env)
7
+ assert_equal "cmd", parsed.name
8
+ assert_equal [], parsed.args
9
+ end
10
+
11
+ test "command with env" do
12
+ parsed = RailsPackager::CommandParser.parse(["cmd", { "env" => { "ENV_VAR" => "value" } }])
13
+ assert_equal({ "ENV_VAR" => "value" }, parsed.env)
14
+ assert_equal "cmd", parsed.name
15
+ assert_equal [], parsed.args
16
+ end
17
+
18
+ test "command with unsetenv" do
19
+ parsed = RailsPackager::CommandParser.parse(["cmd", { "unsetenv" => ["ENV_VAR"] }])
20
+ assert_equal({ "ENV_VAR" => nil }, parsed.env)
21
+ assert_equal "cmd", parsed.name
22
+ assert_equal [], parsed.args
23
+ end
24
+
25
+ test "command with env and unsetenv" do
26
+ parsed = RailsPackager::CommandParser.parse(["cmd", { "unsetenv" => ["ENV_VAR", "OTHER_ENV_VAR"], "env" => { "ENV_VAR" => "value" } }])
27
+ assert_equal({ "ENV_VAR" => "value", "OTHER_ENV_VAR" => nil }, parsed.env)
28
+ assert_equal "cmd", parsed.name
29
+ assert_equal [], parsed.args
30
+ end
31
+
32
+ test "command with arguments" do
33
+ parsed = RailsPackager::CommandParser.parse("echo some value")
34
+ assert_equal({}, parsed.env)
35
+ assert_equal "echo", parsed.name
36
+ assert_equal ["some", "value"], parsed.args
37
+ end
38
+
39
+ test "command with arguments separated by multiple spaces" do
40
+ parsed = RailsPackager::CommandParser.parse("echo some value")
41
+ assert_equal({}, parsed.env)
42
+ assert_equal "echo", parsed.name
43
+ assert_equal ["some", "value"], parsed.args
44
+ end
45
+
46
+ test "command with single quoted arguments" do
47
+ parsed = RailsPackager::CommandParser.parse("echo 'some quoted value'")
48
+ assert_equal({}, parsed.env)
49
+ assert_equal "echo", parsed.name
50
+ assert_equal ["some quoted value"], parsed.args
51
+ end
52
+
53
+ test "command with double quoted arguments" do
54
+ parsed = RailsPackager::CommandParser.parse(%(echo "some quoted value"))
55
+ assert_equal({}, parsed.env)
56
+ assert_equal "echo", parsed.name
57
+ assert_equal ["some quoted value"], parsed.args
58
+ end
59
+
60
+ test "command with nested quoted arguments" do
61
+ parsed = RailsPackager::CommandParser.parse(%(echo "some user's value" 'and "another" quoted value'))
62
+ assert_equal({}, parsed.env)
63
+ assert_equal "echo", parsed.name
64
+ assert_equal ["some user's value", %(and "another" quoted value)], parsed.args
65
+ end
66
+
67
+ test "empty command" do
68
+ assert_raises(ArgumentError) { RailsPackager::CommandParser.parse("") }
69
+ end
70
+
71
+ test "command with mismatched quotes" do
72
+ assert_raises(ArgumentError) { RailsPackager::CommandParser.parse("echo 'mismatched quotes") }
73
+ end
74
+ end
@@ -0,0 +1,225 @@
1
+ require "test_helper"
2
+
3
+ class RailsPackager::RunnerTest < ActiveSupport::TestCase
4
+ include RailsPackager::UtilHelper
5
+ teardown { close_runner }
6
+
7
+ test "no customization" do
8
+ runner = new_runner(dir: DUMMY_RAILS_DIR)
9
+ assert_equal ["**/.git", "tmp"], runner.excludes
10
+ assert_nil runner.includes
11
+ assert_equal 4, runner.commands.size
12
+
13
+ command = runner.commands[0]
14
+ assert_equal({ "RUBYOPT" => nil, "RUBYLIB" => nil, "BUNDLER_ORIG_GEM_PATH" => nil, "BUNDLER_ORIG_PATH" => nil, "GEM_PATH" => ENV["BUNDLER_ORIG_GEM_PATH"] }, command.env)
15
+ assert_equal DUMMY_RAILS_DIR, command.dir
16
+ assert_equal "bundle", command.name
17
+ assert_equal ["install", "--deployment", "--without", "development", "test"], command.args
18
+
19
+ command = runner.commands[1]
20
+ assert_equal({}, command.env)
21
+ assert_equal DUMMY_RAILS_DIR, command.dir
22
+ assert_equal "gem", command.name
23
+ assert_equal ["install", "bundler", "--install-dir", "vendor/bundle"], command.args
24
+
25
+ command = runner.commands[2]
26
+ assert_equal({ "RUBYOPT" => nil, "RUBYLIB" => nil, "BUNDLER_ORIG_GEM_PATH" => nil, "BUNDLER_ORIG_PATH" => nil, "RAILS_ENV" => "production", "GEM_PATH" => ENV["BUNDLER_ORIG_GEM_PATH"] }, command.env)
27
+ assert_equal DUMMY_RAILS_DIR, command.dir
28
+ assert_equal "bundle", command.name
29
+ assert_equal ["exec", "rake", "assets:precompile"], command.args
30
+
31
+ command = runner.commands[3]
32
+ assert_equal({}, command.env)
33
+ assert_equal DUMMY_RAILS_DIR, command.dir
34
+ assert_equal "tar", command.name
35
+ assert_equal ["--no-recursion", "--files-from", runner.files_file, "-zcvf", "dummy.tar.gz"], command.args
36
+ assert_equal File.read(runner.files_file), runner.files.join("\n") + "\n"
37
+
38
+ # Test a few files that should be included
39
+ assert_includes runner.files, "log/.keep"
40
+ assert_includes runner.files, "config/routes.rb"
41
+ assert_includes runner.files, "app/controllers/application_controller.rb"
42
+
43
+ # Includes directories
44
+ assert_includes runner.files, "config"
45
+
46
+ # Doesn't include special directories
47
+ refute_includes runner.files, "config/."
48
+ refute_includes runner.files, "config/.."
49
+ end
50
+
51
+ test "no customization with jbundler" do
52
+ runner = new_runner(dir: DUMMY_JRUBY_RAILS_DIR)
53
+ assert_equal ["**/.git", "tmp"], runner.excludes
54
+ assert_nil runner.includes
55
+ assert_equal 5, runner.commands.size
56
+
57
+ command = runner.commands[0]
58
+ assert_equal({ "RUBYOPT" => nil, "RUBYLIB" => nil, "BUNDLER_ORIG_GEM_PATH" => nil, "BUNDLER_ORIG_PATH" => nil, "GEM_PATH" => ENV["BUNDLER_ORIG_GEM_PATH"] }, command.env)
59
+ assert_equal DUMMY_JRUBY_RAILS_DIR, command.dir
60
+ assert_equal "bundle", command.name
61
+ assert_equal ["install", "--deployment", "--without", "development", "test"], command.args
62
+
63
+ command = runner.commands[1]
64
+ assert_equal({}, command.env)
65
+ assert_equal DUMMY_JRUBY_RAILS_DIR, command.dir
66
+ assert_equal "gem", command.name
67
+ assert_equal ["install", "bundler", "--install-dir", "vendor/bundle"], command.args
68
+
69
+ command = runner.commands[2]
70
+ assert_equal({}, command.env)
71
+ assert_equal DUMMY_JRUBY_RAILS_DIR, command.dir
72
+ assert_equal "jbundle", command.name
73
+ assert_equal ["install", "--vendor"], command.args
74
+
75
+ command = runner.commands[3]
76
+ assert_equal({ "RUBYOPT" => nil, "RUBYLIB" => nil, "BUNDLER_ORIG_GEM_PATH" => nil, "BUNDLER_ORIG_PATH" => nil, "RAILS_ENV" => "production", "GEM_PATH" => ENV["BUNDLER_ORIG_GEM_PATH"] }, command.env)
77
+ assert_equal DUMMY_JRUBY_RAILS_DIR, command.dir
78
+ assert_equal "bundle", command.name
79
+ assert_equal ["exec", "rake", "assets:precompile"], command.args
80
+
81
+ command = runner.commands[4]
82
+ assert_equal({}, command.env)
83
+ assert_equal DUMMY_JRUBY_RAILS_DIR, command.dir
84
+ assert_equal "tar", command.name
85
+ assert_equal ["--no-recursion", "--files-from", runner.files_file, "-zcvf", "jruby_dummy.tar.gz"], command.args
86
+ assert_equal File.read(runner.files_file), runner.files.join("\n") + "\n"
87
+
88
+ # Test a few files that should be included
89
+ assert_includes runner.files, "log/.keep"
90
+ assert_includes runner.files, "config/routes.rb"
91
+ assert_includes runner.files, "app/controllers/application_controller.rb"
92
+
93
+ # Includes directories
94
+ assert_includes runner.files, "config"
95
+
96
+ # Doesn't include special directories
97
+ refute_includes runner.files, "config/."
98
+ refute_includes runner.files, "config/.."
99
+ end
100
+
101
+ test "fully customized" do
102
+ runner = new_runner(config_file: config_file("fully-customized.yml"), dir: DUMMY_RAILS_DIR)
103
+ assert_equal ["log/**/*"], runner.excludes
104
+ assert_nil runner.includes
105
+ assert_equal 5, runner.commands.size
106
+
107
+ command = runner.commands[0]
108
+ assert_equal({ "EXAMPLE" => "first env var", "EXAMPLE_2" => "second env var" }, command.env)
109
+ assert_equal DUMMY_RAILS_DIR, command.dir
110
+ assert_equal "echo", command.name
111
+ assert_equal ["this", "is", "before", "-", "packaged-0.0.1-SNAPSHOT"], command.args
112
+
113
+ command = runner.commands[1]
114
+ assert_equal({ "EXAMPLE" => "first env var", "EXAMPLE_2" => "second env var" }, command.env)
115
+ assert_equal DUMMY_RAILS_DIR, command.dir
116
+ assert_equal "echo", command.name
117
+ assert_equal ["this", "is", "also", "before"], command.args
118
+
119
+ command = runner.commands[2]
120
+ assert_equal({ "EXAMPLE" => "first env var", "EXAMPLE_2" => "second env var" }, command.env)
121
+ assert_equal DUMMY_RAILS_DIR, command.dir
122
+ assert_equal "echo", command.name
123
+ assert_equal ["packaged-0.0.1-SNAPSHOT.tar.gz", *runner.files], command.args
124
+
125
+ command = runner.commands[3]
126
+ assert_equal({ "EXAMPLE" => "first env var", "EXAMPLE_2" => "second env var" }, command.env)
127
+ assert_equal DUMMY_RAILS_DIR, command.dir
128
+ assert_equal "echo", command.name
129
+ assert_equal ["this", "is", "after", "-", "packaged-0.0.1-SNAPSHOT"], command.args
130
+
131
+ command = runner.commands[4]
132
+ assert_equal({ "EXAMPLE" => "first env var", "EXAMPLE_2" => "second env var" }, command.env)
133
+ assert_equal DUMMY_RAILS_DIR, command.dir
134
+ assert_equal "echo", command.name
135
+ assert_equal ["this", "is", "also", "after", *runner.files], command.args
136
+
137
+ # Test a few files that should be included
138
+ assert_includes runner.files, "config/routes.rb"
139
+ assert_includes runner.files, "app/controllers/application_controller.rb"
140
+
141
+ # Includes directories
142
+ assert_includes runner.files, "config"
143
+
144
+ # Doesn't include special directories
145
+ refute_includes runner.files, "config/."
146
+ refute_includes runner.files, "config/.."
147
+
148
+ # Doesn't include excluded files
149
+ refute_includes runner.files, "log/.keep"
150
+ end
151
+
152
+ test "environment variable in one command" do
153
+ runner = new_runner(config_file: config_file("environment-variable-in-one-command.yml"), dir: DUMMY_RAILS_DIR)
154
+
155
+ command = runner.commands[0]
156
+ assert_equal({ "ENV_VAR" => "env value" }, command.env)
157
+ assert_equal "command", command.name
158
+ assert_equal ["with_env"], command.args
159
+
160
+ command = runner.commands[1]
161
+ assert_equal({}, command.env)
162
+ assert_equal "command", command.name
163
+ assert_equal ["without_env"], command.args
164
+ end
165
+
166
+ test "environment variable in one command merges with env" do
167
+ runner = new_runner(config_file: config_file("environment-variable-in-one-command-merges-with-env.yml"), dir: DUMMY_RAILS_DIR)
168
+
169
+ command = runner.commands[0]
170
+ assert_equal({ "EXAMPLE" => "value", "ENV_VAR" => "env value", "OTHER" => "other value" }, command.env)
171
+ assert_equal "command", command.name
172
+ assert_equal ["with_env"], command.args
173
+
174
+ command = runner.commands[1]
175
+ assert_equal({ "EXAMPLE" => "value", "ENV_VAR" => "will be overridden" }, command.env)
176
+ assert_equal "command", command.name
177
+ assert_equal ["without_env"], command.args
178
+ end
179
+
180
+ test "environment variable replacement" do
181
+ ENV["NAME_ENV"] = "name-value"
182
+ ENV["ENV_VALUE"] = "env-value"
183
+ ENV["OTHER_ENV_VALUE"] = "other-env-value"
184
+ ENV["COMMAND_VALUE"] = "some-command"
185
+ ENV["ARGUMENT_VALUE"] = "argument value"
186
+
187
+ runner = new_runner(config_file: config_file("environment-variable-replacement.yml"), dir: DUMMY_RAILS_DIR)
188
+ assert_equal "name-name-value", runner.name
189
+ assert_equal({ "EXAMPLE" => "env env-value" }, runner.env)
190
+
191
+ command = runner.commands[0]
192
+ assert_equal({ "EXAMPLE" => "env env-value", "OTHER_EXAMPLE" => "env other-env-value" }, command.env)
193
+ assert_equal "some-command", command.name
194
+ assert_equal ["and", "argument value", "and", "missing--between"], command.args
195
+ end
196
+
197
+ test "missing command name" do
198
+ ENV["EMPTY_COMMAND_NAME"] = ""
199
+ runner = new_runner(config_file: config_file("missing-command-name.yml"), dir: DUMMY_RAILS_DIR)
200
+
201
+ assert_raises(ArgumentError) { runner.commands[0].name }
202
+ assert_raises(ArgumentError) { runner.commands[1].name }
203
+ assert_raises(ArgumentError) { runner.commands[2].name }
204
+ end
205
+
206
+ test "quotes in command" do
207
+ runner = new_runner(config_file: config_file("quotes-in-command.yml"), dir: DUMMY_RAILS_DIR)
208
+
209
+ command = runner.commands[0]
210
+ assert_equal "/bin/whenever however/whatever", command.name
211
+ assert_equal ["some", %(arguments "listed"), "with", "quotes"], command.args
212
+ end
213
+
214
+ test "@{files} not its own argument" do
215
+ assert_raises(ArgumentError) do
216
+ runner = new_runner(config_file: config_file("files-not-its-own-argument.yml"), dir: DUMMY_RAILS_DIR)
217
+ runner.commands[0].args
218
+ end
219
+ end
220
+
221
+ test "@{files} is within quotes" do
222
+ runner = new_runner(config_file: config_file("files-is-within-quotes.yml"), dir: DUMMY_RAILS_DIR)
223
+ assert_raises(ArgumentError) { runner.commands[0].args }
224
+ end
225
+ end