Sha256: 80aeab805d375393a1b7b2ce5b59e3d1a6ad2941b6869194aa553f4bd80a78ff

Contents?: true

Size: 1.05 KB

Versions: 12

Compression:

Stored size: 1.05 KB

Contents

# frozen_string_literal: true

module GraphqlRails
  # adds `.decorate` class method to any class. Handy when using with paginated responses
  #
  # usage:
  # class FriendDecorator < SimpleDecorator
  #   include GraphqlRails::Decorator
  #
  #   graphql.attribute :full_name
  # end
  #
  # class User
  #   has_many :friends
  #   graphql.attribute :decorated_friends, paginated: true, type: 'FriendDecorator!'
  #
  #   def decorated_friends
  #     FriendDecorator.decorate(friends)
  #   end
  # end
  module Decorator
    require 'active_support/concern'
    require 'graphql_rails/decorator/relation_decorator'

    extend ActiveSupport::Concern

    class_methods do
      def decorate(object, *args)
        if Decorator::RelationDecorator.decorates?(object)
          Decorator::RelationDecorator.new(relation: object, decorator: self, decorator_args: args)
        elsif object.nil?
          nil
        elsif object.is_a?(Array)
          object.map { |item| new(item, *args) }
        else
          new(object, *args)
        end
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
graphql_rails-2.2.0 lib/graphql_rails/decorator.rb
graphql_rails-2.1.0 lib/graphql_rails/decorator.rb
graphql_rails-2.0.0 lib/graphql_rails/decorator.rb
graphql_rails-1.2.6 lib/graphql_rails/decorator.rb
graphql_rails-1.2.4 lib/graphql_rails/decorator.rb
graphql_rails-1.2.3 lib/graphql_rails/decorator.rb
graphql_rails-1.2.2 lib/graphql_rails/decorator.rb
graphql_rails-1.2.1 lib/graphql_rails/decorator.rb
graphql_rails-1.2.0 lib/graphql_rails/decorator.rb
graphql_rails-1.1.0 lib/graphql_rails/decorator.rb
graphql_rails-1.0.0 lib/graphql_rails/decorator.rb
graphql_rails-0.8.0 lib/graphql_rails/decorator.rb