class Grape::Entity::Exposure::Base
Attributes
attribute[R]
conditions[R]
documentation[R]
for_merge[R]
is_safe[R]
key[R]
options[R]
Public Class Methods
new(attribute, options, conditions, *args, &block)
click to toggle source
Calls superclass method
# File lib/grape_entity/exposure/base.rb, line 7 def self.new(attribute, options, conditions, *args, &block) super(attribute, options, conditions).tap { |e| e.setup(*args, &block) } end
new(attribute, options, conditions)
click to toggle source
# File lib/grape_entity/exposure/base.rb, line 11 def initialize(attribute, options, conditions) @attribute = attribute.try(:to_sym) @options = options @key = (options[:as] || attribute).try(:to_sym) @is_safe = options[:safe] @for_merge = options[:merge] @attr_path_proc = options[:attr_path] @documentation = options[:documentation] @conditions = conditions end
Public Instance Methods
==(other)
click to toggle source
# File lib/grape_entity/exposure/base.rb, line 30 def ==(other) self.class == other.class && @attribute == other.attribute && @options == other.options && @conditions == other.conditions end
attr_path(entity, options)
click to toggle source
# File lib/grape_entity/exposure/base.rb, line 98 def attr_path(entity, options) if @attr_path_proc entity.exec_with_object(options, &@attr_path_proc) else @key end end
conditional?()
click to toggle source
# File lib/grape_entity/exposure/base.rb, line 86 def conditional? !@conditions.empty? end
conditions_met?(entity, options)
click to toggle source
# File lib/grape_entity/exposure/base.rb, line 90 def conditions_met?(entity, options) @conditions.all? { |condition| condition.met? entity, options } end
deep_complex_nesting?()
click to toggle source
if we have any nesting exposures with the same name.
# File lib/grape_entity/exposure/base.rb, line 45 def deep_complex_nesting? false end
dup(&block)
click to toggle source
# File lib/grape_entity/exposure/base.rb, line 22 def dup(&block) self.class.new(*dup_args, &block) end
dup_args()
click to toggle source
# File lib/grape_entity/exposure/base.rb, line 26 def dup_args [@attribute, @options, @conditions.map(&:dup)] end
nesting?()
click to toggle source
# File lib/grape_entity/exposure/base.rb, line 40 def nesting? false end
serializable_value(entity, options)
click to toggle source
# File lib/grape_entity/exposure/base.rb, line 62 def serializable_value(entity, options) partial_output = valid_value(entity, options) if partial_output.respond_to?(:serializable_hash) partial_output.serializable_hash(options) elsif partial_output.is_a?(Array) && partial_output.all? { |o| o.respond_to?(:serializable_hash) } partial_output.map(&:serializable_hash) elsif partial_output.is_a?(Hash) partial_output.each do |key, value| partial_output[key] = value.serializable_hash if value.respond_to?(:serializable_hash) end else partial_output end end
setup()
click to toggle source
# File lib/grape_entity/exposure/base.rb, line 37 def setup end
should_expose?(entity, options)
click to toggle source
# File lib/grape_entity/exposure/base.rb, line 94 def should_expose?(entity, options) should_return_key?(options) && conditions_met?(entity, options) end
should_return_key?(options)
click to toggle source
# File lib/grape_entity/exposure/base.rb, line 82 def should_return_key?(options) options.should_return_key?(@key) end
valid?(entity)
click to toggle source
# File lib/grape_entity/exposure/base.rb, line 49 def valid?(entity) is_delegatable = entity.delegator.delegatable?(@attribute) || entity.respond_to?(@attribute, true) if @is_safe is_delegatable else is_delegatable || fail(NoMethodError, "#{entity.class.name} missing attribute `#{@attribute}' on #{entity.object}") end end
valid_value(entity, options)
click to toggle source
# File lib/grape_entity/exposure/base.rb, line 78 def valid_value(entity, options) value(entity, options) if valid?(entity) end
value(_entity, _options)
click to toggle source
# File lib/grape_entity/exposure/base.rb, line 58 def value(_entity, _options) fail NotImplementedError end
with_attr_path(entity, options) { || ... }
click to toggle source
# File lib/grape_entity/exposure/base.rb, line 106 def with_attr_path(entity, options) path_part = attr_path(entity, options) options.with_attr_path(path_part) do yield end end