# frozen_string_literal: true module ShibRack # Mixin which provides helper methods for mapping attributes from Rack's `env` module AttributeMapping # Class methods for defining attribute mappings module ClassMethods attr_accessor :attribute_mappings def map_single_value(**mappings) mappings.each do |attr, header| mapper = ->(env) { env[header] } add_attribute_mapping(attr, mapper) end end def map_multi_value(**mappings) mappings.each do |attr, header| mapper = ->(env) { parse_multi_value(env[header]) } add_attribute_mapping(attr, mapper) end end def add_attribute_mapping(attr, mapper) raise "Conflicting mapping for `#{attr}`" if attribute_mappings[attr] attribute_mappings[attr] = mapper end def parse_multi_value(value) value.split(/(? mapper.call(env)) end end end end