class Rails::Generators::AppBase
def deduce_implied_options(options, option_reasons, meta_options)
def deduce_implied_options(options, option_reasons, meta_options) active = options.transform_values { |value| [] if value }.compact irrevocable = (active.keys - meta_options).to_set deduction_order = TSort.tsort( ->(&block) { option_reasons.each_key(&block) }, ->(key, &block) { option_reasons[key]&.each(&block) } ) deduction_order.each do |name| active_reasons = option_reasons[name].to_a.select(&active) active[name] ||= active_reasons if active_reasons.any? irrevocable << name if active_reasons.any?(irrevocable) end revoked = options.select { |name, value| value == false }.keys.to_set - irrevocable deduction_order.reverse_each do |name| revoked += option_reasons[name].to_a if revoked.include?(name) end revoked -= meta_options active.filter_map do |name, reasons| unless revoked.include?(name) || reasons.all?(revoked) [name, reasons - revoked.to_a] end end.to_h end