Sha256: 6cc31c645ab4e5e3f73d6d05a703671ba7f638ea159b6332b2433a5b9e3ed7ef
Contents?: true
Size: 1.47 KB
Versions: 5
Compression:
Stored size: 1.47 KB
Contents
# frozen_string_literal: true module Wayfarer module Config class Struct module ClassMethods attr_accessor :members end module InstanceMethods extend Forwardable delegate members: "self.class" attr_reader :env def initialize(env = ENV) @env = env define_writers define_readers end private def define_writers members.each { |key, _| define_writer(key) } end def define_writer(key) define_singleton_method(:"#{key}=") do |val| set(key, val) end end def define_readers members.each { |key, options| define_reader(key, **options) } end def define_reader(key, env_key: nil, type: nil, default: nil) define_singleton_method(key.to_sym) do get(key) || set(key, env_val(env_key, type) || default) end end def env_val(env_key, type) return nil unless env_key return nil unless env.key?(env_key) Strconv.parse(env[env_key], type) end def get(key) instance_variable_get(:"@#{key}") end def set(key, val) instance_variable_set(:"@#{key}", val) end end def self.new(members) Class.new do include InstanceMethods extend ClassMethods self.members = members end end end end end
Version data entries
5 entries across 5 versions & 1 rubygems