Wrong constant name (NameError) for helper and stack name with hyphens

Stack with hyphens in name works well until helper.

Test case code

terraspace new project testcase1
cd testcase1
terraspace new stack app-case1
AWS_ACCOUNT=abcd AWS_REGION=us-east-1 terraspace build
terraspace new helper app-case1 --type stack --name moduleVersions
AWS_ACCOUNT=abcd AWS_REGION=us-east-1 terraspace build

you’ll get

Traceback (most recent call last):
5: from .../.rbenv/versions/2.7.2/bin/terraspace:23:in `'
4: from .../.rbenv/versions/2.7.2/bin/terraspace:23:in `load'
3: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/exe/terraspace:14:in `'
2: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/thor-1.1.0/lib/thor/base.rb:485:in `start'
1: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/command.rb:59:in `dispatch'
0: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/thor-1.1.0/lib/thor.rb:392:in `dispatch'
9: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/thor-1.1.0/lib/thor/invocation.rb:127:in `invoke_command'
8: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/thor-1.1.0/lib/thor/command.rb:27:in `run'
7: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/cli.rb:53:in `build'
6: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/builder.rb:13:in `run'
5: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/builder.rb:77:in `clean'
4: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/compiler/cleaner.rb:9:in `clean'
3: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/compiler/cleaner.rb:16:in `backend_change_purge'
2: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/compiler/cleaner/backend_change.rb:10:in `purge'
1: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/compiler/cleaner/backend_change.rb:21:in `purge?'
0: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/compiler/cleaner/backend_change.rb:40:in `fresh_backend'
9: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/compiler/strategy/mod.rb:7:in `run'
8: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/compiler/strategy/mod/tf.rb:4:in `run'
7: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/compiler/erb/render.rb:8:in `build'
6: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/compiler/erb/render.rb:8:in `new'
5: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/compiler/erb/context.rb:10:in `initialize'
4: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/compiler/helper_extender.rb:6:in `extend_module_level_helpers'
3: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/compiler/helper_extender.rb:6:in `each'
2: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/compiler/helper_extender.rb:9:in `block in extend_module_level_helpers'
1: from .../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/compiler/helper_extender.rb:20:in `mod_namespace'
.../.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/terraspace-0.6.2/lib/terraspace/compiler/helper_extender.rb:20:in `const_defined?': wrong constant name App-case1 (NameError)

Bummer. That’s a bug. Fixed here: https://github.com/boltops-tools/terraspace/pull/91 This allows dashes for stack names, but helper filenames should be underscored and their module names should be CamelCase. CamelCase is the Ruby standard convention.

Note, Ruby CamelCase is different from JavaScript camelCase. JavaScript PascalCase is Ruby CamelCase, and Ruby doesn’t refer to PascalCase much because it is CamelCase. At least, that’s what I’ve seen in the wild.

Thank you for the patch, It works fine for me.