roro 0.3.14 → 0.3.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +35 -10
  3. data/Guardfile +7 -7
  4. data/lib/roro.rb +1 -1
  5. data/lib/roro/cli.rb +12 -76
  6. data/lib/roro/cli/base/check_dependencies.rb +0 -1
  7. data/lib/roro/cli/base/utilities.rb +0 -1
  8. data/lib/roro/cli/generate/config.rb +6 -8
  9. data/lib/roro/cli/generate/exposed.rb +14 -0
  10. data/lib/roro/cli/generate/{generate_keys.rb → keys.rb} +22 -0
  11. data/lib/roro/cli/generate/obfuscated.rb +17 -0
  12. data/lib/roro/cli/greenfield/rails.rb +36 -0
  13. data/lib/roro/cli/rollon.rb +2 -66
  14. data/lib/roro/cli/rollon/rails.rb +47 -0
  15. data/lib/roro/cli/rollon/{stories/rails → rails}/database.rb +3 -6
  16. data/lib/roro/cli/rollon/{stories/rails → rails}/database/with_mysql.rb +2 -2
  17. data/lib/roro/cli/rollon/{stories/rails → rails}/database/with_postgresql.rb +2 -2
  18. data/lib/roro/cli/rollon/ruby_gem.rb +1 -0
  19. data/lib/roro/cli/rollon/{stories/ruby_gem → ruby_gem}/with_ci_cd.rb +1 -1
  20. data/lib/roro/cli/rollon/stories.rb +2 -2
  21. data/lib/roro/cli/templates/base/.circleci/_defaults.yml +15 -0
  22. data/lib/roro/cli/templates/base/.circleci/_workflow.yml +2 -0
  23. data/lib/roro/cli/templates/base/.circleci/config.job-example.yml +33 -0
  24. data/lib/roro/cli/templates/base/.circleci/jobs/_build.yml +4 -0
  25. data/lib/roro/cli/templates/base/.circleci/jobs/_release.yml +12 -0
  26. data/lib/roro/cli/templates/base/.circleci/workflows/_build_release.yml +10 -0
  27. data/lib/roro/cli/templates/base/dotenv +1 -0
  28. data/lib/roro/cli/{rollon/stories/rails → templates/rails/.circleci}/.keep +0 -0
  29. data/lib/roro/cli/templates/rails/.circleci/_aliases.yml +8 -0
  30. data/lib/roro/cli/templates/rails/.circleci/config.yml.tt +15 -0
  31. data/lib/roro/cli/templates/rails/.circleci/jobs/_build.yml +16 -0
  32. data/lib/roro/cli/templates/rails/.circleci/jobs/_push.yml +23 -0
  33. data/lib/roro/cli/templates/rails/.circleci/jobs/_test.yml +10 -0
  34. data/lib/roro/cli/templates/rails/.circleci/setup-gem-credentials.sh +3 -0
  35. data/lib/roro/cli/templates/rails/.circleci/workflows/_build_test_push.yml +9 -0
  36. data/lib/roro/cli/templates/{base → rails}/.keep +0 -0
  37. data/lib/roro/cli/templates/{greenfield/Dockerfile.tt → rails/Dockerfile.greenfield.tt} +11 -7
  38. data/lib/roro/cli/templates/{base → rails}/config/database.mysql.yml +0 -0
  39. data/lib/roro/cli/templates/{base → rails}/config/database.pg.yml +0 -0
  40. data/lib/roro/cli/templates/{stories/rails → rails}/database/with_mysql/_service.yml +0 -0
  41. data/lib/roro/cli/templates/{stories/rails → rails}/database/with_postgresql/.keep +0 -0
  42. data/lib/roro/cli/templates/{stories/rails → rails}/database/with_postgresql/_service.yml +0 -0
  43. data/lib/roro/cli/{rollon/stories/database.rb → templates/rails/dotenv/.keep} +0 -0
  44. data/lib/roro/cli/templates/rails/dotenv/database.mysql.env.tt +3 -0
  45. data/lib/roro/cli/templates/rails/dotenv/database.pg.env.tt +4 -0
  46. data/lib/roro/cli/templates/rails/dotenv/web.env.tt +2 -0
  47. data/lib/roro/cli/templates/rails/roro/.keep +0 -0
  48. data/lib/roro/cli/templates/rails/roro/containers/.keep +0 -0
  49. data/lib/roro/cli/templates/rails/roro/containers/app/.keep +0 -0
  50. data/lib/roro/cli/templates/{base → rails/roro/containers/app}/Dockerfile.tt +18 -9
  51. data/lib/roro/cli/templates/rails/roro/containers/frontend/.keep +0 -0
  52. data/lib/roro/cli/templates/rails/roro/docker-compose.yml.tt +59 -0
  53. data/lib/roro/cli/templates/rails/roro/docker-entrypoint.sh.tt +8 -0
  54. data/lib/roro/cli/templates/rails/roro/roro/.keep +0 -0
  55. data/lib/roro/cli/templates/rails/roro/roro/containers/.keep +0 -0
  56. data/lib/roro/cli/templates/rails/roro/roro/containers/app/.keep +0 -0
  57. data/lib/roro/cli/templates/rails/roro/roro/containers/frontend/.keep +0 -0
  58. data/lib/roro/cli/templates/rails/roro/roro/docker-entrypoint.sh.tt +8 -0
  59. data/lib/roro/cli/templates/roro/docker-compose.yml.tt +4 -4
  60. data/lib/roro/cli/templates/ruby_gem/.circleci/config.yml.tt +9 -33
  61. data/lib/roro/cli/templates/stories/with_mysql/_service.yml +2 -2
  62. data/lib/roro/cli/templates/stories/with_postgresql/_service.yml +2 -2
  63. data/lib/roro/version.rb +1 -1
  64. data/roro.gemspec +5 -5
  65. data/vendor/cache/apparition-0.6.0.gem +0 -0
  66. data/vendor/cache/capybara-3.33.0.gem +0 -0
  67. data/vendor/cache/childprocess-3.0.0.gem +0 -0
  68. data/vendor/cache/handsome_fencer-crypto-0.1.9.gem +0 -0
  69. data/vendor/cache/handsome_fencer-test-0.2.2.gem +0 -0
  70. data/vendor/cache/mini_mime-1.0.2.gem +0 -0
  71. data/vendor/cache/regexp_parser-1.7.1.gem +0 -0
  72. data/vendor/cache/rubyzip-2.3.0.gem +0 -0
  73. data/vendor/cache/selenium-webdriver-3.142.7.gem +0 -0
  74. data/vendor/cache/shoulda-2.11.3.gem +0 -0
  75. data/vendor/cache/shoulda-context-2.0.0.rc2.gem +0 -0
  76. data/vendor/cache/shoulda-matchers-4.4.1.gem +0 -0
  77. data/vendor/cache/websocket-driver-0.7.3.gem +0 -0
  78. data/vendor/cache/websocket-extensions-0.1.5.gem +0 -0
  79. data/vendor/cache/xpath-3.2.0.gem +0 -0
  80. metadata +94 -72
  81. data/lib/roro/cli/cli.rb +0 -99
  82. data/lib/roro/cli/expose.rb +0 -14
  83. data/lib/roro/cli/greenfield.rb +0 -31
  84. data/lib/roro/cli/obfuscate.rb +0 -19
  85. data/lib/roro/cli/rollon/stories/rails.rb +0 -1
  86. data/lib/roro/cli/rollon/stories/ruby_gem.rb +0 -77
  87. data/lib/roro/cli/ruby_gem.rb +0 -67
  88. data/vendor/cache/actionpack-6.0.3.2.gem +0 -0
  89. data/vendor/cache/actionview-6.0.3.2.gem +0 -0
  90. data/vendor/cache/builder-3.2.4.gem +0 -0
  91. data/vendor/cache/crass-1.0.6.gem +0 -0
  92. data/vendor/cache/erubi-1.9.0.gem +0 -0
  93. data/vendor/cache/handsome_fencer-crypto-0.1.6.gem +0 -0
  94. data/vendor/cache/handsome_fencer-test-0.1.1.gem +0 -0
  95. data/vendor/cache/loofah-2.6.0.gem +0 -0
  96. data/vendor/cache/minitest-rails-6.0.1.gem +0 -0
  97. data/vendor/cache/rails-dom-testing-2.0.3.gem +0 -0
  98. data/vendor/cache/rails-html-sanitizer-1.3.0.gem +0 -0
  99. data/vendor/cache/railties-6.0.3.2.gem +0 -0
  100. data/vendor/cache/shoulda-4.0.0.gem +0 -0
  101. data/vendor/cache/shoulda-context-2.0.0.gem +0 -0
  102. data/vendor/cache/shoulda-matchers-4.3.0.gem +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 23af0aef63d401cf4307914b6900fca6c65204b7
4
- data.tar.gz: c5ec5625d41f98dcf412e8d80f636a45c8dcde31
3
+ metadata.gz: c21dea82b0e30a105b0ac41e03d9630418672d63
4
+ data.tar.gz: 7eb7950531987c7a93a8f1e21b286c1d149b2eb0
5
5
  SHA512:
6
- metadata.gz: 868731a885948198f1a876b554ff538abed022794b03c51c87f5906b817290c487f26e0f5e472315ae3462a90a42b11240de005d5b11581d728567e3153b543d
7
- data.tar.gz: b1fcbe257489a6c0ef5d00054d9a18e7c8e98fdd4ce9aa81f88a838aaab163448be4e40996d47a12ae1724b5fa4a206e6536f518f934f7edf636748e53d209f5
6
+ metadata.gz: bd8d5fd5b9b5b51c4063b8b167aadb3f00d7f87e2f7928730eee9ca281bc30a65131e15fd73757ec87ae61fc8c01cc7fa5399389bc29c64f673f1aca97ad70c2
7
+ data.tar.gz: 23cfe00c8535806eb5102db12325e70392abf942fe32749d5dfc7f44525e5694e6a1fb9664fa1fba23bcde86a431d4446b5f3cd28b47ebbfb9b489d72de4dd6e
@@ -1,22 +1,47 @@
1
+ aliases:
2
+ - &workspace-location
3
+ at: /tmp/workspace
4
+ - &copy-ci-dotenv |
5
+ cp -rf /tmp/workspace/roro .
6
+ - &source-ci-variables |
7
+ echo 'source roro/containers/app/ci.env' >> $BASH_ENV
8
+ source $BASH_ENV
9
+
10
+ defaults: &defaults
11
+ executor: machine-executor
12
+ working_directory: ~/project
13
+
1
14
  version: 2.1
2
15
 
16
+ executors:
17
+ machine-executor:
18
+ machine: true
19
+ ruby-executor:
20
+ docker:
21
+ - image: cimg/ruby:2.7
22
+
3
23
  jobs:
4
24
 
5
25
  build:
6
- machine: true
26
+ <<: *defaults
7
27
  steps:
8
28
  - checkout
9
29
 
10
- test-cli:
11
- machine: true
30
+ test-rollon-rails:
31
+ executor: ruby-executor
12
32
  steps:
13
33
  - checkout
14
- - run: gem install --local pkg/roro-0.3.12.gem
15
- - run: roro greenfield --force
16
-
34
+ - setup_remote_docker:
35
+ version: 19.03.12
36
+ - run: |
37
+ rake install
38
+ mkdir greenfield
39
+ cd greenfield
40
+ (yes || true) | roro greenfield
41
+ - run: echo 'success'
17
42
 
18
43
  test:
19
- machine: true
44
+ <<: *defaults
20
45
  steps:
21
46
  - checkout
22
47
  - run: RUBY_VERSION=2.5 docker-compose build ruby_gem
@@ -30,7 +55,7 @@ jobs:
30
55
  - run: RUBY_VERSION=2.7 docker-compose run ruby_gem bundle exec rake test
31
56
 
32
57
  release:
33
- machine: true
58
+ <<: *defaults
34
59
  steps:
35
60
  - checkout
36
61
  - run: gem install roro
@@ -47,10 +72,10 @@ jobs:
47
72
  workflows:
48
73
  version: 2
49
74
 
50
- build-release:
75
+ build-cli:
51
76
  jobs:
52
77
  - build
53
- - test-cli:
78
+ - test-rollon-rails:
54
79
  filters:
55
80
  branches:
56
81
  only: development
data/Guardfile CHANGED
@@ -1,17 +1,17 @@
1
- # A sample Guardfile
2
- # More info at https://github.com/guard/guard#readme
3
-
4
1
  options = {
5
- cli: '-f',
6
2
  all_on_start: true,
7
- all_after_pass: true
3
+ all_after_pass: true,
8
4
  }
9
5
 
10
6
  guard :minitest, options do
11
7
 
12
- watch(%r{^test/(.*)\/?test_(.*)\.rb$})
13
8
  watch(%r{^test/(.*)\/?(.*)_test\.rb$})
14
9
  watch(%r{^lib/roro/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
15
10
  watch(%r{^test/thor_helper\.rb$}) { 'test' }
16
- watch(%r{^test/fixtures/files/(.*/)?([^/]+)\.yml$}) { 'test' }
11
+ watch(%r{^lib/roro/cli/(.+)\.rb$}) { |m| "test/cli/#{m[1]}_test.rb" }
12
+ watch(%r{^lib/roro/cli/templates/base(.+)\.yml$}) { |m| "test/cli" }
13
+ watch(%r{^lib/roro/cli/templates/rollon(.+)\.yml$}) { |m| "test/cli/rollon" }
14
+ watch(%r{^lib/roro/cli/templates/rollon(.+)\.tt$}) { |m| "test/cli/rollon" }
15
+ watch(%r{^lib/roro/cli/templates/greenfield(.+)\.yml$}) { |m| "test/cli/greenfield" }
16
+ watch(%r{^lib/roro/cli/templates/greenfield(.+)\.tt$}) { |m| "test/cli/greenfield" }
17
17
  end
@@ -1,5 +1,5 @@
1
- require "roro/version"
2
1
  require "thor"
2
+ require "roro/version"
3
3
  require "roro/cli"
4
4
 
5
5
  module Roro
@@ -1,13 +1,17 @@
1
1
  require 'roro/cli/base/base'
2
- require 'roro/cli/greenfield'
3
- require 'roro/cli/obfuscate'
4
- require 'roro/cli/expose'
5
- require 'roro/cli/generate/config/rails'
6
- require 'roro/cli/generate/config'
7
- require 'roro/cli/generate/generate_keys'
8
2
  require 'roro/cli/configuration'
9
-
3
+ require 'roro/cli/generate/config'
4
+ require 'roro/cli/generate/exposed'
5
+ require 'roro/cli/generate/keys'
6
+ require 'roro/cli/generate/obfuscated'
7
+ require 'roro/cli/greenfield/rails'
10
8
  require 'roro/cli/rollon'
9
+ require 'roro/cli/rollon/rails'
10
+ require 'roro/cli/rollon/rails/database/with_mysql'
11
+ require 'roro/cli/rollon/rails/database/with_postgresql'
12
+
13
+ require 'roro/cli/rollon/ruby_gem'
14
+
11
15
  module Roro
12
16
 
13
17
  class CLI < Thor
@@ -16,74 +20,6 @@ module Roro
16
20
 
17
21
  def self.source_root
18
22
  File.dirname(__FILE__) + '/cli/templates'
19
- end
20
-
21
-
22
- desc "rollon::rails", "Generates files for and makes changes to your app
23
- so it can run using Docker containers."
24
- method_option :interactive, desc: "Set up your environment variables as
25
- you go."
26
- map "rollon::rails" => "rollon_rails"
27
-
28
- def rollon_rails
29
- rollon
30
- end
31
-
32
-
33
- desc "greenfield::rails", "Greenfield a new, dockerized rails app with
34
- either MySQL or PostgreSQL in a separate container."
35
-
36
- method_option :env_vars, type: :hash, default: {}, desc: "Pass a list of environment variables like so: env:var", banner: "key1:value1 key2:value2"
37
- method_option :interactive, desc: "Set up your environment variables as you go."
38
- method_option :force, desc: "force over-write of existing files"
39
-
40
- map "greenfield::rails" => "greenfield_rails"
41
-
42
- def greenfield_rails(*args)
43
- greenfield(*args)
44
- end
45
- desc "generate::exposed", "Generate private .env files from
46
- encrypted .env.enc files inside the roro directory."
47
- map "generate::exposed" => "generate_exposed"
48
-
49
- def generate_exposed(*args)
50
- expose(*args)
51
- end
52
-
53
- desc "generate::key", "Generate a key inside roro/keys. Takes the name of
54
- an environment as an argument to private .env files from
55
- encrypted .env.enc files inside the roro directory.
56
- Expose encrypted files"
57
-
58
- map "generate::key" => "generate_key"
59
- method_option :environment, type: :hash, default: {}, desc: "Pass a list of environment variables like so: env:var", banner: "development, staging"
60
-
61
- def generate_key(*args)
62
- generate_key_or_keys(*args)
63
- end
64
-
65
- desc "generate::keys", "Generate keys for each environment inside roro/keys.
66
- If you have .env files like 'roro/containers/app/[staging_env].env' and
67
- 'roro/[circle_ci_env].env' it will generate '/roro/keys/[staging_env].key'
68
- and '/roro/keys/[circle_ci_env].key'."
69
- map "generate::keys" => "generate_keys"
70
-
71
- def generate_keys(*args)
72
- generate_key(*args)
73
- end
74
-
75
- desc "generate::config", "Generate a config file at .roro_config.yml"
76
- map "generate::config" => "generate_config"
77
-
78
- def generate_config
79
- create_file ".roro_config.yml", @config.app.to_yaml
80
- end
81
-
82
- desc "generate::obfuscated", "obfuscates any files matching the pattern ./roro/**/*.env"
83
- map "generate::obfuscated" => "generate_obfuscated"
84
-
85
- def generate_obfuscated(*args)
86
- obfuscate(*args)
87
- end
23
+ end
88
24
  end
89
25
  end
@@ -53,7 +53,6 @@ module Roro
53
53
  remove_clashes.each {|c| system c }
54
54
  end
55
55
  end
56
-
57
56
  def confirm_dependency(options)
58
57
  msg = []
59
58
  msg << ""
@@ -1,4 +1,3 @@
1
-
2
1
  module Roro
3
2
 
4
3
  class CLI < Thor
@@ -1,13 +1,11 @@
1
1
  module Roro
2
2
  class CLI < Thor
3
- include Thor::Actions
4
3
 
5
- # desc "generate::config::roro", "Generate a config file at .roro_config.yml"
6
- # map "generate::config::roro" => "generate_roro_config"
7
-
8
-
9
- # def generate_roro_config
10
- # create_file ".roro_config.yml", @config.app.to_yaml
11
- # end
4
+ desc "generate::config", "Generate a config file at .roro_config.yml"
5
+ map "generate::config" => "generate_config"
6
+
7
+ def generate_config
8
+ create_file ".roro_config.yml", @config.app.to_yaml
9
+ end
12
10
  end
13
11
  end
@@ -0,0 +1,14 @@
1
+ module Roro
2
+ class CLI < Thor
3
+
4
+ desc "generate::exposed", "Generate private .env files from encrypted .env.enc files inside the roro directory."
5
+ map "generate::exposed" => "generate_exposed"
6
+
7
+ def generate_exposed(*args)
8
+ environments = args.first ? [args.first] : gather_environments
9
+ environments.each do |environment|
10
+ HandsomeFencer::Crypto.expose(environment, 'roro')
11
+ end
12
+ end
13
+ end
14
+ end
@@ -2,6 +2,28 @@ module Roro
2
2
 
3
3
  class CLI < Thor
4
4
 
5
+ desc "generate::key", "Generate a key inside roro/keys. Takes the name of
6
+ an environment as an argument to private .env files from
7
+ encrypted .env.enc files inside the roro directory.
8
+ Expose encrypted files"
9
+
10
+ map "generate::key" => "generate_key"
11
+ method_option :environment, type: :hash, default: {}, desc: "Pass a list of environment variables like so: env:var", banner: "development, staging"
12
+
13
+ def generate_key(*args)
14
+ generate_key_or_keys(*args)
15
+ end
16
+
17
+ desc "generate::keys", "Generate keys for each environment inside roro/keys.
18
+ If you have .env files like 'roro/containers/app/[staging_env].env' and
19
+ 'roro/[circle_ci_env].env' it will generate '/roro/keys/[staging_env].key'
20
+ and '/roro/keys/[circle_ci_env].key'."
21
+ map "generate::keys" => "generate_keys"
22
+
23
+ def generate_keys(*args)
24
+ generate_key(*args)
25
+ end
26
+
5
27
  no_commands do
6
28
 
7
29
  def generate_key_or_keys(*args)
@@ -0,0 +1,17 @@
1
+ require 'handsome_fencer/crypto'
2
+
3
+ module Roro
4
+
5
+ class CLI < Thor
6
+
7
+ desc "generate::obfuscated", "obfuscates any files matching the pattern ./roro/**/*.env"
8
+ map "generate::obfuscated" => "generate_obfuscated"
9
+
10
+ def generate_obfuscated(*args)
11
+ environments = args.first ? [args.first] : gather_environments
12
+ environments.each do |environment|
13
+ HandsomeFencer::Crypto.obfuscate(environment, 'roro')
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,36 @@
1
+ module Roro
2
+
3
+ class CLI < Thor
4
+
5
+ desc "greenfield::rails", "Greenfield a new, dockerized rails app with
6
+ either MySQL or PostgreSQL in a separate container."
7
+
8
+ method_option :env_vars, type: :hash, default: {}, desc: "Pass a list of environment variables like so: env:var", banner: "key1:value1 key2:value2"
9
+ method_option :interactive, desc: "Set up your environment variables as you go."
10
+ method_option :force, desc: "force over-write of existing files"
11
+
12
+ map "greenfield::rails" => "greenfield_rails"
13
+
14
+ def greenfield_rails(*args)
15
+ confirm_directory_empty
16
+ configure_for_rollon
17
+ copy_greenfield_files
18
+ run_greenfield_commands
19
+ rollon_rails(*args)
20
+ end
21
+
22
+ no_commands do
23
+
24
+ def copy_greenfield_files
25
+ @config.app['force'] = true
26
+ src = 'rails/Dockerfile.greenfield.tt'
27
+ dest = 'roro/containers/app/Dockerfile'
28
+ template src, dest, @config.app
29
+ end
30
+
31
+ def run_greenfield_commands
32
+ system "DOCKER_BUILDKIT=1 docker build --file roro/containers/app/Dockerfile --output . ."
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,29 +1,10 @@
1
- require 'roro/cli/rollon/stories'
2
-
3
1
  module Roro
4
-
5
2
  class CLI < Thor
6
-
7
- desc "rollon", "Generates files for and makes changes to your app
8
- so it can run using Docker containers."
9
- method_option :interactive, desc: "Set up your environment variables as
10
- you go."
11
-
12
- def rollon
13
- confirm_directory_not_empty
14
- confirm_dependencies
15
- remove_roro_artifacts
16
-
17
- configure_for_rollon
18
-
19
- copy_roro_files
20
- generate_config
21
- startup_commands
22
- end
23
-
3
+
24
4
  no_commands do
25
5
 
26
6
  def configure_for_rollon
7
+ confirm_dependencies
27
8
  @config ||= Roro::Configuration.new(options)
28
9
  end
29
10
 
@@ -31,54 +12,9 @@ module Roro
31
12
  File.read(File.dirname(__FILE__) + "/templates/#{file}")
32
13
  end
33
14
 
34
- def copy_roro_files
35
- configure_database
36
- directory 'roro', './', @config.app
37
- template 'base/Dockerfile.tt', 'roro/containers/app/Dockerfile', @config.app
38
- take_thor_actions
39
- end
40
-
41
15
  def take_thor_actions
42
16
  @config.thor_actions.each {|k, v| eval(k) if v.eql?('y') }
43
17
  end
44
-
45
- def startup_commands
46
- system 'docker-compose build'
47
- system 'docker-compose run web bundle'
48
- system 'docker-compose run web bin/rails webpacker:install'
49
- system 'docker-compose run web bin/rails yarn:install'
50
- system 'docker-compose run web bin/rails db:create'
51
- system 'docker-compose run web bin/rails db:migrate'
52
- system 'docker-compose up'
53
- end
54
-
55
- def confirm_directory_empty
56
- confirm = confirm_dependency({
57
- system_query: "ls -A",
58
- warning: "this is not an empty directory. Roro will not greenfield a new Rails app unless either a) the current directory is empty or b) you run greenfield with the --force flag",
59
- suggestion: "$ roro greenfield --force",
60
- conditional: "Dir.glob('*').empty?" })
61
- confirm || true
62
- end
63
-
64
-
65
- def confirm_dependency(options)
66
- msg = []
67
- msg << ""
68
- msg << delineator
69
- msg << "It looks like #{options[:warning]}. The following bash command returns false:"
70
- msg << "\t$ #{options[:system_query]}"
71
- msg << "Please try these instructions:"
72
- msg << ("\t" + options[:suggestion])
73
- msg << delineator
74
- conditional = options[:conditional] ? eval(options[:conditional]) : system(options[:system_query])
75
- if conditional == false
76
- raise(Roro::Error.new(msg.join("\n\n")))
77
- else
78
- true
79
- end
80
- end
81
-
82
18
  end
83
19
  end
84
20
  end
@@ -0,0 +1,47 @@
1
+ require 'roro/cli/rollon/stories'
2
+ require 'roro/cli/rollon/rails/database'
3
+
4
+ module Roro
5
+
6
+ class CLI < Thor
7
+
8
+ desc "rollon::rails", "Generates files for and makes changes to your app
9
+ so it can run using Docker containers."
10
+ method_option :interactive, desc: "Set up your environment variables as
11
+ you go."
12
+ map "rollon::rails" => "rollon_rails"
13
+
14
+ def rollon_rails(*args)
15
+ confirm_directory_not_empty
16
+ confirm_dependencies
17
+ configure_for_rollon
18
+ copy_rails_files
19
+ generate_config
20
+ startup_commands
21
+ end
22
+
23
+ no_commands do
24
+
25
+ def copy_rails_files
26
+ template 'rails/.circleci/config.yml.tt', './.circleci/config.yml'
27
+ configure_database
28
+ directory 'roro', './', @config.app
29
+ template 'base/dotenv', './.env', @config.app
30
+ directory 'rails/roro', './roro', @config.app
31
+ take_thor_actions
32
+ end
33
+
34
+ def startup_commands
35
+ success_msg = "'\n\n#{'*' * 5 }\n\nYour Rails app is available at http://localhost:3000/'\n\n#{'*' * 5 }"
36
+ system 'docker-compose build'
37
+ system 'docker-compose run web bundle'
38
+ system 'docker-compose run web bin/rails webpacker:install'
39
+ system 'docker-compose run web bin/rails yarn:install'
40
+ system 'docker-compose run web bin/rails db:create'
41
+ system 'docker-compose run web bin/rails db:migrate'
42
+ system 'docker-compose up -d'
43
+ system "docker-compose run web echo '\n\nYour Rails app is available at http://localhost:3000/'"
44
+ end
45
+ end
46
+ end
47
+ end