Sha256: 5ce98dcafa8f15d2d56abae1cb871504a0f7c07ff67a049fb4e73c8642d6c630
Contents?: true
Size: 1.76 KB
Versions: 13
Compression:
Stored size: 1.76 KB
Contents
# frozen_string_literal: true module ApiMe module Generators class PolicyGenerator < ::Rails::Generators::NamedBase source_root File.expand_path('templates', __dir__) check_class_collision suffix: 'Policy' argument :attributes, type: :array, default: [], banner: 'field field' class_option :parent, type: :string, desc: 'The parent class for the generated policy' def create_api_policy_file template 'policy.rb', File.join('app/policies', "#{singular_name}_policy.rb") end def policy_class_name "#{class_name}Policy" end def attributes_names attributes.reject(&:reference?).map { |a| a.name.to_sym } end def associations attributes.select(&:reference?) end def nonpolymorphic_attribute_names associations.select { |attr| attr.type.in?(%i[belongs_to references]) } .reject { |attr| attr.attr_options.fetch(:polymorphic, false) } .map { |attr| "#{attr.name}_id".to_sym } end def polymorphic_attribute_names associations.select { |attr| attr.type.in?(%i[belongs_to references]) } .select { |attr| attr.attr_options.fetch(:polymorphic, false) } .map { |attr| ["#{attr.name}_id".to_sym, "#{attr.name}_type".to_sym] }.flatten end def association_attribute_names nonpolymorphic_attribute_names + polymorphic_attribute_names end def strong_parameters (attributes_names + association_attribute_names).map(&:inspect).join(', ') end def parent_class_name if options[:parent] options[:parent] else 'ApplicationPolicy' end end hook_for :test_framework end end end
Version data entries
13 entries across 13 versions & 1 rubygems