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
- .invalid?(object) ⇒ Boolean
- .normalise_object(object, options = {}) ⇒ Object
- .normalise_to_serializer(object, options) ⇒ Object
- .paginated?(object) ⇒ Boolean
- .pagination_type(object) ⇒ Object
Class Method Details
.collection?(object) ⇒ Boolean
36 37 38 |
# File 'lib/rocket_pants/controller/respondable.rb', line 36 def self.collection?(object) object.is_a?(Array) || object.respond_to?(:to_ary) end |
.extract_pagination(collection) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/rocket_pants/controller/respondable.rb', line 40 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 |
.invalid?(object) ⇒ Boolean
28 29 30 |
# File 'lib/rocket_pants/controller/respondable.rb', line 28 def self.invalid?(object) object.respond_to?(:errors) && object.errors.present? end |
.normalise_object(object, options = {}) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/rocket_pants/controller/respondable.rb', line 64 def self.normalise_object(object, = {}) # So we don't use the wrong options / modify them up the chain... = .dup # First, prepare the object for serialization. object = normalise_to_serializer object, # Convert the object using a standard grape-like lookup chain. if object.respond_to?(:to_ary) || object.is_a?(Set) || ([:each_serializer] && ![:serializer]) = .dup if each_serializer = .delete(:each_serializer) [:serializer] = each_serializer end 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
87 88 89 90 91 92 93 94 |
# File 'lib/rocket_pants/controller/respondable.rb', line 87 def self.normalise_to_serializer(object, ) return object unless RocketPants.serializers_enabled? serializer = .delete(:serializer) # AMS overrides active_model_serializer, so we ignore it and tell it to go away, generally... serializer = object.active_model_serializer if object.respond_to?(:active_model_serializer) && serializer.nil? && !object.respond_to?(:to_ary) return object unless serializer SerializerWrapper.new serializer, object end |
.paginated?(object) ⇒ Boolean
32 33 34 |
# File 'lib/rocket_pants/controller/respondable.rb', line 32 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 |