module Pears module Provider class Base attr_accessor :data def initialize(data, on_failure: :raise) @data = data end def has_key?(key) @data.has_key? key end def each(&block) @data.block(&:yield) end def [](key) @data[key] end def purge true end private def parse_yaml(yaml_string) yaml_data = YAML.load( yaml_string, permitted_classes: [ActiveSupport::HashWithIndifferentAccess, Hash, Symbol ] ) unless yaml_data.respond_to? :with_indifferent_access raise Pears::InvalidProviderData end yaml_data.with_indifferent_access rescue Psych::SyntaxError => e logger ||= defined?(Rails) ? Rails.logger : Logger.new(STDOUT) logger.warn "#{e.class} #{e.message}" raise Pears::InvalidProviderData end end end end