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