Long living projects often times have a lot of experimental "styles" or "techniques" or even just "ad-hoc structure" in them. My projects are no exception.
Today I decided that I will force an unified structure for all the component files within said projects. My (currently) preferred way of nesting folders/files is: components/foo/bar/baz/index.{js,hbs}
.
It requires ruby
on your environment and setting COMPONENT_DIRECTORY
variable. Hope this might help someone.
#!/usr/bin/env ruby # # Unifies component structure # - components/foo.hbs -> components/foo/index.hbs # - components/foo.js -> components/foo/index.js # - components/bar/template.hbs -> components/bar/index.hbs # - components/bar/component.js -> components/bar/index.js COMPONENT_DIRECTORY='../your/app/or/addon/directory' Dir.chdir(COMPONENT_DIRECTORY) Dir.glob('./components/**/*.{hbs,js}').each do |entry| matches = %r{(.*)\/(.*)\.(hbs|js)$}.match(entry) next if matches[2] == 'index' is_weird_syntax = ((matches[2] == 'template') || (matches[2] == 'component')) new_folder = if is_weird_syntax matches[1] else File.join(matches[1], matches[2]) end Dir.mkdir(new_folder) unless File.exist?(new_folder) new_file = File.join(new_folder, "index.#{matches[3]}") File.rename(entry, new_file) puts "#{entry} => #{new_file}" end
Photo by Ronaldo de Oliveira on Unsplash
Top comments (0)