class ApiMe::Generators::ControllerGenerator

Public Instance Methods

association_attribute_names() click to toggle source
# File lib/generators/api_me/controller/controller_generator.rb, line 57
def association_attribute_names
  nonpolymorphic_attribute_names + polymorphic_attribute_names
end
associations() click to toggle source
# File lib/generators/api_me/controller/controller_generator.rb, line 41
def associations
  attributes.select(&:reference?)
end
attributes_names() click to toggle source
# File lib/generators/api_me/controller/controller_generator.rb, line 37
def attributes_names
  [:id] + attributes.reject(&:reference?).map { |a| a.name.to_sym }
end
controller_class_name() click to toggle source
# File lib/generators/api_me/controller/controller_generator.rb, line 31
def controller_class_name
  "#{controllers_namespace.capitalize}::"\
  "#{controllers_api_version.capitalize}::"\
  "#{plural_name.camelize}Controller"
end
controllers_api_version() click to toggle source
# File lib/generators/api_me/controller/controller_generator.rb, line 26
def controllers_api_version
  'v1'
  # @generators.options.fetch(:api, {}).fetch(:version, 'v1')
end
controllers_namespace() click to toggle source
# File lib/generators/api_me/controller/controller_generator.rb, line 21
def controllers_namespace
  'api'
  # @generators.options.fetch(:api, {}).fetch(:namespace, 'api')
end
create_api_controller_file() click to toggle source
# File lib/generators/api_me/controller/controller_generator.rb, line 13
def create_api_controller_file
  template 'controller.rb', File.join('app/controllers',
                                      controllers_namespace,
                                      controllers_api_version,
                                      "#{plural_name}_controller.rb")
  insert_after_version(plural_name)
end
nonpolymorphic_attribute_names() click to toggle source
# File lib/generators/api_me/controller/controller_generator.rb, line 45
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
parent_class_name() click to toggle source
# File lib/generators/api_me/controller/controller_generator.rb, line 65
def parent_class_name
  if options[:parent]
    options[:parent]
  else
    'ApplicationController'
  end
end
polymorphic_attribute_names() click to toggle source
# File lib/generators/api_me/controller/controller_generator.rb, line 51
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
strong_parameters() click to toggle source
# File lib/generators/api_me/controller/controller_generator.rb, line 61
def strong_parameters
  (attributes_names + association_attribute_names).map(&:inspect).join(', ')
end

Private Instance Methods

insert_after_version(resource_name) click to toggle source
# File lib/generators/api_me/controller/controller_generator.rb, line 75
def insert_after_version(resource_name)
  maybe_create_api_v1_namespace

  in_root do
    insert_into_file(
      'config/routes.rb',
      "      resources :#{resource_name}, only: [:show, :index, :create, :update, :destroy]\n", # rubocop:disable Metrics/LineLength
      after: "namespace :#{controllers_api_version} do\n"
    )
  end
end
maybe_create_api_v1_namespace() click to toggle source
# File lib/generators/api_me/controller/controller_generator.rb, line 87
      def maybe_create_api_v1_namespace
        in_root do
          unless File.readlines('config/routes.rb').grep("namespace #{controllers_namespace} do")
            route <<~ROUTE
              namespace :#{controllers_namespace} do
                  namespace :#{controllers_api_version} do
                  end
                end
ROUTE
          end
        end
      end