comodule 0.0.4 → 0.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 (132) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +6 -0
  4. data/Gemfile +0 -2
  5. data/README.md +115 -43
  6. data/comodule.gemspec +4 -2
  7. data/copy_to_rails.sh +7 -0
  8. data/lib/comodule.rb +32 -2
  9. data/lib/comodule/config_support.rb +95 -18
  10. data/lib/comodule/deployment.rb +2 -0
  11. data/lib/comodule/deployment/base.rb +186 -0
  12. data/lib/comodule/deployment/helper.rb +9 -0
  13. data/lib/comodule/deployment/helper/aws.rb +96 -0
  14. data/lib/comodule/deployment/helper/aws/base.rb +14 -0
  15. data/lib/comodule/deployment/helper/aws/cloud_formation.rb +146 -0
  16. data/lib/comodule/deployment/helper/aws/ec2.rb +37 -0
  17. data/lib/comodule/deployment/helper/aws/rds.rb +46 -0
  18. data/lib/comodule/deployment/helper/aws/s3.rb +52 -0
  19. data/lib/comodule/deployment/helper/aws/ssl.rb +111 -0
  20. data/lib/comodule/deployment/helper/base.rb +18 -0
  21. data/lib/comodule/deployment/helper/shell_command.rb +76 -0
  22. data/lib/comodule/deployment/helper/system_utility.rb +80 -0
  23. data/lib/comodule/deployment/helper/uploader.rb +155 -0
  24. data/lib/comodule/deployment/platform.rb +156 -0
  25. data/lib/comodule/deployment/platform/default_files/.gitignore.erb +5 -0
  26. data/lib/comodule/deployment/platform/default_files/aws_config.yml.erb +2 -0
  27. data/lib/comodule/version.rb +1 -1
  28. data/lib/tasks/comodule.rake +94 -0
  29. data/spec/comodule/config_support_spec.rb +102 -0
  30. data/spec/comodule/deployment/helper/aws/cloud_formation_spec.rb +71 -0
  31. data/spec/comodule/deployment/helper/aws/s3_spec.rb +85 -0
  32. data/spec/comodule/deployment/helper/shell_command_spec.rb +176 -0
  33. data/spec/comodule/deployment/helper/system_utility_spec.rb +250 -0
  34. data/spec/comodule/deployment/helper/uploader_spec.rb +274 -0
  35. data/spec/comodule/deployment/platform_spec.rb +310 -0
  36. data/spec/comodule_spec.rb +1 -1
  37. data/spec/rails/experiment/.gitignore +16 -0
  38. data/spec/rails/experiment/Gemfile +43 -0
  39. data/spec/rails/experiment/README.rdoc +28 -0
  40. data/spec/rails/experiment/Rakefile +6 -0
  41. data/spec/rails/experiment/app/assets/images/.keep +0 -0
  42. data/spec/rails/experiment/app/assets/javascripts/application.js +16 -0
  43. data/spec/rails/experiment/app/assets/javascripts/experiences.js.coffee +3 -0
  44. data/spec/rails/experiment/app/assets/stylesheets/application.css +15 -0
  45. data/spec/rails/experiment/app/assets/stylesheets/experiences.css.scss +3 -0
  46. data/spec/rails/experiment/app/assets/stylesheets/scaffolds.css.scss +69 -0
  47. data/spec/rails/experiment/app/controllers/application_controller.rb +5 -0
  48. data/spec/rails/experiment/app/controllers/concerns/.keep +0 -0
  49. data/spec/rails/experiment/app/controllers/experiences_controller.rb +74 -0
  50. data/spec/rails/experiment/app/helpers/application_helper.rb +2 -0
  51. data/spec/rails/experiment/app/helpers/experiences_helper.rb +2 -0
  52. data/spec/rails/experiment/app/mailers/.keep +0 -0
  53. data/spec/rails/experiment/app/models/.keep +0 -0
  54. data/spec/rails/experiment/app/models/concerns/.keep +0 -0
  55. data/spec/rails/experiment/app/models/experience.rb +2 -0
  56. data/spec/rails/experiment/app/views/experiences/_form.html.slim +12 -0
  57. data/spec/rails/experiment/app/views/experiences/edit.html.slim +8 -0
  58. data/spec/rails/experiment/app/views/experiences/index.html.slim +21 -0
  59. data/spec/rails/experiment/app/views/experiences/index.json.jbuilder +4 -0
  60. data/spec/rails/experiment/app/views/experiences/new.html.slim +5 -0
  61. data/spec/rails/experiment/app/views/experiences/show.html.slim +9 -0
  62. data/spec/rails/experiment/app/views/experiences/show.json.jbuilder +1 -0
  63. data/spec/rails/experiment/app/views/layouts/application.html.erb +14 -0
  64. data/spec/rails/experiment/bin/bundle +3 -0
  65. data/spec/rails/experiment/bin/rails +8 -0
  66. data/spec/rails/experiment/bin/rake +8 -0
  67. data/spec/rails/experiment/bin/spring +18 -0
  68. data/spec/rails/experiment/config.ru +4 -0
  69. data/spec/rails/experiment/config/application.rb +23 -0
  70. data/spec/rails/experiment/config/boot.rb +4 -0
  71. data/spec/rails/experiment/config/database.yml +25 -0
  72. data/spec/rails/experiment/config/environment.rb +5 -0
  73. data/spec/rails/experiment/config/environments/development.rb +37 -0
  74. data/spec/rails/experiment/config/environments/production.rb +78 -0
  75. data/spec/rails/experiment/config/environments/test.rb +39 -0
  76. data/spec/rails/experiment/config/experiment_unicorn.rb +104 -0
  77. data/spec/rails/experiment/config/initializers/assets.rb +8 -0
  78. data/spec/rails/experiment/config/initializers/backtrace_silencers.rb +7 -0
  79. data/spec/rails/experiment/config/initializers/cookies_serializer.rb +3 -0
  80. data/spec/rails/experiment/config/initializers/filter_parameter_logging.rb +4 -0
  81. data/spec/rails/experiment/config/initializers/inflections.rb +16 -0
  82. data/spec/rails/experiment/config/initializers/mime_types.rb +4 -0
  83. data/spec/rails/experiment/config/initializers/session_store.rb +3 -0
  84. data/spec/rails/experiment/config/initializers/wrap_parameters.rb +14 -0
  85. data/spec/rails/experiment/config/locales/en.yml +23 -0
  86. data/spec/rails/experiment/config/routes.rb +59 -0
  87. data/spec/rails/experiment/config/secrets.yml +22 -0
  88. data/spec/rails/experiment/db/migrate/20141004050218_create_experiences.rb +9 -0
  89. data/spec/rails/experiment/db/schema.rb +22 -0
  90. data/spec/rails/experiment/db/seeds.rb +7 -0
  91. data/spec/rails/experiment/lib/assets/.keep +0 -0
  92. data/spec/rails/experiment/lib/tasks/.keep +0 -0
  93. data/spec/rails/experiment/log/.keep +0 -0
  94. data/spec/rails/experiment/platform/.gitignore +5 -0
  95. data/spec/rails/experiment/platform/ami/cloud_formation/.keep +0 -0
  96. data/spec/rails/experiment/platform/ami/cloud_formation/template.json.erb +138 -0
  97. data/spec/rails/experiment/platform/ami/config.yml +5 -0
  98. data/spec/rails/experiment/platform/ami/config/.keep +0 -0
  99. data/spec/rails/experiment/platform/cloud_formation/.keep +0 -0
  100. data/spec/rails/experiment/platform/config.yml +18 -0
  101. data/spec/rails/experiment/platform/config/.keep +0 -0
  102. data/spec/rails/experiment/platform/config/nginx/conf.d/default.conf.erb +46 -0
  103. data/spec/rails/experiment/platform/config/nginx/nginx.conf.erb +53 -0
  104. data/spec/rails/experiment/platform/deployment/cloud_formation/.keep +0 -0
  105. data/spec/rails/experiment/platform/deployment/cloud_formation/template.json.erb +107 -0
  106. data/spec/rails/experiment/platform/deployment/config.yml +16 -0
  107. data/spec/rails/experiment/platform/deployment/config/.keep +0 -0
  108. data/spec/rails/experiment/public/404.html +67 -0
  109. data/spec/rails/experiment/public/422.html +67 -0
  110. data/spec/rails/experiment/public/500.html +66 -0
  111. data/spec/rails/experiment/public/favicon.ico +0 -0
  112. data/spec/rails/experiment/public/robots.txt +5 -0
  113. data/spec/rails/experiment/test/controllers/.keep +0 -0
  114. data/spec/rails/experiment/test/controllers/experiences_controller_test.rb +49 -0
  115. data/spec/rails/experiment/test/fixtures/.keep +0 -0
  116. data/spec/rails/experiment/test/fixtures/experiences.yml +7 -0
  117. data/spec/rails/experiment/test/helpers/.keep +0 -0
  118. data/spec/rails/experiment/test/helpers/experiences_helper_test.rb +4 -0
  119. data/spec/rails/experiment/test/integration/.keep +0 -0
  120. data/spec/rails/experiment/test/mailers/.keep +0 -0
  121. data/spec/rails/experiment/test/models/.keep +0 -0
  122. data/spec/rails/experiment/test/models/experience_test.rb +7 -0
  123. data/spec/rails/experiment/test/test_helper.rb +10 -0
  124. data/spec/rails/experiment/vendor/assets/javascripts/.keep +0 -0
  125. data/spec/rails/experiment/vendor/assets/stylesheets/.keep +0 -0
  126. data/spec/spec_helper.rb +3 -0
  127. data/spec/support/deployment/helper/shell_command_support.rb +34 -0
  128. data/spec/support/deployment/helper/uploader_support.rb +21 -0
  129. data/spec/support/deployment/platform_support.rb +32 -0
  130. metadata +262 -21
  131. data/lib/comodule/customize_class/hash_custom.rb +0 -20
  132. data/spec/comodule/customize_class/hash_custom_spec.rb +0 -32
@@ -0,0 +1,5 @@
1
+ /**/test
2
+ /**/tmp
3
+ /**/secret_config/*
4
+ /**/secret_config.yml
5
+ aws_config.yml
@@ -0,0 +1,2 @@
1
+ # aws_access_key_id: !str YOUR_ACCESS_KEY_ID
2
+ # aws_secret_access_key: !str YOUR_SECRET_ACCESS_KEY
@@ -1,3 +1,3 @@
1
1
  module Comodule
2
- VERSION = "0.0.4"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -0,0 +1,94 @@
1
+ require 'comodule'
2
+
3
+ namespace :comodule do
4
+
5
+ def platform
6
+ return @platform if @platform
7
+ platform_name = @args && @args.platform_name
8
+ env = {}
9
+
10
+ ['project_root', 'db_host', 'db_password', 'RAILS_ENV', 'env'].each do |env_name|
11
+ env[env_name.to_sym] = ENV[env_name] if ENV[env_name]
12
+ end
13
+
14
+ @platform = Comodule::Deployment::Platform.new(platform_name, env)
15
+ end
16
+
17
+ task :variables do |cmd, args|
18
+ @args = args
19
+ end
20
+
21
+ namespace :platform do
22
+
23
+ desc 'Create necessary directories and files for the platform'
24
+ task :create, [:platform_name] => [:environment, :variables] do
25
+ platform.create
26
+ end
27
+
28
+ desc 'Upload secret files'
29
+ task :upload_secret_files, [:platform_name] => [:environment, :variables] do
30
+ platform.upload_secret_files
31
+ end
32
+
33
+ desc "Download secret files"
34
+ task :download_secret_files, [:platform_name] => [:environment, :variables] do
35
+ platform.download_secret_files
36
+ end
37
+
38
+ desc "Upload project files"
39
+ task :upload_project, [:platform_name] => [:environment, :variables] do
40
+ platform.upload_project
41
+ end
42
+
43
+ desc 'Validate cloudFormation stack'
44
+ task :validate_template, [:platform_name] => :variables do
45
+ platform.cloud_formation.validate_template
46
+ end
47
+
48
+ desc 'Create cloudFormation stack'
49
+ task :create_stack, [:platform_name] => :variables do
50
+ platform.cloud_formation.create_stack
51
+ end
52
+
53
+ desc 'Delete cloudFormation stack'
54
+ task :delete_stack, [:platform_name] => :variables do
55
+ platform.cloud_formation.delete_stack
56
+ end
57
+
58
+ desc 'Provisioning'
59
+ task :provision, [:platform_name] => :variables do
60
+ platform.deploy
61
+ end
62
+
63
+ namespace :ssl do
64
+
65
+ desc "Describe IAM server certificates"
66
+ task :describe, [:platform_name] => :variables do
67
+ platform.ssl.describe
68
+ end
69
+
70
+ desc "Upload IAM server certificate"
71
+ task :upload, [:platform_name] => :variables do
72
+ platform.ssl.upload
73
+ end
74
+
75
+ desc "Delete IAM server certificate"
76
+ task :delete, [:platform_name] => :variables do
77
+ platform.ssl.delete
78
+ end
79
+ end
80
+
81
+ namespace :test do
82
+
83
+ desc 'Test of upload secret files'
84
+ task :upload_secret_files, [:platform_name] => [:environment, :variables] do
85
+ platform.upload_secret_files_test
86
+ end
87
+
88
+ desc "Test of download secret files"
89
+ task :download_secret_files, [:platform_name] => [:environment, :variables] do
90
+ platform.download_secret_files_test
91
+ end
92
+ end
93
+ end
94
+ end
@@ -1,7 +1,70 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Comodule::ConfigSupport do
4
+ describe 'cannot use the name same as a member of Object#methods' do
5
+ it do
6
+ hsh = {
7
+ host: 'example.com',
8
+ db: {
9
+ host: 'rds',
10
+ database: 'app_development',
11
+ username: 'ec2-user',
12
+ schedule: {
13
+ to_json: '08-00-00',
14
+ }
15
+ }
16
+ }
17
+ expect{Comodule::ConfigSupport::Config.new(hsh)}
18
+ .to raise_error(ArgumentError)
19
+ end
20
+ end
21
+
4
22
  describe '::Config' do
23
+ context '#+' do
24
+ it 'merge recusive' do
25
+ config = Comodule::ConfigSupport::Config.new(
26
+ host: 'example.com',
27
+ db: {
28
+ host: 'rds',
29
+ database: 'app_development',
30
+ username: 'ec2-user',
31
+ schedule: {
32
+ boot: '08-00-00',
33
+ }
34
+ }
35
+ )
36
+
37
+ config2 = Comodule::ConfigSupport::Config.new(
38
+ port: '3000',
39
+ db: {
40
+ host: 'rds',
41
+ password: 'secret',
42
+ schedule: {
43
+ shutdown: '22-00-00'
44
+ }
45
+ }
46
+ )
47
+
48
+ result = {
49
+ host: 'example.com',
50
+ port: '3000',
51
+ db: {
52
+ host: 'rds',
53
+ database: 'app_development',
54
+ username: 'ec2-user',
55
+ password: 'secret',
56
+ schedule: {
57
+ boot: '08-00-00',
58
+ shutdown: '22-00-00'
59
+ }
60
+ }
61
+ }
62
+
63
+ config += config2
64
+ expect(config.to_hash).to eq(result)
65
+ end
66
+ end
67
+
5
68
  context '#[], #[]=' do
6
69
  it 'like Hash' do
7
70
  config = Comodule::ConfigSupport::Config.new
@@ -28,6 +91,31 @@ describe Comodule::ConfigSupport do
28
91
  end
29
92
 
30
93
  context '#to_hash' do
94
+ it 'support recursive object' do
95
+ config = Comodule::ConfigSupport::Config.new(
96
+ configure_type: :hard,
97
+ host: 'example.com',
98
+ port: '3000',
99
+ db: {
100
+ host: 'rds',
101
+ database: 'app_development',
102
+ username: 'ec2-user',
103
+ password: 'secret'
104
+ }
105
+ )
106
+ hsh = config.to_hash
107
+ expect(hsh).to eq({
108
+ host: 'example.com',
109
+ port: '3000',
110
+ db: {
111
+ host: 'rds',
112
+ database: 'app_development',
113
+ username: 'ec2-user',
114
+ password: 'secret'
115
+ }
116
+ })
117
+ end
118
+
31
119
  it 'not include :cofigure_type' do
32
120
  config = Comodule::ConfigSupport::Config.new(
33
121
  configure_type: :hard,
@@ -44,6 +132,20 @@ describe Comodule::ConfigSupport do
44
132
  end
45
133
 
46
134
  context '.new' do
135
+ it 'support block' do
136
+ config = Comodule::ConfigSupport::Config.new do |config|
137
+ config.host = 'example.com'
138
+ config.port = '3000'
139
+ config.db = {
140
+ host: 'rds',
141
+ database: 'ec2-user',
142
+ password: 'secret'
143
+ }
144
+ expect(config.host).to eq('example.com')
145
+ expect(config.db.host).to eq('rds')
146
+ end
147
+ end
148
+
47
149
  it 'can specify each other configure_type to recursive object' do
48
150
  config = Comodule::ConfigSupport::Config.new(
49
151
  configure_type: :hard,
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+
3
+ describe Comodule::Deployment::Helper::Aws::CloudFormation do
4
+ include_context 'deployment.platform'
5
+
6
+ before do
7
+ platform.create
8
+ platform.config.aws_region = "ap-northeast-1"
9
+ end
10
+
11
+ describe '#cloud_formation' do
12
+ subject { platform.cloud_formation.cfn }
13
+
14
+ it 'is wrapper of AWS::CloudFormation' do
15
+ is_expected.to be_an_instance_of(AWS::CloudFormation)
16
+ end
17
+ end
18
+
19
+ describe '#stack_basename' do
20
+ subject { platform.cloud_formation.stack_basename }
21
+
22
+ context '#config.stack_name_prefix is blank' do
23
+
24
+ it do
25
+ is_expected.to eq("#{platform.project_name}-#{platform.name}")
26
+ end
27
+ end
28
+
29
+ context '#config.stack_name_prefix is not blank' do
30
+ before do
31
+ platform.config.stack_name_prefix = 'stacknameprefix'
32
+ end
33
+
34
+ it do
35
+ is_expected.to eq("#{platform.config.stack_name_prefix}-#{platform.name}")
36
+ end
37
+ end
38
+ end
39
+
40
+ let(:basename) { platform.cloud_formation.stack_basename }
41
+
42
+ let(:stacks) do
43
+ [
44
+ double('otherstack', name: 'otherstack-20141006'),
45
+ double('stack1', name: "#{basename}-20140101"),
46
+ double('stack2', name: "#{basename}-20131231"),
47
+ double('stack3', name: "#{basename}-20141006"),
48
+ double('stack4', name: "#{basename}-20140831")
49
+ ]
50
+ end
51
+
52
+ describe '#own_stacks' do
53
+ subject { platform.cloud_formation.own_stacks }
54
+
55
+ it 'returns own cloudFormation stacks' do
56
+ allow(platform.cloud_formation.cfn)
57
+ .to receive(:stacks).and_return(stacks)
58
+ is_expected.to eq(stacks[1..-1])
59
+ end
60
+ end
61
+
62
+ describe '#latest_stack' do
63
+ subject { platform.cloud_formation.latest_stack }
64
+
65
+ it 'returns latest cloudFormation stack' do
66
+ allow(platform.cloud_formation.cfn)
67
+ .to receive(:stacks).and_return(stacks)
68
+ expect(subject.name).to eq("#{basename}-20141006")
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,85 @@
1
+ require 'spec_helper'
2
+
3
+ describe Comodule::Deployment::Helper::Aws::S3 do
4
+ include_context 'deployment.platform'
5
+
6
+ before do
7
+ platform.create
8
+ end
9
+
10
+ let(:bucket_name) { 'comodule-test' }
11
+
12
+ describe '#s3' do
13
+ subject { platform.s3.s3 }
14
+
15
+ it 'is wrapper of AWS::S3' do
16
+ is_expected.to be_an_instance_of(AWS::S3)
17
+ end
18
+ end
19
+
20
+ describe '#bucket_name' do
21
+ subject { platform.s3.bucket_name }
22
+
23
+ before do
24
+ platform.config.s3_bucket = bucket_name
25
+ end
26
+
27
+ it '== #config.s3_bucket' do
28
+ is_expected.to eq(bucket_name)
29
+ end
30
+ end
31
+
32
+ describe '#bucket' do
33
+ subject { platform.s3.bucket }
34
+
35
+ let(:s3) { double('s3', 'buckets' => double('[]' => bucket_obj, 'create' => bucket_obj)) }
36
+ let(:bucket_obj) { double('bucket_obj', "exists?" => judge) }
37
+
38
+ before do
39
+ platform.config.s3_bucket = bucket_name
40
+ platform.s3.instance_variable_set :@s3, s3
41
+ end
42
+
43
+ context 'exists the S3 bucket' do
44
+ let(:judge) { true }
45
+
46
+ it 'returns the S3 bucket' do
47
+ allow(s3).to receive_message_chain('buckets.[]', bucket_name)
48
+ allow(bucket_obj).to receive(:exists?).and_return(true)
49
+ is_expected.to eq(bucket_obj)
50
+ end
51
+ end
52
+
53
+ context 'not exists the S3 bucket' do
54
+ let(:judge) { false }
55
+
56
+ it 'create the S3 bucket' do
57
+ allow(s3).to receive_message_chain('buckets.[]', bucket_name)
58
+ allow(bucket_obj).to receive(:exists?).and_return(false)
59
+ allow(s3).to receive_message_chain('buckets.create', bucket_name)
60
+ is_expected.to eq(bucket_obj)
61
+ end
62
+ end
63
+ end
64
+
65
+ describe '#local_to_cloud' do
66
+ subject { platform.s3.local_to_cloud(File.join(platform.secret_config_dir, 'secret.txt')) }
67
+
68
+ it "return a path on S3" do
69
+ is_expected.to eq("#{platform.name}/platform/#{platform.name}/secret_config/secret.txt")
70
+ end
71
+ end
72
+
73
+ describe '#cloud_to_local' do
74
+ let(:path) { File.join platform.secret_config_dir, 'secret.txt' }
75
+
76
+ subject do
77
+ s3_path = platform.s3.local_to_cloud(path)
78
+ platform.s3.cloud_to_local(s3_path)
79
+ end
80
+
81
+ it 'return a path in local' do
82
+ is_expected.to eq(path)
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,176 @@
1
+ require 'spec_helper'
2
+
3
+ describe Comodule::Deployment::Helper::ShellCommand do
4
+
5
+ include_context 'deployment.platform'
6
+ include_context 'deployment.helper.shell_command'
7
+
8
+ before do
9
+ platform.create
10
+ end
11
+
12
+ let(:test_command) { 'ls -la' }
13
+
14
+ describe '#dummy' do
15
+ subject { platform.dummy :`, test_command }
16
+
17
+ it 'return message to STDOUT' do
18
+ expect(platform).to receive(:puts).with(
19
+ "execute dummy method: `, args: #{[test_command]}"
20
+ )
21
+ subject
22
+ end
23
+ end
24
+
25
+ describe '#command_or_dummy' do
26
+ subject { platform.command_or_dummy test_command }
27
+
28
+ context 'not #deployment?' do
29
+ it 'return message to STDOUT' do
30
+ expect(platform).to receive(:puts).with(
31
+ "execute dummy method: `, args: #{[test_command]}"
32
+ )
33
+ subject
34
+ end
35
+ end
36
+
37
+ context '#deployment?' do
38
+ before do
39
+ platform.env = :staging
40
+ end
41
+
42
+ it 'execute shell command' do
43
+ expect(platform).to receive(:`).with(test_command)
44
+ subject
45
+ end
46
+ end
47
+ end
48
+
49
+ describe '#chown' do
50
+ subject { platform.chown }
51
+
52
+ context 'config.chown' do
53
+ context 'has a command' do
54
+ before do
55
+ platform.config.chown = test_command
56
+ end
57
+
58
+ it '#command_or_dummy receives the command' do
59
+ expect(platform).to receive(:command_or_dummy).with(
60
+ "chown #{test_command}"
61
+ )
62
+ subject
63
+ end
64
+ end
65
+
66
+ context 'has some commands' do
67
+ let(:commands) do
68
+ [
69
+ 'ec2-user:ec2-user /home/ec2-user/projects',
70
+ 'ec2-user:ec2-user /etc/nginx/nginx.conf',
71
+ 'ec2-user:ec2-user /home/ec2-user/db-backup'
72
+ ]
73
+ end
74
+
75
+ before do
76
+ platform.config.chown = commands
77
+ end
78
+
79
+ it '#command_or_dummy receives those commands' do
80
+ commands.each do |cmd|
81
+ expect(platform).to receive(:command_or_dummy).with("chown #{cmd}")
82
+ end
83
+ subject
84
+ end
85
+ end
86
+ end
87
+ end
88
+
89
+ describe '#crontab' do
90
+ subject { platform.crontab }
91
+
92
+ context 'exists a file' do
93
+ context 'in #common_crontab_dir' do
94
+ before do
95
+ be_crontab_files :common_crontab_dir, ['batch.rb']
96
+ end
97
+
98
+ it_behaves_like 'crontab messages', ['batch.rb']
99
+ end
100
+
101
+ context 'in #crontab_dir' do
102
+ before do
103
+ be_crontab_files :crontab_dir, ['batch.rb']
104
+ end
105
+
106
+ it_behaves_like 'crontab messages', ['batch.rb']
107
+ end
108
+
109
+ context 'in #secret_crontab_dir' do
110
+ before do
111
+ be_crontab_files :secret_crontab_dir, ['batch.rb']
112
+ end
113
+
114
+ it_behaves_like 'crontab messages', ['batch.rb']
115
+ end
116
+ end
117
+
118
+ context 'exists some files' do
119
+ commands1 = ['batch.rb', 'batch-2.rb', 'batch-3.rb']
120
+ commands2 = ['script.rb', 'script-2.rb', 'script-3.rb']
121
+ commands3 = ['exec.rb', 'exec-2.rb', 'exec-3.rb']
122
+
123
+ before do
124
+ be_crontab_files :common_crontab_dir, commands1
125
+ be_crontab_files :crontab_dir, commands2
126
+ be_crontab_files :secret_crontab_dir, commands3
127
+ end
128
+
129
+ it_behaves_like 'crontab messages', commands1 + commands2 + commands3
130
+ end
131
+ end
132
+
133
+ describe '#shell_script' do
134
+ subject { platform.shell_script }
135
+
136
+ context 'exists a file' do
137
+ context 'in #common_shell_script_dir' do
138
+ before do
139
+ be_shell_script_files :common_shell_script_dir, ['script.rb']
140
+ end
141
+
142
+ it_behaves_like 'shell script messages', ['script.rb']
143
+ end
144
+
145
+ context 'in #shell_script_dir' do
146
+ before do
147
+ be_shell_script_files :shell_script_dir, ['script.rb']
148
+ end
149
+
150
+ it_behaves_like 'shell script messages', ['script.rb']
151
+ end
152
+
153
+ context 'in #secret_shell_script_dir' do
154
+ before do
155
+ be_shell_script_files :secret_shell_script_dir, ['script.rb']
156
+ end
157
+
158
+ it_behaves_like 'shell script messages', ['script.rb']
159
+ end
160
+ end
161
+
162
+ context 'exists some files' do
163
+ scripts1 = ['scripts1-1.rb', 'scripts1-2.rb', 'scripts1-3.rb']
164
+ scripts2 = ['scripts2-1.rb', 'scripts2-2.rb', 'scripts2-3.rb']
165
+ scripts3 = ['scripts3-1.rb', 'scripts3-2.rb', 'scripts3-3.rb']
166
+
167
+ before do
168
+ be_shell_script_files :common_shell_script_dir, scripts1
169
+ be_shell_script_files :shell_script_dir, scripts2
170
+ be_shell_script_files :secret_shell_script_dir, scripts3
171
+ end
172
+
173
+ it_behaves_like 'shell script messages', scripts1 + scripts2 + scripts3
174
+ end
175
+ end
176
+ end