<commit_before>require 'generators/actions'

module Rails
  module Generators
    DEFAULTS = {
      :orm => 'active_record',
      :helper => true,
      :test_framework => 'test_unit',
      :template_engine => 'erb'
    }

    class Error < Thor::Error
    end

    class Base < Thor::Group
      include Rails::Generators::Actions
      include Thor::Actions

      # Automatically sets the source root based on the class name.
      #
      def self.source_root
        @source_root ||= File.expand_path(File.join(File.dirname(__FILE__), base_name, generator_name, 'templates'))
      end

      # Tries to get the description from a USAGE file one folder above the source
      # root otherwise uses a default description.
      #
      def self.desc(description=nil)
        return super if description
        usage = File.join(source_root, "..", "USAGE")

        @desc ||= if File.exist?(usage)
          File.read(usage)
        else
          "Description:\n    Create #{base_name.humanize.downcase} files for #{generator_name} generator."
        end
      end

      # Convenience method to get the namespace from the class name. It's the
      # same as Thor default except that the Generator at the end of the class
      # is removed.
      #
      def self.namespace(name=nil)
        return super if name
        @namespace ||= super.sub(/_generator$/, '')
      end

      # Invoke a generator based on the value supplied by the user to the
      # given option named "name". A class option is created when this method
      # is invoked and you can set a hash to customize it, although type and
      # default values cannot be given.
      #
      # ==== Examples
      #
      #   class ControllerGenerator < Rails::Generators::Base
      #     invoke_for :test_framework, :aliases => "-t"
      #   end
      #
      # The example above will create a test framework option and will invoke
      # a generator based on the user supplied value.
      #
      # For example, if the user invoke the controller generator as:
      #
      #   ruby script/generate controller Account --test-framework=test_unit
      #
      # The controller generator will then invoke "test_unit:generators:controller".
      # If it can't be found it then tries to invoke only "test_unit".
      #
      # This allows any test framework to hook into Rails as long as it
      # provides a "test_framework:generators:controller" generator.
      #
      # Finally, if the user don't want to use any test framework, he can do:
      #
      #   ruby script/generate controller Account --skip-test-framework
      #
      # Or similarly:
      #
      #   ruby script/generate controller Account --no-test-framework
      #
      def self.invoke_for(*names)
        default_options = names.extract_options!

        names.each do |name|
          options = default_options.dup
          options[:desc]    ||= "#{name.to_s.humanize} to be used"
          options[:banner]  ||= "NAME"
          options[:aliases] ||= "-" + name.to_s.gsub(/_framework$/, '').split('_').last[0,1]

          class_option name, options.merge!(:type => :default, :default => DEFAULTS[name])

          class_eval <<-METHOD, __FILE__, __LINE__
            def invoke_#{name}
              return unless options[#{name.inspect}]

              klass = Rails::Generators.find_by_namespace(options[#{name.inspect}],
                                                          nil, self.class.generator_name)

              if klass
                invoke klass
              else
                task = "\#{options[#{name.inspect}]}:generators:\#{self.class.generator_name}"
                say "Could not find and invoke '\#{task}'."
              end
            end
          METHOD
        end
      end

      # Invoke a generator with the given name if the user requires it. The
      # difference to invoke_for is that the class option here is boolean
      # and the generator invoked is not based on user input.
      #
      # A class option is created when this method is invoked and you can set
      # a hash to customize it, although type and default values cannot be
      # given.
      #
      # ==== Examples
      #
      #   class ControllerGenerator < Rails::Generators::Base
      #     invoke_if :webrat, :aliases => "-w"
      #   end
      #
      # The example above will create a helper option and will be invoked
      # when the user requires so:
      #
      #   ruby script/generate controller Account --webrat
      #
      # The controller generator will then try to invoke the following generators:
      #
      #   "rails:generators:webrat", "webrat:generators:controller", "webrat"
      #
      def self.invoke_if(*names)
        default_options = names.extract_options!

        names.each do |name|
          options = default_options.dup
          options[:desc]    ||= "Indicates when to use #{name.to_s.humanize}"
          options[:aliases] ||= "-" + name.to_s.last[0,1]

          class_option name, options.merge!(:type => :boolean, :default => DEFAULTS[name] || false)

          class_eval <<-METHOD, __FILE__, __LINE__
            def invoke_#{name}
              return unless options[#{name.inspect}]

              klass = Rails::Generators.find_by_namespace(#{name.inspect},
                                                          self.class.base_name, self.class.generator_name)

              if klass
                invoke klass
              else
                say "Could not find and invoke '#{name.inspect}'."<commit_msg>Do not generate aliases automatically to avoid conflicts.<commit_after>require 'generators/actions'

module Rails
  module Generators
    DEFAULTS = {
      :orm => 'active_record',
      :helper => true,
      :test_framework => 'test_unit',
      :template_engine => 'erb'
    }

    ALIASES = {
      :orm => '-o',
      :helper => '-v',
      :test_framework => '-t',
      :template_engine => '-e'
    }

    class Error < Thor::Error
    end

    class Base < Thor::Group
      include Rails::Generators::Actions
      include Thor::Actions

      # Automatically sets the source root based on the class name.
      #
      def self.source_root
        @source_root ||= File.expand_path(File.join(File.dirname(__FILE__), base_name, generator_name, 'templates'))
      end

      # Tries to get the description from a USAGE file one folder above the source
      # root otherwise uses a default description.
      #
      def self.desc(description=nil)
        return super if description
        usage = File.join(source_root, "..", "USAGE")

        @desc ||= if File.exist?(usage)
          File.read(usage)
        else
          "Description:\n    Create #{base_name.humanize.downcase} files for #{generator_name} generator."
        end
      end

      # Convenience method to get the namespace from the class name. It's the
      # same as Thor default except that the Generator at the end of the class
      # is removed.
      #
      def self.namespace(name=nil)
        return super if name
        @namespace ||= super.sub(/_generator$/, '')
      end

      # Invoke a generator based on the value supplied by the user to the
      # given option named "name". A class option is created when this method
      # is invoked and you can set a hash to customize it, although type and
      # default values cannot be given.
      #
      # ==== Examples
      #
      #   class ControllerGenerator < Rails::Generators::Base
      #     invoke_for :test_framework, :aliases => "-t"
      #   end
      #
      # The example above will create a test framework option and will invoke
      # a generator based on the user supplied value.
      #
      # For example, if the user invoke the controller generator as:
      #
      #   ruby script/generate controller Account --test-framework=test_unit
      #
      # The controller generator will then invoke "test_unit:generators:controller".
      # If it can't be found it then tries to invoke only "test_unit".
      #
      # This allows any test framework to hook into Rails as long as it
      # provides a "test_framework:generators:controller" generator.
      #
      # Finally, if the user don't want to use any test framework, he can do:
      #
      #   ruby script/generate controller Account --skip-test-framework
      #
      # Or similarly:
      #
      #   ruby script/generate controller Account --no-test-framework
      #
      def self.invoke_for(*names)
        default_options = names.extract_options!

        names.each do |name|
          options = default_options.dup
          options[:desc]    ||= "#{name.to_s.humanize} to be used"
          options[:banner]  ||= "NAME"
          options[:aliases] ||= ALIASES[name]

          class_option name, options.merge!(:type => :default, :default => DEFAULTS[name])

          class_eval <<-METHOD, __FILE__, __LINE__
            def invoke_#{name}
              return unless options[#{name.inspect}]

              klass = Rails::Generators.find_by_namespace(options[#{name.inspect}],
                                                          nil, self.class.generator_name)

              if klass
                invoke klass
              else
                task = "\#{options[#{name.inspect}]}:generators:\#{self.class.generator_name}"
                say "Could not find and invoke '\#{task}'."
              end
            end
          METHOD
        end
      end

      # Invoke a generator with the given name if the user requires it. The
      # difference to invoke_for is that the class option here is boolean
      # and the generator invoked is not based on user input.
      #
      # A class option is created when this method is invoked and you can set
      # a hash to customize it, although type and default values cannot be
      # given.
      #
      # ==== Examples
      #
      #   class ControllerGenerator < Rails::Generators::Base
      #     invoke_if :webrat, :aliases => "-w"
      #   end
      #
      # The example above will create a helper option and will be invoked
      # when the user requires so:
      #
      #   ruby script/generate controller Account --webrat
      #
      # The controller generator will then try to invoke the following generators:
      #
      #   "rails:generators:webrat", "webrat:generators:controller", "webrat"
      #
      def self.invoke_if(*names)
        default_options = names.extract_options!

        names.each do |name|
          options = default_options.dup
          options[:desc] ||= "Indicates when to use #{name.to_s.humanize}"

          class_option name, options.merge!(:type => :boolean, :default => DEFAULTS[name] || false)

          class_eval <<-METHOD, __FILE__, __LINE__
            def invoke_#{name}
              return unless options[#{name.inspect}]

              klass = Rails::Generators.find_by_namespace(#{name.inspect},
                                                          self.class.base_name, self.class.generator_name)

              if klass
                invoke klass
              else
                say "Could not find and invoke '#{name.inspect}'."
{'fraction_non_alphanumeric': 0.09205582393988192, 'fraction_numerical': 0.0003578457684737878, 'mean_word_length': 2.009152086137281, 'pattern_counts': {'":': 0, '<': 19, '<?xml version=': 0, '>': 27, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 8, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3722402', 'n_tokens_mistral': 2985, 'n_tokens_neox': 2931, 'n_words': 988}