Module: RocketPants::Respondable
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/rocket_pants/controller/respondable.rb
Defined Under Namespace
Classes: SerializerWrapper
Constant Summary collapse
- RENDERING_OPTIONS =
[:status, :content_type]
Class Method Summary collapse
- .collection?(object) ⇒ Boolean
- .extract_pagination(collection) ⇒ Object
- .normalise_object(object, options = {}) ⇒ Object
- .normalise_to_serializer(object, options) ⇒ Object
- .paginated?(object) ⇒ Boolean
- .pagination_type(object) ⇒ Object
Class Method Details
.collection?(object) ⇒ Boolean
32 33 34 |
# File 'lib/rocket_pants/controller/respondable.rb', line 32 def self.collection?(object) object.is_a?(Array) || object.respond_to?(:to_ary) end |
.extract_pagination(collection) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/rocket_pants/controller/respondable.rb', line 36 def self.extract_pagination(collection) case pagination_type(collection) when :will_paginate { :previous => collection.previous_page.try(:to_i), :next => collection.next_page.try(:to_i), :current => collection.current_page.try(:to_i), :per_page => collection.per_page.try(:to_i), :count => collection.total_entries.try(:to_i), :pages => collection.total_pages.try(:to_i) } when :kaminari current, total, per_page = collection.current_page, collection.num_pages, collection.limit_value { :current => current, :previous => (current > 1 ? (current - 1) : nil), :next => (current == total ? nil : (current + 1)), :per_page => per_page, :pages => total, :count => collection.total_count } end end |
.normalise_object(object, options = {}) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/rocket_pants/controller/respondable.rb', line 60 def self.normalise_object(object, = {}) # First, prepare the object for serialization. object = normalise_to_serializer object, # Convert the object using a standard grape-like lookup chain. if object.is_a?(Array) || object.is_a?(Set) object.map { |o| normalise_object o, } elsif object.respond_to?(:serializable_hash) object.serializable_hash elsif object.respond_to?(:as_json) object.as_json else object end end |
.normalise_to_serializer(object, options) ⇒ Object
75 76 77 78 79 80 81 |
# File 'lib/rocket_pants/controller/respondable.rb', line 75 def self.normalise_to_serializer(object, ) return object unless RocketPants.serializers_enabled? serializer = .delete(:serializer) serializer = object.active_model_serializer if object.respond_to?(:active_model_serializer) && serializer.nil? return object unless serializer SerializerWrapper.new serializer, object end |
.paginated?(object) ⇒ Boolean
28 29 30 |
# File 'lib/rocket_pants/controller/respondable.rb', line 28 def self.paginated?(object) !pagination_type(object).nil? end |
.pagination_type(object) ⇒ Object
18 19 20 21 22 23 24 25 26 |
# File 'lib/rocket_pants/controller/respondable.rb', line 18 def self.pagination_type(object) if object.respond_to?(:total_entries) :will_paginate elsif object.respond_to?(:num_pages) && object.respond_to?(:current_page) :kaminari else nil end end |