roro 0.3.22 → 0.3.23
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +99 -68
- data/.gitignore +31 -7
- data/.ruby-version +1 -0
- data/Gemfile +1 -1
- data/Guardfile +23 -13
- data/README.md +9 -10
- data/bin/console +1 -1
- data/bin/setup +1 -1
- data/docker-compose.yml +3 -3
- data/lib/roro/cli/generate/generate.rb +52 -1
- data/lib/roro/cli/generate/generate_containers.rb +23 -0
- data/lib/roro/cli/generate/generate_environments.rb +25 -0
- data/lib/roro/cli/generate/generate_exposed.rb +4 -11
- data/lib/roro/cli/generate/generate_keys.rb +7 -6
- data/lib/roro/cli/generate/generate_mise.rb +13 -0
- data/lib/roro/cli/generate/generate_obfuscated.rb +5 -25
- data/lib/roro/cli/roll_your_own.rb +12 -0
- data/lib/roro/cli/rollon.rb +11 -138
- data/lib/roro/cli.rb +30 -23
- data/lib/roro/common/file_reflection.rb +33 -0
- data/lib/roro/common/utilities.rb +185 -0
- data/lib/roro/configurator.rb +14 -14
- data/lib/roro/configurators/adventure_case_builder.rb +65 -0
- data/lib/roro/configurators/adventure_chooser.rb +46 -0
- data/lib/roro/configurators/adventure_picker.rb +68 -0
- data/lib/roro/configurators/adventure_writer.rb +34 -0
- data/lib/roro/configurators/catalog_builder.rb +17 -0
- data/lib/roro/configurators/configurator.rb +64 -0
- data/lib/roro/configurators/eligibility.rb +141 -0
- data/lib/roro/configurators/question_asker.rb +29 -0
- data/lib/roro/configurators/question_builder.rb +83 -0
- data/lib/roro/configurators/structure_builder.rb +34 -0
- data/lib/roro/configurators/utilities.rb +188 -0
- data/lib/roro/configurators/validator.rb +109 -0
- data/lib/roro/crypto/cipher.rb +35 -0
- data/lib/roro/crypto/exposer.rb +33 -0
- data/lib/roro/crypto/file_writer.rb +14 -0
- data/lib/roro/crypto/key_writer.rb +35 -0
- data/lib/roro/crypto/obfuscator.rb +25 -0
- data/lib/roro/error.rb +31 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/fatsufodo.yml +1 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/django.yml +38 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/templates/stage_one/Dockerfile.tt +7 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/templates/stage_one/docker-compose.yml.tt +20 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/templates/stage_one/requirements.txt.tt +2 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/templates/stage_two/settings.py +130 -0
- data/lib/roro/{templates/base/jumpstart → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/test/stage_one/dummy}/.keep +0 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/test/stage_one/stage_one_test.rb +37 -0
- data/lib/roro/{templates/base/roro → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/django/test/stage_two/dummy}/.keep +0 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/expressjs/expressjs.yml +8 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/expressjs/templates/stage_one/Dockerfile.tt +14 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/expressjs/templates/stage_one/docker-compose.yml.tt +21 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/flask.yml +14 -0
- data/lib/roro/{templates/base/roro/roro → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one}/.keep +0 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one/Dockerfile +11 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one/app.py +23 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one/docker-compose.yml +8 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/templates/stage_one/requirements.txt +2 -0
- data/lib/roro/{templates/base/roro/roro/containers → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/test}/.keep +0 -0
- data/lib/roro/{templates/base/roro/roro/containers/app → stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/test/stage_one}/.keep +0 -0
- 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
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/flask/test/stage_one/stage_test.rb +37 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/rails.yml +12 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_one/Dockerfile.tt +16 -0
- 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
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_one/Gemfile.tt +2 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_one/docker-compose.yml.tt +9 -0
- 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
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/rails/templates/stage_two/database.yml.tt +16 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/wordpress/templates/stage_one/docker-compose.yml.tt +31 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/fatsufodo/stories/wordpress/wordpress.yml +17 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/okonomi.yml +1 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/roll_your_own.yml +23 -0
- 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
- 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
- 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
- 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
- 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
- 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
- data/lib/roro/{templates/rails/roro → stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/test/stage_one/dummy}/.keep +0 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/okonomi/stories/roll_your_own/test/stage_one/stage_one_test.rb +58 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/omakase.yml +1 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/rails.yml +13 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/Dockerfile.tt +16 -0
- data/lib/roro/{templates/rails/roro/containers/.keep → stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/Gemfile.lock.tt} +0 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/Gemfile.tt +2 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/docker-compose.yml.tt +17 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_one/entrypoint.sh +8 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/rails/templates/stage_two/database.yml.tt +16 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/.env +38 -0
- data/lib/roro/{templates/rails/roro/containers/app → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one}/.keep +0 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/LICENSE +674 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/README.md +346 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/build.sh +39 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/nginx/cfg/nginx-custom-configs.conf +117 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/nginx/cfg/nginx-wp-hardening.conf +131 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/nginx/tpl/nginx-http.conf.template +103 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/nginx/tpl/nginx-https.conf.example +123 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/config/php.conf.ini +3 -0
- 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
- 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
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/docker-compose-build.yml +24 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/docker-compose-dev.yml +96 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/docker-compose-prod.yml +147 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/dump_mysql.sh +16 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/init_letsencrypt.sh +80 -0
- data/lib/roro/{templates/rails/roro/kube/.keep → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/mysql-dumps/.placeholder} +0 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/push.sh +22 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/wordpress/Dockerfile +14 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/templates/stage_one/wordpress/adduser.sh +15 -0
- 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
- 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
- data/lib/roro/{templates/ruby_gem/.circleci → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/test}/.keep +0 -0
- data/lib/roro/{templates/ruby_gem/roro/containers → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/test/stage_one}/.keep +0 -0
- data/lib/roro/{templates/ruby_gem/roro/keys → stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/test/stage_one/stage_dummy}/.keep +0 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/test/stage_one/stage_test.rb +40 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/omakase/stories/wordpress/wordpress.yml +76 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/fatsufodo.yml +1 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/django.yml +36 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_one/Dockerfile.tt +7 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_one/docker-compose.yml.tt +20 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_one/requirements.txt.tt +2 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/templates/stage_two/settings.py +130 -0
- data/{roro/containers → lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/test/stage_one/dummy}/.keep +0 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/test/stage_one/stage_one_test.rb +37 -0
- data/{roro/keys → lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/django/test/stage_two/dummy}/.keep +0 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/expressjs/expressjs.yml +7 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/expressjs/templates/stage_one/Dockerfile.tt +14 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/expressjs/templates/stage_one/docker-compose.yml.tt +21 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/rails.yml +12 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/Dockerfile.tt +16 -0
- 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
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/Gemfile.tt +2 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/docker-compose.yml.tt +17 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_one/entrypoint.sh +8 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/rails/templates/stage_two/database.yml.tt +16 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/__MACOSX/scripts/._.DS_Store +0 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/.DS_Store +0 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/bundler.sh +22 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/git.sh +21 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/rvm.sh +38 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base/utilities.sh +53 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/base.sh +6 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/clone_idea.sh +14 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/clone_repos.sh +33 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/install_correct_bundler.sh +21 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize/install_rubies.sh +6 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/initialize.sh +18 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/roro.sh +15 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/source.sh +28 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/bundle_all.sh +12 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/git_pull_all.sh +15 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/rvm_install_all.sh +12 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/roro/templates/scripts/utility/yarn_install_all.sh +10 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/wordpress/templates/stage_one/docker-compose.yml.tt +31 -0
- data/lib/roro/stacks/catalog/unstoppable/developer_styles/sashimi/stories/wordpress/wordpress.yml +16 -0
- data/{sandbox → lib/roro/stacks/library/roro}/.keep +0 -0
- data/lib/roro/stacks/library/roro/docker_compose/docker-compose.yml +22 -0
- data/lib/roro/stacks/library/roro/k8s/k8s.yml +15 -0
- data/lib/roro/{templates/rails/roro/kube/job-migrate.yml.tt → stacks/library/roro/plots/node/.keep} +0 -0
- data/lib/roro/stacks/library/roro/plots/node/node.yml +22 -0
- data/lib/roro/stacks/library/roro/plots/php/.keep +0 -0
- data/lib/roro/stacks/library/roro/plots/php/php.yml +22 -0
- data/lib/roro/stacks/library/roro/plots/python/plots/django/.keep +0 -0
- data/lib/roro/stacks/library/roro/plots/python/plots/django/django.yml +10 -0
- data/lib/roro/stacks/library/roro/plots/python/plots/django/templates/Dockerfile +7 -0
- data/lib/roro/stacks/library/roro/plots/python/plots/django/templates/docker-compose.yml +20 -0
- data/lib/roro/stacks/library/roro/plots/python/plots/django/templates/requirements.txt +2 -0
- data/lib/roro/stacks/library/roro/plots/python/plots/flask/flask.yml +0 -0
- data/lib/roro/stacks/library/roro/plots/python/python.yml +1 -0
- data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/databases/.keep +0 -0
- data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/databases/mysql.yml +22 -0
- data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/databases/postgres.yml +22 -0
- data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails/rails.yml +22 -0
- data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails/templates/.keep +0 -0
- data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails_react/rails_react.yml +22 -0
- data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails_react/templates/.keep +0 -0
- data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails_vue/rails_vue.yml +22 -0
- data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/plots/rails_vue/templates/.keep +0 -0
- data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/rails.yml +16 -0
- data/lib/roro/stacks/library/roro/plots/ruby/plots/rails/templates/.keep +0 -0
- data/lib/roro/stacks/library/roro/plots/ruby/plots/ruby_gem/ruby_gem.yml +22 -0
- data/lib/roro/stacks/library/roro/plots/ruby/ruby.yml +22 -0
- data/lib/roro/stacks/library/roro/roro/roro.yml +15 -0
- data/lib/roro/{stories → stacks/stories_v1}/greenfield/rails.yml +2 -2
- data/lib/roro/stacks/stories_v1/greenfield/roro.yml +7 -0
- data/lib/roro/{stories → stacks/stories_v1}/greenfield.yml +0 -0
- data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/ci_cd/circleci.yml +0 -0
- data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/ci_cd.yml +0 -0
- data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/database/mysql.yml +1 -1
- data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/database/postgresql.yml +1 -1
- data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/database.yml +0 -0
- data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/kubernetes/postgresql/default.yml +0 -0
- data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/kubernetes/postgresql/edge.yml +0 -0
- data/lib/roro/stacks/stories_v1/rollon/rails/kubernetes/postgresql.yml +10 -0
- data/lib/roro/{stories → stacks/stories_v1}/rollon/rails/kubernetes.yml +0 -0
- data/lib/roro/{stories → stacks/stories_v1}/rollon/rails.yml +7 -7
- data/lib/roro/stacks/stories_v1/rollon/roro.yml +5 -0
- data/lib/roro/{stories → stacks/stories_v1}/rollon/ruby_gem.yml +0 -0
- data/lib/roro/{stories → stacks/stories_v1}/rollon.yml +0 -0
- data/lib/roro/stacks/stories_v1/templates/rails/.circleci/.keep +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/config.yml.tt +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/jobs/_build.yml +1 -1
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/jobs/_push.yml +1 -1
- data/lib/roro/stacks/stories_v1/templates/rails/.circleci/jobs/_test.yml +12 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/setup-gem-credentials.sh +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/.circleci/workflows/_build_test_push.yml +0 -0
- data/lib/roro/stacks/stories_v1/templates/rails/.keep +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/Dockerfile.greenfield.tt +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/config/database.mysql.yml +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/config/database.pg.yml +0 -0
- data/lib/roro/stacks/stories_v1/templates/rails/database/with_mysql/_service.yml +10 -0
- data/lib/roro/stacks/stories_v1/templates/rails/database/with_postgresql/.keep +0 -0
- data/lib/roro/stacks/stories_v1/templates/rails/database/with_postgresql/_service.yml +7 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/docker-compose.yml.tt +0 -0
- data/lib/roro/stacks/stories_v1/templates/rails/dotenv/.keep +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/dotenv/database.mysql.env.tt +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/dotenv/database.pg.env.tt +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/dotenv/web.env.tt +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/kube.rake.tt +0 -0
- data/lib/roro/stacks/stories_v1/templates/rails/roro/.keep +0 -0
- data/lib/roro/stacks/stories_v1/templates/rails/roro/containers/.keep +0 -0
- data/lib/roro/stacks/stories_v1/templates/rails/roro/containers/app/.keep +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/containers/app/Dockerfile.tt +0 -0
- data/lib/roro/stacks/stories_v1/templates/rails/roro/containers/frontend/.keep +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/docker-entrypoint.sh +0 -0
- data/lib/roro/stacks/stories_v1/templates/rails/roro/keys/.keep +0 -0
- data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/.keep +0 -0
- data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/certificate.yml.tt +0 -0
- data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/cluster-issuer.yml.tt +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployment.yml.tt +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployments/postgres_deploy.yaml +3 -3
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployments/rails_deploy.yaml +5 -5
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployments/redis_deploy.yaml +2 -2
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/deployments/sidekiq_deploy.yaml +3 -3
- data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/ingress.yml.tt +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/ingresses/ingress.yaml +0 -0
- data/lib/roro/stacks/stories_v1/templates/rails/roro/kube/job-migrate.yml.tt +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/jobs/setup.yaml +1 -1
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/secret-digital-ocean.yml.tt +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/service.yml.tt +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/services/postgres_svc.yaml +2 -2
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/services/rails_svc.yaml +3 -3
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/services/redis_svc.yaml +2 -2
- data/lib/roro/{templates → stacks/stories_v1/templates}/rails/roro/kube/volumes/postgres_volumes.yaml +0 -0
- data/lib/roro/stacks/stories_v1/templates/roro/containers/.keep +0 -0
- data/lib/roro/stacks/stories_v1/templates/roro/containers/database/env/.keep +0 -0
- data/lib/roro/stacks/stories_v1/templates/roro/containers/database/scripts/.keep +0 -0
- data/lib/roro/stacks/stories_v1/templates/roro/env/.keep +0 -0
- data/lib/roro/stacks/stories_v1/templates/roro/keys/.keep +0 -0
- data/lib/roro/stacks/stories_v1/templates/roro/scripts/.keep +0 -0
- data/lib/roro/stacks/stories_v1/templates/roro/scripts/base/bundler.sh +22 -0
- data/lib/roro/stacks/stories_v1/templates/roro/scripts/base/git.sh +21 -0
- data/lib/roro/stacks/stories_v1/templates/roro/scripts/base/rvm.sh +38 -0
- data/lib/roro/stacks/stories_v1/templates/roro/scripts/base/utilities.sh +53 -0
- data/lib/roro/stacks/stories_v1/templates/roro/scripts/base.sh +6 -0
- data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize/clone_idea.sh +14 -0
- data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize/clone_repos.sh +33 -0
- data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize/install_correct_bundler.sh +21 -0
- data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize/install_rubies.sh +6 -0
- data/lib/roro/stacks/stories_v1/templates/roro/scripts/initialize.sh +18 -0
- data/lib/roro/stacks/stories_v1/templates/roro/scripts/roro.sh +15 -0
- data/lib/roro/stacks/stories_v1/templates/roro/scripts/source.sh +28 -0
- data/lib/roro/stacks/stories_v1/templates/roro/scripts/utility/bundle_all.sh +12 -0
- data/lib/roro/stacks/stories_v1/templates/roro/scripts/utility/git_pull_all.sh +15 -0
- data/lib/roro/stacks/stories_v1/templates/roro/scripts/utility/rvm_install_all.sh +12 -0
- data/lib/roro/stacks/stories_v1/templates/roro/scripts/utility/yarn_install_all.sh +10 -0
- data/lib/roro/stacks/stories_v1/templates/ruby_gem/.circleci/.keep +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/.circleci/config.yml.tt +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/.circleci/jobs/_test.yml +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/.circleci/setup-gem-credentials.sh +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/docker-compose.yml +1 -1
- data/lib/roro/stacks/stories_v1/templates/ruby_gem/roro/containers/.keep +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/roro/containers/ruby_image/Dockerfile.tt +0 -0
- data/lib/roro/{templates → stacks/stories_v1/templates}/ruby_gem/roro/containers/ruby_image/ci.env.tt +0 -0
- data/lib/roro/stacks/stories_v1/templates/ruby_gem/roro/keys/.keep +0 -0
- data/lib/roro/version.rb +1 -1
- data/lib/roro.rb +59 -14
- data/mise/containers/ruby_gem/Dockerfile +16 -0
- data/{roro/containers/app/Dockerfile → mise/containers/ruby_gem/Dockerfile-app} +0 -0
- data/{roro/containers/ruby_image/Dockerfile → mise/containers/ruby_gem/Dockerfile-ruby_gem} +0 -0
- data/mise/containers/ruby_gem/env/.keep +0 -0
- data/mise/containers/ruby_gem/env/base.env.enc +1 -0
- data/mise/containers/ruby_gem/env/ci.env.enc +2 -0
- data/mise/containers/ruby_gem/env/development.env.enc +1 -0
- data/mise/containers/ruby_gem/env/production.env.enc +1 -0
- data/mise/containers/ruby_gem/scripts/.keep +0 -0
- data/mise/env/base.env.enc +1 -0
- data/mise/env/ci.env.enc +1 -0
- data/mise/env/development.env.enc +1 -0
- data/mise/env/production.env.enc +1 -0
- data/mise/mise.roro +0 -0
- data/process.yml +401 -0
- data/roro.gemspec +6 -1
- metadata +322 -118
- data/lib/roro/cli/generate/generate_story.rb +0 -18
- data/lib/roro/cli/greenfield/rails.rb +0 -14
- data/lib/roro/cli/rollon/rails/base/base.rb +0 -4
- data/lib/roro/cli/rollon/rails/base/insert_gems.rb +0 -23
- data/lib/roro/cli/rollon/rails/base/insertions.rb +0 -27
- data/lib/roro/cli/rollon/rails/database/with_mysql.rb +0 -22
- data/lib/roro/cli/rollon/rails/database/with_postgresql.rb +0 -20
- data/lib/roro/cli/rollon/rails/database.rb +0 -26
- data/lib/roro/cli/rollon/ruby_gem/with_ci_cd.rb +0 -45
- data/lib/roro/cli/rollon/ruby_gem.rb +0 -1
- data/lib/roro/cli/rollon/stories.rb +0 -2
- data/lib/roro/configurator/eligibility.rb +0 -137
- data/lib/roro/configurator/okonomi.rb +0 -28
- data/lib/roro/configurator/omakase.rb +0 -170
- data/lib/roro/crypto.rb +0 -113
- data/lib/roro/stories/rollon/rails/kubernetes/postgresql.yml +0 -10
- data/lib/roro/templates/base/.circleci/_aliases.yml +0 -8
- data/lib/roro/templates/base/.circleci/_commands.yml +0 -31
- data/lib/roro/templates/base/.circleci/_defaults.yml +0 -5
- data/lib/roro/templates/base/.circleci/_executors.yml +0 -11
- data/lib/roro/templates/base/.circleci/_major_only.yml +0 -4
- data/lib/roro/templates/base/.circleci/_version.yml +0 -1
- data/lib/roro/templates/base/.circleci/_workflow.yml +0 -2
- data/lib/roro/templates/base/.circleci/config.job-example.yml +0 -33
- data/lib/roro/templates/base/.circleci/jobs/_build.yml +0 -4
- data/lib/roro/templates/base/.circleci/jobs/_release.yml +0 -12
- data/lib/roro/templates/base/.circleci/workflows/_build_release.yml +0 -10
- data/lib/roro/templates/base/.dockerignore +0 -51
- data/lib/roro/templates/base/dotenv +0 -1
- data/lib/roro/templates/base/jumpstart/Dockerfile.tt +0 -30
- data/lib/roro/templates/base/jumpstart/docker-compose.yml +0 -59
- data/lib/roro/templates/base/jumpstart/docker-entrypoint.sh +0 -16
- data/lib/roro/templates/base/livereload/hosts.example +0 -7
- data/lib/roro/templates/rails/.circleci/jobs/_test.yml +0 -12
- data/lib/roro/templates/rails/database/with_mysql/_service.yml +0 -10
- data/lib/roro/templates/rails/database/with_postgresql/_service.yml +0 -7
- data/roro/containers/app/dotenv +0 -1
data/lib/roro/cli/rollon.rb
CHANGED
@@ -1,147 +1,20 @@
|
|
1
1
|
module Roro
|
2
2
|
class CLI < Thor
|
3
3
|
|
4
|
-
|
5
|
-
|
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
|
-
|
68
|
-
|
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
|
-
|
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
|
-
|
106
|
-
|
107
|
-
|
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
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
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__)
|
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.
|
23
|
-
|
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.
|
27
|
-
|
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
|
data/lib/roro/configurator.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
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
|