class GraphqlRails::Decorator::RelationDecorator

wrapps active record relation and returns decorated object instead

Attributes

decorator[R]
decorator_args[R]
relation[R]

Public Class Methods

decorates?(object) click to toggle source
# File lib/graphql_rails/decorator/relation_decorator.rb, line 10
def self.decorates?(object)
  (defined?(ActiveRecord) && object.is_a?(ActiveRecord::Relation)) ||
    defined?(Mongoid) && object.is_a?(Mongoid::Criteria)
end
new(decorator:, relation:, decorator_args: []) click to toggle source
# File lib/graphql_rails/decorator/relation_decorator.rb, line 15
def initialize(decorator:, relation:, decorator_args: [])
  @relation = relation
  @decorator = decorator
  @decorator_args = decorator_args
end

Public Instance Methods

to_a() click to toggle source
# File lib/graphql_rails/decorator/relation_decorator.rb, line 39
def to_a
  @to_a ||= relation.to_a.map { |it| decorator.new(it, *decorator_args) }
end

Private Instance Methods

chainable_method(method_name, *args, &block) click to toggle source
# File lib/graphql_rails/decorator/relation_decorator.rb, line 69
def chainable_method(method_name, *args, &block)
  new_relation = relation.public_send(method_name, *args, &block)
  self.class.new(decorator: decorator, relation: new_relation, decorator_args: decorator_args)
end
decoratable_block_method(method_name, *args) { |decorated_object, *other_args| ... } click to toggle source
# File lib/graphql_rails/decorator/relation_decorator.rb, line 62
def decoratable_block_method(method_name, *args)
  relation.public_send(method_name, *args) do |object, *other_args|
    decorated_object = decorate(object)
    yield(decorated_object, *other_args)
  end
end
decoratable_object_method(method_name, *args, &block) click to toggle source
# File lib/graphql_rails/decorator/relation_decorator.rb, line 47
def decoratable_object_method(method_name, *args, &block)
  object = relation.public_send(method_name, *args, &block)
  decorate(object)
end
decorate(object_or_list) click to toggle source
# File lib/graphql_rails/decorator/relation_decorator.rb, line 52
def decorate(object_or_list)
  return object_or_list if object_or_list.blank?

  if object_or_list.is_a?(Array)
    object_or_list.map { |it| decorator.new(it, *decorator_args) }
  else
    decorator.new(object_or_list, *decorator_args)
  end
end