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

Class Method Details

.collection?(object) ⇒ Boolean

Returns:

  • (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

Returns:

  • (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, options = {})
  # So we don't use the wrong options / modify them up the chain...
  options = options.dup

  # First, prepare the object for serialization.
  object = normalise_to_serializer object, options

  # Convert the object using a standard grape-like lookup chain.
  if object.respond_to?(:to_ary) || object.is_a?(Set) || (options[:each_serializer] && !options[:serializer])
    suboptions = options.dup
    if each_serializer = suboptions.delete(:each_serializer)
      suboptions[:serializer] = each_serializer
    end
    object.map { |o| normalise_object o, suboptions }
  elsif object.respond_to?(:serializable_hash)
    object.serializable_hash options
  elsif object.respond_to?(:as_json)
    object.as_json options
  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, options)
  return object unless RocketPants.serializers_enabled?
  serializer = options.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

Returns:

  • (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