darthjee/azeroth

View on GitHub
lib/azeroth/decorator/options.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true

module Azeroth
  class Decorator
    # @api private
    # @author Darthjee
    #
    # Resource buiilding options for decorator
    #
    # @see https://www.rubydoc.info/gems/sinclair/1.6.4/Sinclair/Options
    #   Sinclair::Options
    class Options < Sinclair::Options
      DEFAULT_OPTIONS = {
        as: nil,
        if: nil,
        decorator: true
      }.freeze

      with_options DEFAULT_OPTIONS

      # @method as
      # @api private
      #
      # key to use when exposing the field
      #
      # when nil, the name of the field
      #
      # @return [Symbol,String]

      # @method if
      # @api private
      #
      # conditional to be checked when exposing field
      #
      # when conditional returns false, the
      # field will not be exposed
      #
      # when if is a Proc the proc will be used,
      # when it is a Symbol or String this will be
      # the name of the method called in the decorator
      # to evaluate the condition
      #
      # @return [Proc,Symbol]

      # @method decorator
      # @api private
      #
      # Decorator class to decorate the value
      #
      # when false {DummyDecorator} will be used
      #
      # when nil, a decorator will be infered from
      # value::Decorator
      #
      # @return [NilClass,Decorator]

      # @api private
      #
      # Returns true when attribute must can be decorated
      #
      # when false, decoration happens through
      # #as_json call on value
      #
      # @return [TrueClass,FalseClass]
      def decorator_defined?
        decorator.is_a?(Class)
      end
    end
  end
end