roro 0.3.21 → 0.3.25

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 (336) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +95 -67
  3. data/.gitignore +38 -8
  4. data/.ruby-version +1 -0
  5. data/CODE_OF_CONDUCT.md +25 -17
  6. data/Gemfile +1 -1
  7. data/Guardfile +23 -11
  8. data/README.md +9 -10
  9. data/bin/console +1 -1
  10. data/bin/setup +1 -1
  11. data/docker-compose.yml +3 -3
  12. data/lib/roro/cli/generate/generate.rb +52 -1
  13. data/lib/roro/cli/generate/generate_containers.rb +23 -0
  14. data/lib/roro/cli/generate/generate_environments.rb +25 -0
  15. data/lib/roro/cli/generate/generate_exposed.rb +11 -0
  16. data/lib/roro/cli/generate/generate_keys.rb +15 -0
  17. data/lib/roro/cli/generate/generate_mise.rb +13 -0
  18. data/lib/roro/cli/generate/generate_obfuscated.rb +14 -0
  19. data/lib/roro/cli/roll_your_own.rb +12 -0
  20. data/lib/roro/cli/rollon.rb +11 -138
  21. data/lib/roro/cli.rb +30 -20
  22. data/lib/roro/common/file_reflection.rb +33 -0
  23. data/lib/roro/common/utilities.rb +185 -0
  24. data/lib/roro/configurator.rb +14 -14
  25. data/lib/roro/configurators/adventure_case_builder.rb +65 -0
  26. data/lib/roro/configurators/adventure_chooser.rb +46 -0
  27. data/lib/roro/configurators/adventure_picker.rb +68 -0
  28. data/lib/roro/configurators/adventure_writer.rb +34 -0
  29. data/lib/roro/configurators/catalog_builder.rb +17 -0
  30. data/lib/roro/configurators/configurator.rb +64 -0
  31. data/lib/roro/configurators/eligibility.rb +141 -0
  32. data/lib/roro/configurators/question_asker.rb +29 -0
  33. data/lib/roro/configurators/question_builder.rb +83 -0
  34. data/lib/roro/configurators/structure_builder.rb +34 -0
  35. data/lib/roro/configurators/utilities.rb +188 -0
  36. data/lib/roro/configurators/validator.rb +109 -0
  37. data/lib/roro/crypto/cipher.rb +35 -0
  38. data/lib/roro/crypto/exposer.rb +33 -0
  39. data/lib/roro/crypto/file_writer.rb +14 -0
  40. data/lib/roro/crypto/key_writer.rb +35 -0
  41. data/lib/roro/crypto/obfuscator.rb +25 -0
  42. data/lib/roro/error.rb +31 -0
  43. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/fatsufodo.yml +1 -0
  44. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/django.yml +38 -0
  45. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/templates/stage_one/Dockerfile.tt +7 -0
  46. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/templates/stage_one/docker-compose.yml.tt +20 -0
  47. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/templates/stage_one/requirements.txt.tt +2 -0
  48. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/templates/stage_two/settings.py +130 -0
  49. data/lib/roro/{templates/base/jumpstart → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/test/stage_one/dummy}/.keep +0 -0
  50. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/test/stage_one/stage_one_test.rb +37 -0
  51. data/lib/roro/{templates/base/roro → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/test/stage_two/dummy}/.keep +0 -0
  52. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/expressjs/expressjs.yml +8 -0
  53. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/expressjs/templates/stage_one/Dockerfile.tt +14 -0
  54. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/expressjs/templates/stage_one/docker-compose.yml.tt +21 -0
  55. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/flask.yml +14 -0
  56. data/lib/roro/{templates/base/roro/roro → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one}/.keep +0 -0
  57. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one/Dockerfile +11 -0
  58. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one/app.py +23 -0
  59. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one/docker-compose.yml +8 -0
  60. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one/requirements.txt +2 -0
  61. data/lib/roro/{templates/base/roro/roro/containers → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/test}/.keep +0 -0
  62. data/lib/roro/{templates/base/roro/roro/containers/app → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/test/stage_one}/.keep +0 -0
  63. 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
  64. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/test/stage_one/stage_test.rb +37 -0
  65. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/rails.yml +12 -0
  66. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_one/Dockerfile.tt +16 -0
  67. data/lib/roro/{templates/rails/.circleci/.keep → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_one/Gemfile.lock.tt} +0 -0
  68. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_one/Gemfile.tt +2 -0
  69. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_one/docker-compose.yml.tt +9 -0
  70. 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
  71. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_two/database.yml.tt +16 -0
  72. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/wordpress/templates/stage_one/docker-compose.yml.tt +31 -0
  73. data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/wordpress/wordpress.yml +17 -0
  74. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/okonomi.yml +1 -0
  75. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/roll_your_own.yml +23 -0
  76. 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
  77. data/lib/roro/{templates/rails → stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/templates/stage_one}/.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}/.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}/.keep +0 -0
  80. data/lib/roro/{templates/rails/roro → stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/templates/stage_one/%interpolated_stack_path%/test/stage_one/stage_dummy}/.keep +0 -0
  81. 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
  82. data/lib/roro/{templates/rails/roro/containers → stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/test/stage_one/dummy}/.keep +0 -0
  83. data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/test/stage_one/stage_one_test.rb +58 -0
  84. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/omakase.yml +1 -0
  85. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/rails.yml +13 -0
  86. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/Dockerfile.tt +16 -0
  87. data/lib/roro/{templates/rails/roro/containers/app/.keep → stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/Gemfile.lock.tt} +0 -0
  88. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/Gemfile.tt +2 -0
  89. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/docker-compose.yml.tt +17 -0
  90. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/entrypoint.sh +8 -0
  91. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_two/database.yml.tt +16 -0
  92. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/.env +38 -0
  93. data/lib/roro/{templates/rails/roro/containers/frontend → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one}/.keep +0 -0
  94. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/LICENSE +674 -0
  95. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/README.md +346 -0
  96. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/build.sh +39 -0
  97. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/nginx/cfg/nginx-custom-configs.conf +117 -0
  98. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/nginx/cfg/nginx-wp-hardening.conf +131 -0
  99. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/nginx/tpl/nginx-http.conf.template +103 -0
  100. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/nginx/tpl/nginx-https.conf.example +123 -0
  101. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/php.conf.ini +3 -0
  102. data/lib/roro/{templates/rails/roro/kube/.keep → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/data/certbot/conf/.placeholder} +0 -0
  103. data/lib/roro/{templates/rails/roro/kube/certificate.yml.tt → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/data/certbot/www/.placeholder} +0 -0
  104. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/docker-compose-build.yml +24 -0
  105. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/docker-compose-dev.yml +96 -0
  106. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/docker-compose-prod.yml +147 -0
  107. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/dump_mysql.sh +16 -0
  108. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/init_letsencrypt.sh +80 -0
  109. data/lib/roro/{templates/rails/roro/kube/cluster-issuer.yml.tt → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/mysql-dumps/.placeholder} +0 -0
  110. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/push.sh +22 -0
  111. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/wordpress/Dockerfile +14 -0
  112. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/wordpress/adduser.sh +15 -0
  113. data/lib/roro/{templates/rails/roro/kube/ingress.yml.tt → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/wordpress-sql/.placeholder} +0 -0
  114. data/lib/roro/{templates/rails/roro/kube/job-migrate.yml.tt → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/wordpress-src/.placeholder} +0 -0
  115. data/lib/roro/{templates/ruby_gem/.circleci → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/test}/.keep +0 -0
  116. data/lib/roro/{templates/ruby_gem/roro/containers → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/test/stage_one}/.keep +0 -0
  117. data/lib/roro/{templates/ruby_gem/roro/keys → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/test/stage_one/stage_dummy}/.keep +0 -0
  118. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/test/stage_one/stage_test.rb +40 -0
  119. data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/wordpress.yml +76 -0
  120. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/fatsufodo.yml +1 -0
  121. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/django.yml +36 -0
  122. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_one/Dockerfile.tt +7 -0
  123. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_one/docker-compose.yml.tt +20 -0
  124. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_one/requirements.txt.tt +2 -0
  125. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_two/settings.py +130 -0
  126. data/{roro/containers → lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/test/stage_one/dummy}/.keep +0 -0
  127. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/test/stage_one/stage_one_test.rb +37 -0
  128. data/{roro/keys → lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/test/stage_two/dummy}/.keep +0 -0
  129. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/expressjs/expressjs.yml +7 -0
  130. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/expressjs/templates/stage_one/Dockerfile.tt +14 -0
  131. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/expressjs/templates/stage_one/docker-compose.yml.tt +21 -0
  132. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/rails.yml +12 -0
  133. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/Dockerfile.tt +16 -0
  134. data/{sandbox/.keep → lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/Gemfile.lock.tt} +0 -0
  135. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/Gemfile.tt +2 -0
  136. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/docker-compose.yml.tt +17 -0
  137. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/entrypoint.sh +8 -0
  138. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_two/database.yml.tt +16 -0
  139. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/__MACOSX/scripts/._.DS_Store +0 -0
  140. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/.DS_Store +0 -0
  141. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/bundler.sh +22 -0
  142. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/git.sh +21 -0
  143. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/rvm.sh +38 -0
  144. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/utilities.sh +53 -0
  145. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base.sh +6 -0
  146. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/clone_idea.sh +14 -0
  147. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/clone_repos.sh +33 -0
  148. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/install_correct_bundler.sh +21 -0
  149. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/install_rubies.sh +6 -0
  150. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize.sh +18 -0
  151. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/roro.sh +15 -0
  152. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/source.sh +28 -0
  153. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/bundle_all.sh +12 -0
  154. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/git_pull_all.sh +15 -0
  155. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/rvm_install_all.sh +12 -0
  156. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/yarn_install_all.sh +10 -0
  157. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/wordpress/templates/stage_one/docker-compose.yml.tt +31 -0
  158. data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/wordpress/wordpress.yml +16 -0
  159. data/lib/roro/stacks/library/roro/.keep +0 -0
  160. data/lib/roro/stacks/library/roro/docker_compose/docker-compose.yml +22 -0
  161. data/lib/roro/stacks/library/roro/k8s/k8s.yml +15 -0
  162. data/lib/roro/stacks/library/roro/plots/node/.keep +0 -0
  163. data/lib/roro/stacks/library/roro/plots/node/node.yml +22 -0
  164. data/lib/roro/stacks/library/roro/plots/php/.keep +0 -0
  165. data/lib/roro/stacks/library/roro/plots/php/php.yml +22 -0
  166. data/lib/roro/stacks/library/roro/plots/python/plots/django/.keep +0 -0
  167. data/lib/roro/stacks/library/roro/plots/python/plots/django/django.yml +10 -0
  168. data/lib/roro/stacks/library/roro/plots/python/plots/django/templates/Dockerfile +7 -0
  169. data/lib/roro/stacks/library/roro/plots/python/plots/django/templates/docker-compose.yml +20 -0
  170. data/lib/roro/stacks/library/roro/plots/python/plots/django/templates/requirements.txt +2 -0
  171. data/lib/roro/stacks/library/roro/plots/python/plots/flask/flask.yml +0 -0
  172. data/lib/roro/stacks/library/roro/plots/python/python.yml +1 -0
  173. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/databases/.keep +0 -0
  174. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/databases/mysql.yml +22 -0
  175. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/databases/postgres.yml +22 -0
  176. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails/rails.yml +22 -0
  177. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails/templates/.keep +0 -0
  178. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails_react/rails_react.yml +22 -0
  179. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails_react/templates/.keep +0 -0
  180. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails_vue/rails_vue.yml +22 -0
  181. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails_vue/templates/.keep +0 -0
  182. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/rails.yml +16 -0
  183. data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/templates/.keep +0 -0
  184. data/lib/roro/stacks/library/roro/plots/ruby/plots/ruby_gem/ruby_gem.yml +22 -0
  185. data/lib/roro/stacks/library/roro/plots/ruby/ruby.yml +22 -0
  186. data/lib/roro/stacks/library/roro/roro/roro.yml +15 -0
  187. data/lib/roro/{stories → stacks/stories_v1}/greenfield/rails.yml +2 -2
  188. data/lib/roro/stacks/stories_v1/greenfield/roro.yml +7 -0
  189. data/lib/roro/{stories → stacks/stories_v1}/greenfield.yml +0 -0
  190. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/ci_cd/circleci.yml +0 -0
  191. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/ci_cd.yml +0 -0
  192. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/database/mysql.yml +1 -1
  193. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/database/postgresql.yml +1 -1
  194. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/database.yml +0 -0
  195. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/kubernetes/postgresql/default.yml +0 -0
  196. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/kubernetes/postgresql/edge.yml +0 -0
  197. data/lib/roro/stacks/stories_v1/rollon/rails/kubernetes/postgresql.yml +10 -0
  198. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/kubernetes.yml +0 -0
  199. data/lib/roro/{stories → stacks/stories_v1}/rollon/rails.yml +7 -7
  200. data/lib/roro/stacks/stories_v1/rollon/roro.yml +5 -0
  201. data/lib/roro/{stories → stacks/stories_v1}/rollon/ruby_gem.yml +0 -0
  202. data/lib/roro/{stories → stacks/stories_v1}/rollon.yml +0 -0
  203. data/lib/roro/stacks/stories_v1/templates/rails/.circleci/.keep +0 -0
  204. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/config.yml.tt +0 -0
  205. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/jobs/_build.yml +1 -1
  206. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/jobs/_push.yml +1 -1
  207. data/lib/roro/stacks/stories_v1/templates/rails/.circleci/jobs/_test.yml +12 -0
  208. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/setup-gem-credentials.sh +0 -0
  209. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/workflows/_build_test_push.yml +0 -0
  210. data/lib/roro/stacks/stories_v1/templates/rails/.keep +0 -0
  211. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/Dockerfile.greenfield.tt +1 -1
  212. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/config/database.mysql.yml +0 -0
  213. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/config/database.pg.yml +0 -0
  214. data/lib/roro/stacks/stories_v1/templates/rails/database/with_mysql/_service.yml +10 -0
  215. data/lib/roro/stacks/stories_v1/templates/rails/database/with_postgresql/.keep +0 -0
  216. data/lib/roro/stacks/stories_v1/templates/rails/database/with_postgresql/_service.yml +7 -0
  217. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/docker-compose.yml.tt +0 -0
  218. data/lib/roro/stacks/stories_v1/templates/rails/dotenv/.keep +0 -0
  219. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/dotenv/database.mysql.env.tt +0 -0
  220. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/dotenv/database.pg.env.tt +0 -0
  221. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/dotenv/web.env.tt +0 -0
  222. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/kube.rake.tt +0 -0
  223. data/lib/roro/stacks/stories_v1/templates/rails/roro/.keep +0 -0
  224. data/lib/roro/stacks/stories_v1/templates/rails/roro/containers/.keep +0 -0
  225. data/lib/roro/stacks/stories_v1/templates/rails/roro/containers/app/.keep +0 -0
  226. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/containers/app/Dockerfile.tt +0 -0
  227. data/lib/roro/stacks/stories_v1/templates/rails/roro/containers/frontend/.keep +0 -0
  228. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/docker-entrypoint.sh +0 -0
  229. data/lib/roro/stacks/stories_v1/templates/rails/roro/keys/.keep +0 -0
  230. data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/.keep +0 -0
  231. data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/certificate.yml.tt +0 -0
  232. data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/cluster-issuer.yml.tt +0 -0
  233. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployment.yml.tt +0 -0
  234. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployments/postgres_deploy.yaml +3 -3
  235. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployments/rails_deploy.yaml +5 -5
  236. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployments/redis_deploy.yaml +2 -2
  237. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployments/sidekiq_deploy.yaml +3 -3
  238. data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/ingress.yml.tt +0 -0
  239. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/ingresses/ingress.yaml +0 -0
  240. data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/job-migrate.yml.tt +0 -0
  241. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/jobs/setup.yaml +1 -1
  242. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/secret-digital-ocean.yml.tt +0 -0
  243. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/service.yml.tt +0 -0
  244. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/services/postgres_svc.yaml +2 -2
  245. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/services/rails_svc.yaml +3 -3
  246. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/services/redis_svc.yaml +2 -2
  247. data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/volumes/postgres_volumes.yaml +0 -0
  248. data/lib/roro/stacks/stories_v1/templates/roro/containers/.keep +0 -0
  249. data/lib/roro/stacks/stories_v1/templates/roro/containers/database/env/.keep +0 -0
  250. data/lib/roro/stacks/stories_v1/templates/roro/containers/database/scripts/.keep +0 -0
  251. data/lib/roro/stacks/stories_v1/templates/roro/env/.keep +0 -0
  252. data/lib/roro/stacks/stories_v1/templates/roro/keys/.keep +0 -0
  253. data/lib/roro/stacks/stories_v1/templates/roro/scripts/.keep +0 -0
  254. data/lib/roro/stacks/stories_v1/templates/roro/scripts/base/bundler.sh +22 -0
  255. data/lib/roro/stacks/stories_v1/templates/roro/scripts/base/git.sh +21 -0
  256. data/lib/roro/stacks/stories_v1/templates/roro/scripts/base/rvm.sh +38 -0
  257. data/lib/roro/stacks/stories_v1/templates/roro/scripts/base/utilities.sh +53 -0
  258. data/lib/roro/stacks/stories_v1/templates/roro/scripts/base.sh +6 -0
  259. data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize/clone_idea.sh +14 -0
  260. data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize/clone_repos.sh +33 -0
  261. data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize/install_correct_bundler.sh +21 -0
  262. data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize/install_rubies.sh +6 -0
  263. data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize.sh +18 -0
  264. data/lib/roro/stacks/stories_v1/templates/roro/scripts/roro.sh +15 -0
  265. data/lib/roro/stacks/stories_v1/templates/roro/scripts/source.sh +28 -0
  266. data/lib/roro/stacks/stories_v1/templates/roro/scripts/utility/bundle_all.sh +12 -0
  267. data/lib/roro/stacks/stories_v1/templates/roro/scripts/utility/git_pull_all.sh +15 -0
  268. data/lib/roro/stacks/stories_v1/templates/roro/scripts/utility/rvm_install_all.sh +12 -0
  269. data/lib/roro/stacks/stories_v1/templates/roro/scripts/utility/yarn_install_all.sh +10 -0
  270. data/lib/roro/stacks/stories_v1/templates/ruby_gem/.circleci/.keep +0 -0
  271. data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/.circleci/config.yml.tt +0 -0
  272. data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/.circleci/jobs/_test.yml +0 -0
  273. data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/.circleci/setup-gem-credentials.sh +0 -0
  274. data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/docker-compose.yml +1 -1
  275. data/lib/roro/stacks/stories_v1/templates/ruby_gem/roro/containers/.keep +0 -0
  276. data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/roro/containers/ruby_image/Dockerfile.tt +0 -0
  277. data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/roro/containers/ruby_image/ci.env.tt +0 -0
  278. data/lib/roro/stacks/stories_v1/templates/ruby_gem/roro/keys/.keep +0 -0
  279. data/lib/roro/version.rb +1 -1
  280. data/lib/roro.rb +60 -6
  281. data/mise/containers/ruby_gem/Dockerfile +16 -0
  282. data/{roro/containers/app/Dockerfile → mise/containers/ruby_gem/Dockerfile-app} +0 -0
  283. data/{roro/containers/ruby_image/Dockerfile → mise/containers/ruby_gem/Dockerfile-ruby_gem} +0 -0
  284. data/mise/containers/ruby_gem/env/.keep +0 -0
  285. data/mise/containers/ruby_gem/env/base.env.enc +1 -0
  286. data/mise/containers/ruby_gem/env/ci.env.enc +2 -0
  287. data/mise/containers/ruby_gem/env/development.env.enc +1 -0
  288. data/mise/containers/ruby_gem/env/production.env.enc +1 -0
  289. data/mise/containers/ruby_gem/scripts/.keep +0 -0
  290. data/mise/env/base.env.enc +1 -0
  291. data/mise/env/ci.env.enc +1 -0
  292. data/mise/env/development.env.enc +1 -0
  293. data/mise/env/production.env.enc +1 -0
  294. data/mise/mise.roro +0 -0
  295. data/roro.gemspec +7 -1
  296. metadata +338 -119
  297. data/lib/roro/cli/generate/exposed.rb +0 -14
  298. data/lib/roro/cli/generate/keys.rb +0 -69
  299. data/lib/roro/cli/generate/obfuscated.rb +0 -17
  300. data/lib/roro/cli/generate/story.rb +0 -18
  301. data/lib/roro/cli/greenfield/rails.rb +0 -14
  302. data/lib/roro/cli/rollon/rails/base/base.rb +0 -4
  303. data/lib/roro/cli/rollon/rails/base/insert_gems.rb +0 -23
  304. data/lib/roro/cli/rollon/rails/base/insertions.rb +0 -27
  305. data/lib/roro/cli/rollon/rails/database/with_mysql.rb +0 -22
  306. data/lib/roro/cli/rollon/rails/database/with_postgresql.rb +0 -20
  307. data/lib/roro/cli/rollon/rails/database.rb +0 -26
  308. data/lib/roro/cli/rollon/ruby_gem/with_ci_cd.rb +0 -45
  309. data/lib/roro/cli/rollon/ruby_gem.rb +0 -1
  310. data/lib/roro/cli/rollon/stories.rb +0 -2
  311. data/lib/roro/configurator/eligibility.rb +0 -137
  312. data/lib/roro/configurator/okonomi.rb +0 -28
  313. data/lib/roro/configurator/omakase.rb +0 -170
  314. data/lib/roro/crypto.rb +0 -73
  315. data/lib/roro/stories/rollon/rails/kubernetes/postgresql.yml +0 -10
  316. data/lib/roro/templates/base/.circleci/_aliases.yml +0 -8
  317. data/lib/roro/templates/base/.circleci/_commands.yml +0 -31
  318. data/lib/roro/templates/base/.circleci/_defaults.yml +0 -5
  319. data/lib/roro/templates/base/.circleci/_executors.yml +0 -11
  320. data/lib/roro/templates/base/.circleci/_major_only.yml +0 -4
  321. data/lib/roro/templates/base/.circleci/_version.yml +0 -1
  322. data/lib/roro/templates/base/.circleci/_workflow.yml +0 -2
  323. data/lib/roro/templates/base/.circleci/config.job-example.yml +0 -33
  324. data/lib/roro/templates/base/.circleci/jobs/_build.yml +0 -4
  325. data/lib/roro/templates/base/.circleci/jobs/_release.yml +0 -12
  326. data/lib/roro/templates/base/.circleci/workflows/_build_release.yml +0 -10
  327. data/lib/roro/templates/base/.dockerignore +0 -51
  328. data/lib/roro/templates/base/dotenv +0 -1
  329. data/lib/roro/templates/base/jumpstart/Dockerfile.tt +0 -30
  330. data/lib/roro/templates/base/jumpstart/docker-compose.yml +0 -59
  331. data/lib/roro/templates/base/jumpstart/docker-entrypoint.sh +0 -16
  332. data/lib/roro/templates/base/livereload/hosts.example +0 -7
  333. data/lib/roro/templates/rails/.circleci/jobs/_test.yml +0 -12
  334. data/lib/roro/templates/rails/database/with_mysql/_service.yml +0 -10
  335. data/lib/roro/templates/rails/database/with_postgresql/_service.yml +0 -7
  336. data/roro/containers/ruby_image/ci.env.enc +0 -2
@@ -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,31 +1,41 @@
1
+ # frozen_string_literal: true
1
2
 
2
- require 'roro/cli/generate/exposed'
3
- require 'roro/cli/generate/keys'
4
- require 'roro/cli/generate/obfuscated'
5
- require 'roro/cli/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
-
12
- 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'
13
10
 
14
11
  module Roro
15
12
  class CLI < Thor
16
-
17
13
  include Thor::Actions
18
-
14
+
19
15
  def self.source_root
20
- File.dirname(__FILE__) + '/templates'
16
+ "#{@template_root || File.dirname(__FILE__)}/templates"
21
17
  end
22
-
23
- def self.story_root
24
- File.dirname(__FILE__) + '/stories'
18
+
19
+ def self.catalog_root
20
+ "#{File.dirname(__FILE__)}/stacks/catalog/unstoppable/developer_styles"
25
21
  end
26
-
27
- def self.roro_environments
28
- %w(development production test staging ci)
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
35
+ end
36
+
37
+ def self.roro_environments
38
+ %w[base development production test staging ci]
29
39
  end
30
40
  end
31
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