class Avo::PhotoObject

def initialize(resource:)

def initialize(resource:)
  @resource = resource
end

def options

def options
  @options ||= if @resource.class&.send(key).present?
    @resource.class&.send(key)
  else
    {}
  end
end

def present?

def present?
  value.present?
end

def value

def value
  return unless options.fetch(:source, nil).present?
  if options[:source].is_a?(Symbol)
    record.send(options[:source])
  elsif options[:source].respond_to?(:call)
    Avo::ExecutionContext.new(target: options[:source], record:, resource: @resource, view:).handle
  end
end

def visible_in_current_view?

def visible_in_current_view?
  send(:"visible_on_#{view}?")
end

def visible_in_either?(*options)

def visible_in_either?(*options)
  options.intersection(visible_on).present?
end

def visible_on

def visible_on
  @visible_on ||= Array.wrap(options[:visible_on] || [:show, :forms])
end

def visible_on_edit? = visible_in_either?(:edit, :forms)

def visible_on_edit? = visible_in_either?(:edit, :forms)

def visible_on_index? = visible_in_either?(:index, :display)

def visible_on_index? = visible_in_either?(:index, :display)

def visible_on_new? = visible_in_either?(:new, :forms)

def visible_on_new? = visible_in_either?(:new, :forms)

def visible_on_show? = visible_in_either?(:show, :display)

def visible_on_show? = visible_in_either?(:show, :display)