class SimpleJsonapi::Definition::Base

Defines how a portion of a rendered JSONAPI document is generated from a resource or error object. See {file:README.md} for more details.

@abstract

Attributes

if_predicate[R]

@visibility private attr_reader :options, :if_predicate, :unless_predicate

unless_predicate[R]

@visibility private attr_reader :options, :if_predicate, :unless_predicate

Public Class Methods

new(*_args, **options, &_block) click to toggle source

@param args See subclass documentation for the arguments they require. @option options [Proc<Boolean>] if @option options [Proc<Boolean>] unless

# File lib/simple_jsonapi/definition/base.rb, line 16
def initialize(*_args, **options, &_block)
  @if_predicate = @unless_predicate = nil
  @if_predicate = wrap_in_proc(options[:if]) if options.key?(:if)
  @unless_predicate = wrap_in_proc(options[:unless]) if options.key?(:unless)
end

Private Instance Methods

initialize_dup(new_def) click to toggle source
Calls superclass method
# File lib/simple_jsonapi/definition/base.rb, line 22
        def initialize_dup(new_def)
  super

  new_def.instance_variable_set(:@if_predicate, @if_predicate.dup) unless @if_predicate.nil?
  new_def.instance_variable_set(:@unless_predicate, @unless_predicate.dup) unless @unless_predicate.nil?
end
wrap_in_proc(*args, &block) click to toggle source
# File lib/simple_jsonapi/definition/base.rb, line 31
def wrap_in_proc(*args, &block)
  if args.empty? && !block_given?
    raise ArgumentError, "Either a value or a block is required"
  elsif args.size == 1 && block_given?
    raise ArgumentError, "A value and a block cannot both be present"
  elsif args.size > 1
    raise ArgumentError, "Too many arguments provided (#{args.size})"
  end

  callable_or_value = args[0]

  if block_given?
    block
  elsif callable_or_value.is_a?(Proc)
    callable_or_value
  else
    proc { |*| callable_or_value }
  end
end