diff options
Diffstat (limited to 'lib/rails/generators/mailbox')
4 files changed, 55 insertions, 0 deletions
diff --git a/lib/rails/generators/mailbox/USAGE b/lib/rails/generators/mailbox/USAGE new file mode 100644 index 0000000000..d679dd63ae --- /dev/null +++ b/lib/rails/generators/mailbox/USAGE @@ -0,0 +1,12 @@ +Description: +============ +    Stubs out a new mailbox class in app/mailboxes and invokes your template +    engine and test framework generators. + +Example: +======== +    rails generate mailbox inbox + +    creates a InboxMailbox class and test: +        Mailbox:  app/mailboxes/inbox_mailbox.rb +        Test:     test/mailboxes/inbox_mailbox_test.rb diff --git a/lib/rails/generators/mailbox/mailbox_generator.rb b/lib/rails/generators/mailbox/mailbox_generator.rb new file mode 100644 index 0000000000..c2c403b8f6 --- /dev/null +++ b/lib/rails/generators/mailbox/mailbox_generator.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +module Rails +  module Generators +    class MailboxGenerator < NamedBase +      source_root File.expand_path("templates", __dir__) + +      check_class_collision suffix: "Mailbox" + +      def create_mailbox_file +        template "mailbox.rb", File.join("app/mailboxes", class_path, "#{file_name}_mailbox.rb") + +        in_root do +          if behavior == :invoke && !File.exist?(application_mailbox_file_name) +            template "application_mailbox.rb", application_mailbox_file_name +          end +        end +      end + +      hook_for :test_framework + +      private +        def file_name # :doc: +          @_file_name ||= super.sub(/_mailbox\z/i, "") +        end + +        def application_mailbox_file_name +          "app/mailboxes/application_mailbox.rb" +        end +    end +  end +end diff --git a/lib/rails/generators/mailbox/templates/application_mailbox.rb.tt b/lib/rails/generators/mailbox/templates/application_mailbox.rb.tt new file mode 100644 index 0000000000..be51eb3639 --- /dev/null +++ b/lib/rails/generators/mailbox/templates/application_mailbox.rb.tt @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +class ApplicationMailbox < ActionMailbox::Base +  # routing /something/i => :somewhere +end diff --git a/lib/rails/generators/mailbox/templates/mailbox.rb.tt b/lib/rails/generators/mailbox/templates/mailbox.rb.tt new file mode 100644 index 0000000000..56b138e2d9 --- /dev/null +++ b/lib/rails/generators/mailbox/templates/mailbox.rb.tt @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +class <%= class_name %>Mailbox < ApplicationMailbox +  def process +  end +end  | 
