diff --git a/config/application.rb b/config/application.rb index 72d0560f22..3977f02a8d 100644 --- a/config/application.rb +++ b/config/application.rb @@ -72,5 +72,12 @@ class Application < Rails::Application # Set ActiveJob adapter config.active_job.queue_adapter = :sidekiq + + # Configure Scaffold Generators + config.generators do |g| + g.authorization :policy + g.serialization :jsonapi_resource + g.resource_controller :resource_controller + end end end diff --git a/lib/generators/rails/api_resource_route/api_resource_route_generator.rb b/lib/generators/rails/api_resource_route/api_resource_route_generator.rb new file mode 100644 index 0000000000..6761ed4429 --- /dev/null +++ b/lib/generators/rails/api_resource_route/api_resource_route_generator.rb @@ -0,0 +1,15 @@ +require 'rails/generators/rails/resource_route/resource_route_generator' + +module Rails + module Generators + class ApiResourceRouteGenerator < ResourceRouteGenerator + def add_resource_route + return if options[:actions].present? + route_config = regular_class_path.collect{ |namespace| "namespace :#{namespace} do " }.join(" ") + route_config << "jsonapi_resources :#{file_name.pluralize}" + route_config << " end" * regular_class_path.size + route route_config + end + end + end +end diff --git a/lib/generators/rails/jsonapi_resource/jsonapi_resource_generator.rb b/lib/generators/rails/jsonapi_resource/jsonapi_resource_generator.rb new file mode 100644 index 0000000000..4e1665f0f6 --- /dev/null +++ b/lib/generators/rails/jsonapi_resource/jsonapi_resource_generator.rb @@ -0,0 +1,16 @@ +module Rails + module Generators + class JsonapiResourceGenerator < ::Rails::Generators::NamedBase + source_root File.expand_path('templates', __dir__) + + def create_resource + template_file = File.join( + 'app/resources', + class_path, + "#{file_name.singularize}_resource.rb" + ) + template 'resource.rb', template_file + end + end + end +end diff --git a/lib/generators/rails/jsonapi_resource/templates/resource.rb b/lib/generators/rails/jsonapi_resource/templates/resource.rb new file mode 100644 index 0000000000..dfe76c19e6 --- /dev/null +++ b/lib/generators/rails/jsonapi_resource/templates/resource.rb @@ -0,0 +1,4 @@ +<% module_namespacing do -%> +class <%= class_name.singularize %>Resource < JSONAPI::Resource +end +<% end -%> diff --git a/lib/generators/rails/policy/policy_generator.rb b/lib/generators/rails/policy/policy_generator.rb new file mode 100644 index 0000000000..56867bfb98 --- /dev/null +++ b/lib/generators/rails/policy/policy_generator.rb @@ -0,0 +1,18 @@ +module Rails + module Generators + class PolicyGenerator < ::Rails::Generators::NamedBase + source_root File.expand_path('templates', __dir__) + + def create_policy + template_file = File.join( + 'app/policies', + class_path, + "#{file_name.singularize}_policy.rb" + ) + template 'policy.rb', template_file + end + + hook_for :test_framework + end + end +end diff --git a/lib/generators/rails/policy/templates/policy.rb b/lib/generators/rails/policy/templates/policy.rb new file mode 100644 index 0000000000..1e84b23a5a --- /dev/null +++ b/lib/generators/rails/policy/templates/policy.rb @@ -0,0 +1,4 @@ +<% module_namespacing do -%> +class <%= class_name %>Policy < ApplicationPolicy +end +<% end -%> diff --git a/lib/generators/rails/resource_controller/resource_controller_generator.rb b/lib/generators/rails/resource_controller/resource_controller_generator.rb new file mode 100644 index 0000000000..255b9a123d --- /dev/null +++ b/lib/generators/rails/resource_controller/resource_controller_generator.rb @@ -0,0 +1,22 @@ +require 'generators/jsonapi/controller_generator' + +module Rails + module Generators + class ResourceControllerGenerator < ::Rails::Generators::NamedBase + source_root File.expand_path('../templates', __FILE__) + check_class_collision suffix: 'Controller' + + def create_controller + template_file = File.join( + 'app/controllers', + class_path, + "#{file_name.pluralize}_controller.rb" + ) + template 'jsonapi_controller.rb', template_file + end + + hook_for :authorization + hook_for :serialization + end + end +end diff --git a/lib/generators/rails/resource_controller/templates/jsonapi_controller.rb b/lib/generators/rails/resource_controller/templates/jsonapi_controller.rb new file mode 100644 index 0000000000..016012aeac --- /dev/null +++ b/lib/generators/rails/resource_controller/templates/jsonapi_controller.rb @@ -0,0 +1,4 @@ +<% module_namespacing do -%> +class <%= class_name.pluralize %>Controller < ApplicationController +end +<% end -%>