Rails generator not removing newly created folders on destroy

156 views Asked by At

I'm writing a Rails generator that is going to copy files/folders from my gem's template directory into the app's directory. It works as expected when I run rails generate mygem:install however when I try to reverse it using rails destroy mygem:install it doesn't remove the newly created sub folders.

templates folder

├── templates
│   ├── views
│   │   ├── about
│   │   │   ├── index.html.erb
│   │   ├── contact
│   │   │   ├── index.html.erb 

app folder (after generate)

├── app
│   ├── views
│   │   ├── about
│   │   │   ├── index.html.erb
│   │   ├── contact
│   │   │   ├── index.html.erb 

app folder (after destroy)

├── app
│   ├── views
│   │   ├── about
│   │   ├── contact

desired outcome

├── app
│   ├── views

my gem's install generator

module Mygem
  module Generators
    class InstallGenerator < Rails::Generators::Base

      source_root File.expand_path('../templates', __FILE__)

      def copy_templates
        templates = Dir.glob("#{source_paths[0]}/*")
        directory(templates[0], "app/views/")
      end

    end
  end
end
1

There are 1 answers

0
johansenja On

I encountered the same problem - fixed by adding the following to my generator.rb file

def clean_up
  case self.behavior
    when :revoke then `rm -rf path/to/directory/`
  end
end

You also have the :invoke option to specify actions which only happen when generating:

case self.behavior
  when :invoke then do_something
end

so

# something_generator.rb

def generate_directory
  case self.behavior
  when :invoke
    `mkdir path/to/directory`
  when :revoke
    `rm -rf path/to/directory`
  end
end