roro 0.3.22 → 0.3.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (333) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +99 -68
  3. data/.gitignore +31 -7
  4. data/.ruby-version +1 -0
  5. data/Gemfile +1 -1
  6. data/Guardfile +23 -13
  7. data/README.md +9 -10
  8. data/bin/console +1 -1
  9. data/bin/setup +1 -1
  10. data/docker-compose.yml +3 -3
  11. data/lib/roro/cli/generate/generate.rb +52 -1
  12. data/lib/roro/cli/generate/generate_containers.rb +23 -0
  13. data/lib/roro/cli/generate/generate_environments.rb +25 -0
  14. data/lib/roro/cli/generate/generate_exposed.rb +4 -11
  15. data/lib/roro/cli/generate/generate_keys.rb +7 -6
  16. data/lib/roro/cli/generate/generate_mise.rb +13 -0
  17. data/lib/roro/cli/generate/generate_obfuscated.rb +5 -25
  18. data/lib/roro/cli/roll_your_own.rb +12 -0
  19. data/lib/roro/cli/rollon.rb +11 -138
  20. data/lib/roro/cli.rb +30 -23
  21. data/lib/roro/common/file_reflection.rb +33 -0
  22. data/lib/roro/common/utilities.rb +185 -0
  23. data/lib/roro/configurator.rb +14 -14
  24. data/lib/roro/configurators/adventure_case_builder.rb +65 -0
  25. data/lib/roro/configurators/adventure_chooser.rb +46 -0
  26. data/lib/roro/configurators/adventure_picker.rb +68 -0
  27. data/lib/roro/configurators/adventure_writer.rb +34 -0
  28. data/lib/roro/configurators/catalog_builder.rb +17 -0
  29. data/lib/roro/configurators/configurator.rb +64 -0
  30. data/lib/roro/configurators/eligibility.rb +141 -0
  31. data/lib/roro/configurators/question_asker.rb +29 -0
  32. data/lib/roro/configurators/question_builder.rb +83 -0
  33. data/lib/roro/configurators/structure_builder.rb +34 -0
  34. data/lib/roro/configurators/utilities.rb +188 -0
  35. data/lib/roro/configurators/validator.rb +109 -0
  36. data/lib/roro/crypto/cipher.rb +35 -0
  37. data/lib/roro/crypto/exposer.rb +33 -0
  38. data/lib/roro/crypto/file_writer.rb +14 -0
  39. data/lib/roro/crypto/key_writer.rb +35 -0
  40. data/lib/roro/crypto/obfuscator.rb +25 -0
  41. data/lib/roro/error.rb +31 -0
  42. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/fatsufodo.yml +1 -0
  43. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/django.yml +38 -0
  44. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/templates/stage_one/Dockerfile.tt +7 -0
  45. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/templates/stage_one/docker-compose.yml.tt +20 -0
  46. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/templates/stage_one/requirements.txt.tt +2 -0
  47. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/templates/stage_two/settings.py +130 -0
  48. data/lib/roro/{templates/base/jumpstart → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/test/stage_one/dummy}/.keep +0 -0
  49. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/test/stage_one/stage_one_test.rb +37 -0
  50. data/lib/roro/{templates/base/roro → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/test/stage_two/dummy}/.keep +0 -0
  51. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/expressjs/expressjs.yml +8 -0
  52. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/expressjs/templates/stage_one/Dockerfile.tt +14 -0
  53. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/expressjs/templates/stage_one/docker-compose.yml.tt +21 -0
  54. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/flask.yml +14 -0
  55. data/lib/roro/{templates/base/roro/roro → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one}/.keep +0 -0
  56. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one/Dockerfile +11 -0
  57. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one/app.py +23 -0
  58. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one/docker-compose.yml +8 -0
  59. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one/requirements.txt +2 -0
  60. data/lib/roro/{templates/base/roro/roro/containers → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/test}/.keep +0 -0
  61. data/lib/roro/{templates/base/roro/roro/containers/app → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/test/stage_one}/.keep +0 -0
  62. data/lib/roro/{templates/base/roro/roro/containers/frontend → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/test/stage_one/stage_dummy}/.keep +0 -0
  63. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/test/stage_one/stage_test.rb +37 -0
  64. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/rails.yml +12 -0
  65. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_one/Dockerfile.tt +16 -0
  66. data/lib/roro/{templates/base/roro/roro/keys/.keep → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_one/Gemfile.lock.tt} +0 -0
  67. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_one/Gemfile.tt +2 -0
  68. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_one/docker-compose.yml.tt +9 -0
  69. data/lib/roro/{templates/base/roro/roro/docker-entrypoint.sh.tt → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_one/entrypoint.sh} +1 -1
  70. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_two/database.yml.tt +16 -0
  71. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/wordpress/templates/stage_one/docker-compose.yml.tt +31 -0
  72. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/wordpress/wordpress.yml +17 -0
  73. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/okonomi.yml +1 -0
  74. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/roll_your_own.yml +23 -0
  75. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/%interpolated_story_name%.yml.tt +10 -0
  76. data/lib/roro/{templates/rails/.circleci → stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/templates/stage_one}/.keep +0 -0
  77. data/lib/roro/{templates/rails → stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/test}/.keep +0 -0
  78. data/lib/roro/{templates/rails/database/with_postgresql → stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/test/stage_one}/.keep +0 -0
  79. data/lib/roro/{templates/rails/dotenv → stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/test/stage_one/stage_dummy}/.keep +0 -0
  80. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/test/stage_one/stage_test.rb.tt +37 -0
  81. data/lib/roro/{templates/rails/roro → stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/test/stage_one/dummy}/.keep +0 -0
  82. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/test/stage_one/stage_one_test.rb +58 -0
  83. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/omakase.yml +1 -0
  84. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/rails.yml +13 -0
  85. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/Dockerfile.tt +16 -0
  86. data/lib/roro/{templates/rails/roro/containers/.keep → stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/Gemfile.lock.tt} +0 -0
  87. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/Gemfile.tt +2 -0
  88. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/docker-compose.yml.tt +17 -0
  89. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/entrypoint.sh +8 -0
  90. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_two/database.yml.tt +16 -0
  91. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/.env +38 -0
  92. data/lib/roro/{templates/rails/roro/containers/app → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one}/.keep +0 -0
  93. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/LICENSE +674 -0
  94. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/README.md +346 -0
  95. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/build.sh +39 -0
  96. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/nginx/cfg/nginx-custom-configs.conf +117 -0
  97. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/nginx/cfg/nginx-wp-hardening.conf +131 -0
  98. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/nginx/tpl/nginx-http.conf.template +103 -0
  99. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/nginx/tpl/nginx-https.conf.example +123 -0
  100. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/php.conf.ini +3 -0
  101. data/lib/roro/{templates/rails/roro/containers/frontend/.keep → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/data/certbot/conf/.placeholder} +0 -0
  102. data/lib/roro/{templates/rails/roro/keys/.keep → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/data/certbot/www/.placeholder} +0 -0
  103. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/docker-compose-build.yml +24 -0
  104. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/docker-compose-dev.yml +96 -0
  105. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/docker-compose-prod.yml +147 -0
  106. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/dump_mysql.sh +16 -0
  107. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/init_letsencrypt.sh +80 -0
  108. data/lib/roro/{templates/rails/roro/kube/.keep → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/mysql-dumps/.placeholder} +0 -0
  109. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/push.sh +22 -0
  110. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/wordpress/Dockerfile +14 -0
  111. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/wordpress/adduser.sh +15 -0
  112. data/lib/roro/{templates/rails/roro/kube/certificate.yml.tt → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/wordpress-sql/.placeholder} +0 -0
  113. data/lib/roro/{templates/rails/roro/kube/cluster-issuer.yml.tt → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/wordpress-src/.placeholder} +0 -0
  114. data/lib/roro/{templates/ruby_gem/.circleci → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/test}/.keep +0 -0
  115. data/lib/roro/{templates/ruby_gem/roro/containers → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/test/stage_one}/.keep +0 -0
  116. data/lib/roro/{templates/ruby_gem/roro/keys → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/test/stage_one/stage_dummy}/.keep +0 -0
  117. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/test/stage_one/stage_test.rb +40 -0
  118. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/wordpress.yml +76 -0
  119. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/fatsufodo.yml +1 -0
  120. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/django.yml +36 -0
  121. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_one/Dockerfile.tt +7 -0
  122. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_one/docker-compose.yml.tt +20 -0
  123. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_one/requirements.txt.tt +2 -0
  124. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_two/settings.py +130 -0
  125. data/{roro/containers → lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/test/stage_one/dummy}/.keep +0 -0
  126. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/test/stage_one/stage_one_test.rb +37 -0
  127. data/{roro/keys → lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/test/stage_two/dummy}/.keep +0 -0
  128. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/expressjs/expressjs.yml +7 -0
  129. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/expressjs/templates/stage_one/Dockerfile.tt +14 -0
  130. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/expressjs/templates/stage_one/docker-compose.yml.tt +21 -0
  131. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/rails.yml +12 -0
  132. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/Dockerfile.tt +16 -0
  133. data/lib/roro/{templates/rails/roro/kube/ingress.yml.tt → stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/Gemfile.lock.tt} +0 -0
  134. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/Gemfile.tt +2 -0
  135. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/docker-compose.yml.tt +17 -0
  136. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/entrypoint.sh +8 -0
  137. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_two/database.yml.tt +16 -0
  138. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/__MACOSX/scripts/._.DS_Store +0 -0
  139. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/.DS_Store +0 -0
  140. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/bundler.sh +22 -0
  141. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/git.sh +21 -0
  142. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/rvm.sh +38 -0
  143. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/utilities.sh +53 -0
  144. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base.sh +6 -0
  145. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/clone_idea.sh +14 -0
  146. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/clone_repos.sh +33 -0
  147. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/install_correct_bundler.sh +21 -0
  148. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/install_rubies.sh +6 -0
  149. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize.sh +18 -0
  150. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/roro.sh +15 -0
  151. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/source.sh +28 -0
  152. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/bundle_all.sh +12 -0
  153. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/git_pull_all.sh +15 -0
  154. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/rvm_install_all.sh +12 -0
  155. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/yarn_install_all.sh +10 -0
  156. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/wordpress/templates/stage_one/docker-compose.yml.tt +31 -0
  157. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/wordpress/wordpress.yml +16 -0
  158. data/{sandbox → lib/roro/stacks/library/roro}/.keep +0 -0
  159. data/lib/roro/stacks/library/roro/docker_compose/docker-compose.yml +22 -0
  160. data/lib/roro/stacks/library/roro/k8s/k8s.yml +15 -0
  161. data/lib/roro/{templates/rails/roro/kube/job-migrate.yml.tt → stacks/library/roro/plots/node/.keep} +0 -0
  162. data/lib/roro/stacks/library/roro/plots/node/node.yml +22 -0
  163. data/lib/roro/stacks/library/roro/plots/php/.keep +0 -0
  164. data/lib/roro/stacks/library/roro/plots/php/php.yml +22 -0
  165. data/lib/roro/stacks/library/roro/plots/python/plots/django/.keep +0 -0
  166. data/lib/roro/stacks/library/roro/plots/python/plots/django/django.yml +10 -0
  167. data/lib/roro/stacks/library/roro/plots/python/plots/django/templates/Dockerfile +7 -0
  168. data/lib/roro/stacks/library/roro/plots/python/plots/django/templates/docker-compose.yml +20 -0
  169. data/lib/roro/stacks/library/roro/plots/python/plots/django/templates/requirements.txt +2 -0
  170. data/lib/roro/stacks/library/roro/plots/python/plots/flask/flask.yml +0 -0
  171. data/lib/roro/stacks/library/roro/plots/python/python.yml +1 -0
  172. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/databases/.keep +0 -0
  173. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/databases/mysql.yml +22 -0
  174. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/databases/postgres.yml +22 -0
  175. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails/rails.yml +22 -0
  176. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails/templates/.keep +0 -0
  177. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails_react/rails_react.yml +22 -0
  178. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails_react/templates/.keep +0 -0
  179. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails_vue/rails_vue.yml +22 -0
  180. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails_vue/templates/.keep +0 -0
  181. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/rails.yml +16 -0
  182. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/templates/.keep +0 -0
  183. data/lib/roro/stacks/library/roro/plots/ruby/plots/ruby_gem/ruby_gem.yml +22 -0
  184. data/lib/roro/stacks/library/roro/plots/ruby/ruby.yml +22 -0
  185. data/lib/roro/stacks/library/roro/roro/roro.yml +15 -0
  186. data/lib/roro/{stories → stacks/stories_v1}/greenfield/rails.yml +2 -2
  187. data/lib/roro/stacks/stories_v1/greenfield/roro.yml +7 -0
  188. data/lib/roro/{stories → stacks/stories_v1}/greenfield.yml +0 -0
  189. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/ci_cd/circleci.yml +0 -0
  190. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/ci_cd.yml +0 -0
  191. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/database/mysql.yml +1 -1
  192. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/database/postgresql.yml +1 -1
  193. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/database.yml +0 -0
  194. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/kubernetes/postgresql/default.yml +0 -0
  195. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/kubernetes/postgresql/edge.yml +0 -0
  196. data/lib/roro/stacks/stories_v1/rollon/rails/kubernetes/postgresql.yml +10 -0
  197. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/kubernetes.yml +0 -0
  198. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails.yml +7 -7
  199. data/lib/roro/stacks/stories_v1/rollon/roro.yml +5 -0
  200. data/lib/roro/{stories → stacks/stories_v1}/rollon/ruby_gem.yml +0 -0
  201. data/lib/roro/{stories → stacks/stories_v1}/rollon.yml +0 -0
  202. data/lib/roro/stacks/stories_v1/templates/rails/.circleci/.keep +0 -0
  203. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/config.yml.tt +0 -0
  204. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/jobs/_build.yml +1 -1
  205. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/jobs/_push.yml +1 -1
  206. data/lib/roro/stacks/stories_v1/templates/rails/.circleci/jobs/_test.yml +12 -0
  207. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/setup-gem-credentials.sh +0 -0
  208. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/workflows/_build_test_push.yml +0 -0
  209. data/lib/roro/stacks/stories_v1/templates/rails/.keep +0 -0
  210. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/Dockerfile.greenfield.tt +0 -0
  211. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/config/database.mysql.yml +0 -0
  212. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/config/database.pg.yml +0 -0
  213. data/lib/roro/stacks/stories_v1/templates/rails/database/with_mysql/_service.yml +10 -0
  214. data/lib/roro/stacks/stories_v1/templates/rails/database/with_postgresql/.keep +0 -0
  215. data/lib/roro/stacks/stories_v1/templates/rails/database/with_postgresql/_service.yml +7 -0
  216. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/docker-compose.yml.tt +0 -0
  217. data/lib/roro/stacks/stories_v1/templates/rails/dotenv/.keep +0 -0
  218. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/dotenv/database.mysql.env.tt +0 -0
  219. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/dotenv/database.pg.env.tt +0 -0
  220. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/dotenv/web.env.tt +0 -0
  221. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/kube.rake.tt +0 -0
  222. data/lib/roro/stacks/stories_v1/templates/rails/roro/.keep +0 -0
  223. data/lib/roro/stacks/stories_v1/templates/rails/roro/containers/.keep +0 -0
  224. data/lib/roro/stacks/stories_v1/templates/rails/roro/containers/app/.keep +0 -0
  225. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/containers/app/Dockerfile.tt +0 -0
  226. data/lib/roro/stacks/stories_v1/templates/rails/roro/containers/frontend/.keep +0 -0
  227. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/docker-entrypoint.sh +0 -0
  228. data/lib/roro/stacks/stories_v1/templates/rails/roro/keys/.keep +0 -0
  229. data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/.keep +0 -0
  230. data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/certificate.yml.tt +0 -0
  231. data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/cluster-issuer.yml.tt +0 -0
  232. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployment.yml.tt +0 -0
  233. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployments/postgres_deploy.yaml +3 -3
  234. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployments/rails_deploy.yaml +5 -5
  235. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployments/redis_deploy.yaml +2 -2
  236. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployments/sidekiq_deploy.yaml +3 -3
  237. data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/ingress.yml.tt +0 -0
  238. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/ingresses/ingress.yaml +0 -0
  239. data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/job-migrate.yml.tt +0 -0
  240. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/jobs/setup.yaml +1 -1
  241. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/secret-digital-ocean.yml.tt +0 -0
  242. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/service.yml.tt +0 -0
  243. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/services/postgres_svc.yaml +2 -2
  244. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/services/rails_svc.yaml +3 -3
  245. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/services/redis_svc.yaml +2 -2
  246. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/volumes/postgres_volumes.yaml +0 -0
  247. data/lib/roro/stacks/stories_v1/templates/roro/containers/.keep +0 -0
  248. data/lib/roro/stacks/stories_v1/templates/roro/containers/database/env/.keep +0 -0
  249. data/lib/roro/stacks/stories_v1/templates/roro/containers/database/scripts/.keep +0 -0
  250. data/lib/roro/stacks/stories_v1/templates/roro/env/.keep +0 -0
  251. data/lib/roro/stacks/stories_v1/templates/roro/keys/.keep +0 -0
  252. data/lib/roro/stacks/stories_v1/templates/roro/scripts/.keep +0 -0
  253. data/lib/roro/stacks/stories_v1/templates/roro/scripts/base/bundler.sh +22 -0
  254. data/lib/roro/stacks/stories_v1/templates/roro/scripts/base/git.sh +21 -0
  255. data/lib/roro/stacks/stories_v1/templates/roro/scripts/base/rvm.sh +38 -0
  256. data/lib/roro/stacks/stories_v1/templates/roro/scripts/base/utilities.sh +53 -0
  257. data/lib/roro/stacks/stories_v1/templates/roro/scripts/base.sh +6 -0
  258. data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize/clone_idea.sh +14 -0
  259. data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize/clone_repos.sh +33 -0
  260. data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize/install_correct_bundler.sh +21 -0
  261. data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize/install_rubies.sh +6 -0
  262. data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize.sh +18 -0
  263. data/lib/roro/stacks/stories_v1/templates/roro/scripts/roro.sh +15 -0
  264. data/lib/roro/stacks/stories_v1/templates/roro/scripts/source.sh +28 -0
  265. data/lib/roro/stacks/stories_v1/templates/roro/scripts/utility/bundle_all.sh +12 -0
  266. data/lib/roro/stacks/stories_v1/templates/roro/scripts/utility/git_pull_all.sh +15 -0
  267. data/lib/roro/stacks/stories_v1/templates/roro/scripts/utility/rvm_install_all.sh +12 -0
  268. data/lib/roro/stacks/stories_v1/templates/roro/scripts/utility/yarn_install_all.sh +10 -0
  269. data/lib/roro/stacks/stories_v1/templates/ruby_gem/.circleci/.keep +0 -0
  270. data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/.circleci/config.yml.tt +0 -0
  271. data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/.circleci/jobs/_test.yml +0 -0
  272. data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/.circleci/setup-gem-credentials.sh +0 -0
  273. data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/docker-compose.yml +1 -1
  274. data/lib/roro/stacks/stories_v1/templates/ruby_gem/roro/containers/.keep +0 -0
  275. data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/roro/containers/ruby_image/Dockerfile.tt +0 -0
  276. data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/roro/containers/ruby_image/ci.env.tt +0 -0
  277. data/lib/roro/stacks/stories_v1/templates/ruby_gem/roro/keys/.keep +0 -0
  278. data/lib/roro/version.rb +1 -1
  279. data/lib/roro.rb +59 -14
  280. data/mise/containers/ruby_gem/Dockerfile +16 -0
  281. data/{roro/containers/app/Dockerfile → mise/containers/ruby_gem/Dockerfile-app} +0 -0
  282. data/{roro/containers/ruby_image/Dockerfile → mise/containers/ruby_gem/Dockerfile-ruby_gem} +0 -0
  283. data/mise/containers/ruby_gem/env/.keep +0 -0
  284. data/mise/containers/ruby_gem/env/base.env.enc +1 -0
  285. data/mise/containers/ruby_gem/env/ci.env.enc +2 -0
  286. data/mise/containers/ruby_gem/env/development.env.enc +1 -0
  287. data/mise/containers/ruby_gem/env/production.env.enc +1 -0
  288. data/mise/containers/ruby_gem/scripts/.keep +0 -0
  289. data/mise/env/base.env.enc +1 -0
  290. data/mise/env/ci.env.enc +1 -0
  291. data/mise/env/development.env.enc +1 -0
  292. data/mise/env/production.env.enc +1 -0
  293. data/mise/mise.roro +0 -0
  294. data/process.yml +401 -0
  295. data/roro.gemspec +6 -1
  296. metadata +322 -118
  297. data/lib/roro/cli/generate/generate_story.rb +0 -18
  298. data/lib/roro/cli/greenfield/rails.rb +0 -14
  299. data/lib/roro/cli/rollon/rails/base/base.rb +0 -4
  300. data/lib/roro/cli/rollon/rails/base/insert_gems.rb +0 -23
  301. data/lib/roro/cli/rollon/rails/base/insertions.rb +0 -27
  302. data/lib/roro/cli/rollon/rails/database/with_mysql.rb +0 -22
  303. data/lib/roro/cli/rollon/rails/database/with_postgresql.rb +0 -20
  304. data/lib/roro/cli/rollon/rails/database.rb +0 -26
  305. data/lib/roro/cli/rollon/ruby_gem/with_ci_cd.rb +0 -45
  306. data/lib/roro/cli/rollon/ruby_gem.rb +0 -1
  307. data/lib/roro/cli/rollon/stories.rb +0 -2
  308. data/lib/roro/configurator/eligibility.rb +0 -137
  309. data/lib/roro/configurator/okonomi.rb +0 -28
  310. data/lib/roro/configurator/omakase.rb +0 -170
  311. data/lib/roro/crypto.rb +0 -113
  312. data/lib/roro/stories/rollon/rails/kubernetes/postgresql.yml +0 -10
  313. data/lib/roro/templates/base/.circleci/_aliases.yml +0 -8
  314. data/lib/roro/templates/base/.circleci/_commands.yml +0 -31
  315. data/lib/roro/templates/base/.circleci/_defaults.yml +0 -5
  316. data/lib/roro/templates/base/.circleci/_executors.yml +0 -11
  317. data/lib/roro/templates/base/.circleci/_major_only.yml +0 -4
  318. data/lib/roro/templates/base/.circleci/_version.yml +0 -1
  319. data/lib/roro/templates/base/.circleci/_workflow.yml +0 -2
  320. data/lib/roro/templates/base/.circleci/config.job-example.yml +0 -33
  321. data/lib/roro/templates/base/.circleci/jobs/_build.yml +0 -4
  322. data/lib/roro/templates/base/.circleci/jobs/_release.yml +0 -12
  323. data/lib/roro/templates/base/.circleci/workflows/_build_release.yml +0 -10
  324. data/lib/roro/templates/base/.dockerignore +0 -51
  325. data/lib/roro/templates/base/dotenv +0 -1
  326. data/lib/roro/templates/base/jumpstart/Dockerfile.tt +0 -30
  327. data/lib/roro/templates/base/jumpstart/docker-compose.yml +0 -59
  328. data/lib/roro/templates/base/jumpstart/docker-entrypoint.sh +0 -16
  329. data/lib/roro/templates/base/livereload/hosts.example +0 -7
  330. data/lib/roro/templates/rails/.circleci/jobs/_test.yml +0 -12
  331. data/lib/roro/templates/rails/database/with_mysql/_service.yml +0 -10
  332. data/lib/roro/templates/rails/database/with_postgresql/_service.yml +0 -7
  333. data/roro/containers/app/dotenv +0 -1
@@ -1,147 +1,20 @@
1
1
  module Roro
2
2
  class CLI < Thor
3
3
 
4
- class << self
5
- private
6
- def shared_options!
7
- method_option :omakase, desc: "Use the Roro setup with some configuring. 'Omakase' translates as 'I'll leave it up to you.'", aliases: ['-d', '--default']
8
- method_option :fatsutofodo, desc: 'Use the Roro setup without having to think.', aliases: ['-f', '--fast']
9
- method_option :okonomi, desc: "Use Roro how you like. 'Okonomi' has the opposite meaning of omakase.", aliases: ['-i', '--interactive']
10
- end
11
-
12
- alias_method :orig_desc, :desc
13
-
14
- def desc(*args)
15
- orig_desc(*args)
16
- shared_options!
17
- end
18
- end
19
- rollonto = ' into Roro.'
20
- desc "rollon", "Roll an existing app#{rollonto}"
21
- def rollon(args={})
22
- @config ||= Roro::Configuration.new(args, options)
23
- greenfield_actions
24
- greenfield_commands
25
- manifest_actions
26
- manifest_intentions
27
- congratulations
28
- startup_commands
29
- end
30
-
31
- desc "greenfield", "Greenfield a new app and roll it#{rollonto}"
32
- def greenfield(args={})
33
- args[:greenfield] = :greenfield
34
-
35
- rollon(args)
36
- end
37
-
38
- desc "greenfield::rails", "Greenfield a new Rails app and roll it#{rollonto}"
39
-
40
- map "greenfield::rails" => "greenfield_rails"
41
-
42
- def greenfield_rails
43
- greenfield( { story: :rails } )
44
- end
45
-
46
- desc "rollon::rails", "Roll an existing app#{rollonto}"
47
- map "rollon::rails" => "rollon_rails"
48
-
49
- def rollon_rails(args={})
50
- rollon( { story: :rails } )
51
- end
52
-
53
- desc "rollon::rails::kubernetes", "Adds Kubernetes for production."
54
- map "rollon::rails::kubernetes" => "rollon_rails_kubernetes"
55
-
56
- def rollon_rails_kubernetes(args={})
57
- story = {
58
- rails: [
59
- { database: :postgresql },
60
- { kubernetes: :postgresql },
61
- { ci_cd: :circleci}
62
- ]
63
- }
64
- rollon( { story: story } )
65
- end
4
+ desc 'rollon', 'Roll a fresh development story into the current directory.'
5
+ map 'rollon' => 'rollon'
66
6
 
67
- desc "greenfield::rails::kubernetes", "Adds Kubernetes for production."
68
- map "greenfield::rails::kubernetes" => "greenfield_rails_kubernetes"
69
-
70
- def greenfield_rails_kubernetes(args={})
71
- story = {
72
- rails: [
73
- { database: :postgresql },
74
- { kubernetes: :postgresql },
75
- { ci_cd: :circleci}
76
- ]
77
- }
78
- rollon( { story: story } )
7
+ def rollon
8
+ configurator = Roro::Configurators::Configurator.new
9
+ configurator.rollon
79
10
  end
80
11
 
81
- no_commands do
82
-
83
- def configure_for_rollon(aroptions=nil)
84
- @config ||= Roro::Configuration.new(options)
85
- end
86
-
87
- def manifest_actions
88
- @config.structure[:actions].each {|a| eval a }
89
- end
90
-
91
- def manifest_intentions
92
- @config.intentions.each {|k, v| eval(k.to_s) if v.eql?('y') }
93
- end
94
-
95
- def greenfield_actions
96
- return unless @config.structure[:greenfield_actions]
97
- @config.structure[:greenfield_actions].each {|a| eval a }
98
- end
99
-
100
- def greenfield_commands
101
- return unless @config.structure[:greenfield_actions]
102
- @config.structure[:greenfield_commands].each {|a| eval a }
103
- end
12
+ desc 'log itineraries', 'logs all possible itineraries in specified location'
13
+ map 'log_itineraries' => 'log_itineraries'
104
14
 
105
- def congratulations(story=nil)
106
- ( @config.story[:rollon])
107
- if @config.structure[:greenfield]
108
- usecase = 'greenfielded a new '
109
- else
110
- usecase = 'rolled your existing '
111
- end
112
- array = ["You've successfully "]
113
- array << usecase
114
- congrats = array.join("")
115
- puts congrats
116
- end
117
-
118
- def startup_commands
119
- congratulations( @config.story[:rollon])
120
- cmd = @config.structure[:startup]
121
- commands = cmd[:commands]
122
- question = []
123
- question << "\n\n You can start your app up with some combination of these commands:\n"
124
- commands.each { |c| question << "\t#{c}"}
125
- question << "\nOr if you'd like Roro to try and do it for you:"
126
- question = question.join("\n")
127
- if ask(question, default: 'y', limited_to: ['y', 'n']).eql?("y")
128
- commands.each {|a| system(a) }
129
- puts "\n\n#{cmd[:success]}\n\n"
130
- end
131
- end
132
-
133
- def yaml_from_template(file)
134
- File.read(find_in_source_paths(file))
135
- end
136
-
137
- def generate_config_story
138
- roro_story = {
139
- story: @config.story,
140
- env_vars: @config.env,
141
- intentions: @config.intentions
142
- }
143
- create_file ".roro_story.yml", roro_story.to_yaml
144
- end
15
+ def log_itineraries(location = 'test/fixtures/itineraries')
16
+ builder = Roro::Configurators::AdventureCaseBuilder.new
17
+ builder.log_itineraries('test/fixtures/itineraries')
145
18
  end
146
19
  end
147
- end
20
+ end
data/lib/roro/cli.rb CHANGED
@@ -1,34 +1,41 @@
1
+ # frozen_string_literal: true
1
2
 
2
- require 'roro/cli/generate/generate_exposed'
3
- require 'roro/cli/generate/generate_keys'
4
- require 'roro/cli/generate/generate_obfuscated'
5
- require 'roro/cli/generate/generate_story'
6
- require 'roro/cli/greenfield/rails'
7
- require 'roro/cli/rollon'
8
- require 'roro/cli/rollon/rails/base/base'
9
- require 'roro/cli/rollon/rails/database/with_mysql'
10
- require 'roro/cli/rollon/rails/database/with_postgresql'
11
- require 'roro/cli/rollon/ruby_gem'
3
+ require_relative 'cli/rollon'
4
+ require_relative 'cli/generate/generate_containers'
5
+ require_relative 'cli/generate/generate_environments'
6
+ require_relative 'cli/generate/generate_exposed'
7
+ require_relative 'cli/generate/generate_keys'
8
+ require_relative 'cli/generate/generate_mise'
9
+ require_relative 'cli/generate/generate_obfuscated'
12
10
 
13
11
  module Roro
14
12
  class CLI < Thor
15
-
16
13
  include Thor::Actions
17
-
14
+
18
15
  def self.source_root
19
- File.dirname(__FILE__) + '/templates'
16
+ "#{@template_root || File.dirname(__FILE__)}/templates"
17
+ end
18
+
19
+ def self.catalog_root
20
+ "#{File.dirname(__FILE__)}/stacks/catalog/unstoppable/developer_styles"
20
21
  end
21
-
22
- def self.story_root
23
- File.dirname(__FILE__) + '/stories'
22
+
23
+ def self.mise_location
24
+ lookup = Dir.glob("#{Dir.pwd}/**/*.roro")&.first&.split("#{Dir.pwd}/")
25
+ if lookup
26
+ mise = lookup.last.split('/').first
27
+ else
28
+ mise = 'roro'
29
+ end
30
+ "#{Dir.pwd}/#{mise}"
31
+ end
32
+
33
+ def self.mise
34
+ mise_location.split("#{Dir.pwd}/").last
24
35
  end
25
-
26
- def self.test_fixture_root
27
- File.dirname(__FILE__) + '/test/fixtures'
28
- end
29
-
30
- def self.roro_environments
31
- %w(development production test staging ci)
36
+
37
+ def self.roro_environments
38
+ %w[base development production test staging ci]
32
39
  end
33
40
  end
34
41
  end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Roro
4
+ module FileReflection
5
+
6
+ def source_files(dir, pattern)
7
+ Dir.glob("#{dir}/**/*#{pattern}")
8
+ end
9
+
10
+ def gather_environments(dir, ext)
11
+ environments = source_files(dir, ext).map do |file|
12
+ file.split('/').last.split('.').first
13
+ end
14
+ if environments.empty?
15
+ raise Roro::Error, "No #{ext} files in #{dir}"
16
+ else
17
+ environments.uniq
18
+ end
19
+ end
20
+
21
+ def get_key(environment, _dir = Roro::CLI.mise)
22
+ env_key = "#{environment.upcase}_KEY"
23
+ key_file = Dir.glob("#{Roro::CLI.mise}/keys/#{environment}.key").first
24
+ if ENV[env_key]
25
+ ENV[env_key]
26
+ elsif key_file
27
+ File.read(key_file).strip
28
+ else
29
+ raise Roro::Error, "No #{env_key} set. Please set one as a variable or in a file."
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,185 @@
1
+ # frozen_string_literal: true
2
+ require 'json'
3
+ require 'yaml'
4
+
5
+ module Roro
6
+ module Utilities
7
+
8
+ def stack_type(stack)
9
+ case
10
+ when stack_not_present?(stack)
11
+ :nonexistent
12
+ when stack_is_ignored?(stack)
13
+ :ignored
14
+ when stack_is_dotfile?(stack)
15
+ :dotfile
16
+ when stack_is_storyfile?(stack)
17
+ :storyfile
18
+ when stack_is_templates?(stack)
19
+ :templates
20
+ when stack_is_inflection?(stack)
21
+ :inflection
22
+ when stack_is_stack?(stack)
23
+ :stack
24
+ when stack_is_story?(stack)
25
+ :story
26
+ end
27
+ end
28
+
29
+ def stack_is_stack?(stack)
30
+ children(stack).any? do |c|
31
+ stack_is_inflection?(c) || stack_is_story?(c)
32
+ end
33
+ end
34
+
35
+ def stack_is_story?(stack)
36
+ children(stack).any? { |c| story_name(stack).eql?(file_name(c)) }
37
+ end
38
+
39
+ def stack_is_file?(stack)
40
+ File.file?(stack)
41
+ end
42
+
43
+ def stack_is_dotfile?(stack)
44
+ stack_is_file?(stack) &&
45
+ %w[keep gitkeep].include?(file_extension(stack))
46
+ end
47
+
48
+ def stack_is_storyfile?(stack)
49
+ stack_is_file?(stack) &&
50
+ %w[yml yaml].include?(file_extension(stack))
51
+ end
52
+
53
+ def stack_unpermitted?(stack)
54
+ stack_is_file?(stack) &&
55
+ !stack_is_storyfile?(stack) &&
56
+ !stack_is_dotfile?(stack)
57
+ end
58
+
59
+ def stack_is_inflection?(stack)
60
+ stack_stories(stack).empty? &&
61
+ !File.file?(stack) &&
62
+ !stack_is_ignored?(stack) &&
63
+ !stack_is_templates?(stack)
64
+ end
65
+
66
+ def story_is_empty?(story)
67
+ stack_is_storyfile?(story) &&
68
+ !read_yaml(story)
69
+ end
70
+
71
+ def stack_not_present?(stack)
72
+ !File.exist?(stack)
73
+ end
74
+
75
+ def stack_is_nil?(stack)
76
+ !File.exist?(stack)
77
+ end
78
+
79
+ def stack_is_story_path?(stack)
80
+ !stack_is_parent?(stack) &&
81
+ !stack_is_templates?(stack) &&
82
+ stack_is_node?(stack)
83
+ end
84
+
85
+ def stack_is_itinerary_path?(stack)
86
+ !stack_is_parent?(stack) &&
87
+ !stack_is_templates?(stack) &&
88
+ stack_is_node?(stack)
89
+ end
90
+
91
+ def stack_is_parent?(stack)
92
+ children(stack).any? { |c| stack_is_inflection?(c) }
93
+ end
94
+
95
+ def story_paths(stack)
96
+ children(stack).select { |c| stack_is_story_path?(c) }
97
+ end
98
+
99
+ def stack_stories(stack)
100
+ children(stack).select { |c| stack_is_storyfile?(c) }
101
+ end
102
+
103
+ def stack_is_templates?(stack)
104
+ stack.split('/').last.match?('templates')
105
+ end
106
+
107
+ def stack_is_ignored?(stack)
108
+ ignored = %w[test_dummy story_test test]
109
+ ignored.include?(stack.split('/').last)
110
+ end
111
+
112
+ def all_inflections(stack)
113
+ children(stack).select { |c| stack_is_inflection?(c) }
114
+ end
115
+
116
+ def children(stack)
117
+ Dir.glob("#{stack}/*")
118
+ end
119
+
120
+ def stack_is_node?(stack)
121
+ children(stack).any? { |w| w.include?('.yml') } && !stack_is_templates?(stack)
122
+ end
123
+
124
+ def stack_parent(stack)
125
+ tree = stack.split('/')
126
+ tree[-2]
127
+ end
128
+
129
+ def stack_parent_path(stack)
130
+ stack.split("/#{name(stack)}").first
131
+ end
132
+
133
+ def stack_is_empty?(stack)
134
+ !stack_is_file?(stack) &&
135
+ Dir.glob("#{stack}/**").empty?
136
+ end
137
+
138
+ def build_paths(stack, story_paths = nil)
139
+ story_paths ||= []
140
+ story_paths << stack if stack_is_story_path?(stack)
141
+ children(stack).each { |c| build_paths(c, story_paths) }
142
+ story_paths
143
+ end
144
+
145
+ def sanitize(hash)
146
+ (hash ||= {}).transform_keys!(&:to_sym).each do |key, value|
147
+ case value
148
+ when Array
149
+ value.each { |vs| sanitize(vs) }
150
+ when Hash
151
+ sanitize(value)
152
+ when true
153
+ hash[key] = true
154
+ when String || Symbol
155
+ hash[key] = value.to_sym
156
+ end
157
+ end
158
+ end
159
+
160
+ def name(stack)
161
+ stack.split('/').last
162
+ end
163
+
164
+ def file_name(story_file)
165
+ story_file.split('/').last.split('.').first
166
+ end
167
+
168
+ def file_extension(file)
169
+ file.split('.').last
170
+ end
171
+
172
+ def story_name(stack)
173
+ stack.split('/').last
174
+ end
175
+
176
+
177
+ def sentence_from(array)
178
+ array[1] ? "#{array[0..-2].join(', ')} and #{array[-1]}" : array[0]
179
+ end
180
+
181
+ def read_yaml(yaml_file)
182
+ JSON.parse(YAML.load_file(yaml_file).to_json, symbolize_names: true)
183
+ end
184
+ end
185
+ end
@@ -1,15 +1,15 @@
1
- require 'roro/configurator/eligibility'
2
- require 'roro/configurator/okonomi'
3
- require 'roro/configurator/omakase'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'configurators/utilities'
4
+ require_relative 'configurators/adventure_case_builder'
5
+ require_relative 'configurators/adventure_chooser'
6
+ require_relative 'configurators/adventure_writer'
7
+ require_relative 'configurators/adventure_picker'
8
+ require_relative 'configurators/question_asker'
9
+ require_relative 'configurators/question_builder'
10
+ require_relative 'configurators/configurator'
11
+ require_relative 'configurators/catalog_builder'
12
+ require_relative 'configurators/structure_builder'
13
+ require_relative 'configurators/validator'
14
+
4
15
 
5
- module Roro
6
- module Configurator
7
- include Eligibility
8
- include Okonomi
9
- include Omakase
10
- end
11
-
12
- class Configuration < Thor
13
- include Roro::Configurator
14
- end
15
- end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Roro
4
+ module Configurators
5
+ class AdventureCaseBuilder
6
+
7
+ attr_reader :cases, :itineraries
8
+
9
+ def initialize(catalog=nil)
10
+ @catalog = catalog || Roro::CLI.catalog_root
11
+ end
12
+
13
+ def build_cases(stack, cases = [], array = [], position = 0 )
14
+ @base ||= stack
15
+
16
+ children(stack).each_with_index do |child, index|
17
+ if stack_type(stack).eql?(:inflection)
18
+ choice = "#{child.split(@base).last}"
19
+ next unless [:stack, :story].include?(stack_type(child))
20
+ case
21
+ when children(stack).last.eql?(child)
22
+ array = array.take(position)
23
+ array << choice
24
+ cases << array
25
+ when array.size.eql?(position)
26
+ array << choice
27
+ when array.size.eql?(position + 1)
28
+ cases << array
29
+ array = array.take(position)
30
+ array << choice
31
+ # when array.size.eql?(position - 1)
32
+ # array = array.take(position)
33
+ when array.size.eql?(position + 2)
34
+ array = array.take(position)
35
+ else
36
+ cases << array
37
+ # array = array.take(position)
38
+ end
39
+ # position += 1
40
+ end
41
+ build_cases( child, cases, array, (position - index) + 1)
42
+ end
43
+ cases.uniq.sort
44
+ end
45
+
46
+ def build_itineraries(catalog)
47
+ @itineraries ||= []
48
+ @itineraries += build_itinerary(catalog)
49
+ children(catalog).each { |c| build_itineraries(c) }
50
+ @itineraries
51
+ end
52
+
53
+ private
54
+
55
+ def build_itinerary(catalog)
56
+ itinerary = []
57
+ all_inflections(catalog).each do |inflection|
58
+ paths = story_paths(inflection).map { |p| [p] }
59
+ itinerary = itinerary.empty? ? paths : itinerary.product(paths)
60
+ end
61
+ itinerary.map(&:flatten)
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Roro
4
+ module Configurators
5
+ class AdventureChooser
6
+ include Utilities
7
+
8
+ attr_reader :itinerary, :stack, :manifest
9
+
10
+ def initialize
11
+ @asker = AdventurePicker.new
12
+ @itinerary = []
13
+ @stack = Roro::CLI.catalog_root
14
+ end
15
+
16
+ def build_itinerary(stack=nil)
17
+ @manifest ||= []
18
+ stack ||= @stack
19
+ case stack_type(stack)
20
+ when :storyfile
21
+ @manifest << stack
22
+ when :story
23
+ @manifest += stack_stories(stack)
24
+ when :stack
25
+ @manifest += stack_stories(stack)
26
+ children(stack).each { |c| build_itinerary(c) }
27
+ when :inflection
28
+ child = choose_adventure(stack)
29
+ @itinerary << child if stack_type(child).eql?(:story)
30
+ build_itinerary(child)
31
+ end
32
+ @manifest.uniq!
33
+ @itinerary.uniq!
34
+ end
35
+
36
+ def stack_is_alias?(catalog)
37
+ stack_is_storyfile?(catalog) &&
38
+ !read_yaml(catalog)[:aliased_to].nil?
39
+ end
40
+
41
+ def choose_adventure(inflection)
42
+ @asker.choose_adventure(inflection)
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Roro
4
+ module Configurators
5
+ class AdventurePicker < Thor
6
+ include Utilities
7
+
8
+ attr_reader :inflection
9
+
10
+ no_commands do
11
+ def choose_adventure(stack)
12
+ build_inflection(stack)
13
+ choice = ask(@inflection)
14
+ story_name = story_from(choice.to_s)
15
+ "#{stack}/#{story_name}"
16
+ end
17
+
18
+ def build_inflection(stack)
19
+ @stack = stack
20
+ prompt = inflection_prompt
21
+ options = inflection_options
22
+ prompt_options = humanize(options)
23
+ @inflection = ["#{prompt} #{prompt_options}", limited_to: options.keys]
24
+ end
25
+
26
+ def inflection_prompt
27
+ prompt = 'Please choose from these'
28
+ collection = name(@stack).gsub('_', ' ') + ":\n"
29
+ [prompt, stack_parent(@stack), collection].join(' ')
30
+ end
31
+
32
+ def inflection_options(stack = nil)
33
+ stack ||= @stack
34
+ Hash.new.tap do |h|
35
+ children(stack)
36
+ .map { |f| name(f) }
37
+ .sort
38
+ .each_with_index do |c, i|
39
+ h[(i + 1).to_s] = name(c)
40
+ end
41
+ end
42
+ end
43
+
44
+ def humanize(hash)
45
+ array = []
46
+ hash.map do |key, value|
47
+ preface = get_story_preface("#{@stack}/#{value}")
48
+ array << "\n(#{key}) #{value}:\n #{preface}"
49
+ end
50
+ array.join
51
+ end
52
+
53
+ def get_story_preface(story)
54
+ storyfile = "#{story}/#{name(story)}.yml"
55
+ if stack_is_storyfile?(storyfile)
56
+ read_yaml("#{story}/#{name(story)}.yml")[:preface]
57
+ else
58
+ nil
59
+ end
60
+ end
61
+
62
+ def story_from(key)
63
+ inflection_options[key]
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Roro
4
+ module Configurators
5
+ class AdventureWriter < Thor
6
+ include Thor::Actions
7
+ include Utilities
8
+
9
+ attr_reader :itinerary, :stack, :manifest
10
+
11
+ no_commands do
12
+
13
+ def write(buildenv, storyfile)
14
+ @env = buildenv
15
+ actions = read_yaml(storyfile)[:actions]
16
+ unless actions.nil?
17
+ self.source_paths << "#{stack_parent_path(storyfile)}/templates"
18
+ actions.each do |a|
19
+ eval a
20
+ end
21
+ end
22
+ end
23
+
24
+ def interpolated_stack_path
25
+ "#{@env[:stack]}/#{@env[:story]}"
26
+ end
27
+
28
+ def interpolated_story_name
29
+ "#{@env[:story]}"
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end