Sha256: 35aedc21bf1ecd917db0da2916337c4c3df7f7abd5d77dc9cd4f652127eada01

Contents?: true

Size: 1.95 KB

Versions: 5

Compression:

Stored size: 1.95 KB

Contents

# frozen_string_literal: true

module RailsAppGenerator
  # XXXX
  class AddOn < Rails::Generators::Base
    include Thor::Actions
    include Rails::Generators::Actions
    include Rails::Generators::AppName

    attr_reader :context
    attr_reader :gem_entries
    attr_reader :dependencies

    def initialize(context)
      super
      @context = context
      @dependencies = self.class.dependencies || []
      @gem_entries = self.class.gem_entries || []
    end

    def apply; end

    # list any methods that you want access to, but not to be exposed as a thor command
    no_commands do
      def source_paths
        [
          format(context.addon_template_path, addon: self.class.addon_name.to_s),
          context.rails_override_template_path,
          context.rails_template_path
        ]
      end

      def options
        context.options
      end

      def uses?(addon_name = nil)
        addon_name ||= self.class.addon_name

        return false  if options["skip_#{addon_name}".to_sym]
        return true   if context.default_addons.include?(addon_name)

        klass = addon_name.nil? ? self.class : self.class.get(addon_name)
        Dependencies.new(klass, context).satisfied?
      end
    end

    class << self
      def apply(context = Context.new({}))
        instance = new(context)
        return unless instance.uses?

        instance.apply
      end

      def get(addon)
        addon = addon.to_s.capitalize.camelize
        "RailsAppGenerator::AddOns::#{addon}".constantize
      end

      def addon_name
        name.demodulize.underscore.to_sym
      end

      def dependencies
        @dependencies ||= []
      end

      def gem_entries
        @gem_entries ||= []
      end

      protected

      def depends_on(*addon)
        @dependencies = addon.map(&:to_sym)
      end

      def required_gem(gem_entry)
        gem_entries << gem_entry
      end

      def gem
        Rails::Generators::AppBase::GemfileEntry
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
rails_app_generator-0.1.12 lib/rails_app_generator/add_on.rb
rails_app_generator-0.1.11 lib/rails_app_generator/add_on.rb
rails_app_generator-0.1.10 lib/rails_app_generator/add_on.rb
rails_app_generator-0.1.9 lib/rails_app_generator/add_on.rb
rails_app_generator-0.1.8 lib/rails_app_generator/add_on.rb