Sha256: cc344155426bf4f712ff50291613e9aa262921276853185379a9119d9e26048d
Contents?: true
Size: 1.41 KB
Versions: 1
Compression:
Stored size: 1.41 KB
Contents
# frozen_string_literal: true require "yaml" require "json" require "active_support/core_ext/module/delegation.rb" require "active_support/core_ext/class/attribute.rb" class SelfData class_attribute :default_formats, :default_options, :filters, :converters class << self delegate :read, :load, to: :new def add_filter(&block) filters << block end def add_converter(name, block) self.converters ||= {} self.converters[name] = block end end attr_reader :file def initialize(file = caller_file) @file = file end def load(*formats, **options) formats = default_formats if formats.empty? options = default_options if options.empty? formats.reduce(read) do |data, format| raise ConverterNotFound, format unless converters[format] begin converters[format].call(data, options) rescue => e raise ConversionError.new(format, e) end end end def read IO.read(file).scan(/\n__END__\n(.*)/m).flatten.first or raise NoDataFound, file end private def caller_file calls = caller.lazy .map { |call_string| call_string.split(":").first } .reject { |file| file == __FILE__ } .select(&File.method(:exist?)) filters.each do |filter| calls = calls.select(&filter.method(:call)) end calls.first end end require "self_data/errors" require "self_data/version" require "self_data/config"
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
self_data-1.1.0 | lib/self_data.rb |