From 013f01dd47bcddd4a0d6dbe12b712b05713407c5 Mon Sep 17 00:00:00 2001 From: Guillermo Iguaran Date: Sun, 11 Feb 2018 01:11:25 -0500 Subject: [PATCH] Add a generator for Rails --- lib/generators/serializer/USAGE | 8 ++++++++ .../serializer/serializer_generator.rb | 17 +++++++++++++++++ .../serializer/templates/serializer.rb.tt | 6 ++++++ 3 files changed, 31 insertions(+) create mode 100644 lib/generators/serializer/USAGE create mode 100644 lib/generators/serializer/serializer_generator.rb create mode 100644 lib/generators/serializer/templates/serializer.rb.tt 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 -%>