class Eco::API::Organization::PersonSchemas

def init_caches

def init_caches
  return if @caches_init
  @by_id   = self.map { |pg| [pg.id, pg] }.to_h
  @by_name = self.map { |pg| [pg.name&.downcase, pg] }.to_h
  @caches_init = true
end

def initialize(schemas = [], klass: Ecoportal::API::Internal::PersonSchema)

def initialize(schemas = [], klass: Ecoportal::API::Internal::PersonSchema)
  @klass       = Ecoportal::API::Internal::PersonSchema
  @caches_init = false
  super(schemas, klass: @klass)
  init_caches
end

def schema(id_name)

def schema(id_name)
  @by_id.fetch(schema_id(id_name), nil)
end

def schema_id(id_name)

def schema_id(id_name)
  (@by_name[id_name&.downcase] || @by_id[id_name])&.id
end

def schema_name(id_name)

def schema_name(id_name)
  (@by_id[id_name] || @by_name[id_name&.downcase])&.name&.downcase
end

def to_id(name)

def to_id(name)
  case name
  when Enumerable
    name.map do |n|
      schema(n)&.id
    end.compact
  else
    schema(name)&.id
  end
end

def to_name(id)

def to_name(id)
  schema(id)&.name
end