Module: Pragma::Decorator::Collection

Defined in:
lib/pragma/decorator/collection.rb

Overview

This module is used to represent collections of objects.

It will wrap the collection in a data property so that you can include meta-data about the collection at the root level.

Examples:

Using Collection to include a total count

class ArticlesDecorator < Pragma::Decorator::Base
  include Pragma::Decorator::Collection

  property :total_count, exec_context: :decorator

  def total_count
    represented.count
  end
end

# {
#   "data": [
#     { "...": "..." },
#     { "...": "..." },
#     { "...": "..." }
#   ],
#   "total_count": 150
# }
ArticlesDecorator.new(Article.all).to_hash

Defined Under Namespace

Modules: ClassMethods, InstanceMethods

Class Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/pragma/decorator/collection.rb', line 31

def self.included(klass)
  klass.include InstanceMethods
  klass.extend ClassMethods

  klass.class_eval do
    collection :data, exec_context: :decorator, getter: (lambda do |options:, **|
      represented_collection = if self.class.instance_decorator.is_a?(Proc)
        represented.map do |item|
          self.class.instance_decorator.call(item).represent(item).to_hash(options)
        end
      elsif self.class.instance_decorator
        self.class.instance_decorator.represent(represented.to_a).to_hash(options)
      else
        represented
      end
      represented_collection
    end)
  end
end