diff --git a/README.md b/README.md index a67b0f9..a892825 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,8 @@ This template uses [jsonapi-serializer](https://github.com/jsonapi-serializer/js 3. Foreman For running multiple processes +4. [Kaminari](https://github.com/kaminari/kaminari) paginator + ### Authentication __Registration__ diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 0ef1395..d0b70c7 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -5,8 +5,9 @@ class ApplicationController < ActionController::API # acts_as_token_authentication_handler_for User around_action :handle_errors - def render_api_success(serializer, obj, _options = {}) - render json: serializer.new(obj).serializable_hash + def render_api_success(serializer, obj, options = {}) + options = Kaminari.meta_pagination(obj, options) if defined? obj.current_page + render json: serializer.new(obj, options).serializable_hash end def render_api_error(messages, code) diff --git a/app/services/kaminari.rb b/app/services/kaminari.rb new file mode 100644 index 0000000..483b044 --- /dev/null +++ b/app/services/kaminari.rb @@ -0,0 +1,20 @@ +module Kaminari + def self.meta_pagination(paginated_obj, options = {}) + options[:meta] = {} unless options.key?(:meta) + meta_options = options[:meta].merge(generate_pagination(paginated_obj)) + options[:meta] = meta_options + options + end + + def self.generate_pagination(paginated_obj) + { + pagination: { + current_page: paginated_obj.current_page, + prev_page: paginated_obj.prev_page, + next_page: paginated_obj.next_page, + total_pages: paginated_obj.total_pages, + total_count: paginated_obj.total_count + } + } + end +end diff --git a/template.rb b/template.rb index 5e4eaae..f0e59ef 100644 --- a/template.rb +++ b/template.rb @@ -33,6 +33,7 @@ def add_template_repository_to_source_path # Gems def add_gems + gem 'kaminari' gem 'devise', '~> 4.7', '>= 4.7.1' gem 'jwt', '~> 2.2', '>= 2.2.1' gem 'jsonapi-serializer', '~> 2.1.0'