diff --git a/lib/generators/serializer/USAGE b/lib/generators/serializer/USAGE new file mode 100644 index 0000000..88ea169 --- /dev/null +++ b/lib/generators/serializer/USAGE @@ -0,0 +1,8 @@ +Description: + Generates a serializer for the given model. + +Example: + rails generate serializer Movie + + This will create: + app/serializers/movie_serializer.rb diff --git a/lib/generators/serializer/serializer_generator.rb b/lib/generators/serializer/serializer_generator.rb new file mode 100644 index 0000000..6c8cf60 --- /dev/null +++ b/lib/generators/serializer/serializer_generator.rb @@ -0,0 +1,17 @@ +require 'rails/generators/base' + +class SerializerGenerator < Rails::Generators::NamedBase + source_root File.expand_path('templates', __dir__) + + argument :attributes, type: :array, default: [], banner: 'field field' + + def create_serializer_file + template 'serializer.rb.tt', File.join('app', 'serializers', class_path, "#{file_name}_serializer.rb") + end + + private + + def attributes_names + attributes.map { |a| a.name.to_sym.inspect } + end +end diff --git a/lib/generators/serializer/templates/serializer.rb.tt b/lib/generators/serializer/templates/serializer.rb.tt new file mode 100644 index 0000000..90da6d6 --- /dev/null +++ b/lib/generators/serializer/templates/serializer.rb.tt @@ -0,0 +1,6 @@ +<% module_namespacing do -%> +class <%= class_name %>Serializer + include FastJsonapi::ObjectSerializer + attributes <%= attributes_names.join(", ") %> +end +<% end -%>