Sha256: 3fa5a178c59247d7fd05f4a120f0ee7a7dc483aeb6dc732ec307be41202de789

Contents?: true

Size: 1.73 KB

Versions: 21

Compression:

Stored size: 1.73 KB

Contents

# frozen_string_literal: true

module PlutoniumGenerators
  module Concerns
    module ResourceSelector
      def self.included(base)
        # base.send :class_option, :resources, type: :array, desc: "List of resource model names if applicable"
        base.send :argument, :resources, type: :array, optional: true, default: [],
          desc: "List of model names if applicable"
      end

      private

      def available_resources(source_module)
        Plutonium.eager_load_rails!

        source_module.constantize.descendants.reject do |resource_klass|
          next true if resource_klass.abstract_class?
          next true if source_module == "ApplicationRecord" &&
            resource_klass.ancestors.any? { |ancestor| ancestor.to_s.end_with?("::ResourceRecord") }
        end.map(&:to_s).sort
      end

      def select_resources(source_module, prompt: "Select resources")
        resources = available_resources(source_module)
        error "No resources found" if resources.blank?

        self.prompt.multi_select(prompt, resources)
      end

      def resources_selection(prompt: nil)
        ivar = :@resources_selection
        return instance_variable_get(ivar) if instance_variable_defined?(ivar)

        # Convert comma-separated string to array if from command line
        value = resources.map(&:classify)
        if value.empty?
          source_feature = feature_option :src, prompt: "Select source feature"
          source_module = (source_feature == "main_app") ? "ApplicationRecord" : "#{source_feature.camelize}::ResourceRecord"
          value = select_resources(source_module, prompt: prompt || "Select #{source_module} resources")
        end

        instance_variable_set(ivar, value)
        value
      end
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
plutonium-0.20.4 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.20.3 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.20.1 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.20.0 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.19.13 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.19.12 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.19.11 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.19.10 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.19.9 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.19.8 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.19.7 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.19.6 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.19.5 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.19.4 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.19.3 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.19.2 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.19.1 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.19.0 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.18.8 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb
plutonium-0.18.7 lib/generators/pu/lib/plutonium_generators/concerns/resource_selector.rb