Sha256: 009a6d7cd03b3b6d5948d4c088b71d26c8e77a0158bfcd957dcb0d1a8a39c444
Contents?: true
Size: 1.48 KB
Versions: 1
Compression:
Stored size: 1.48 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, get(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
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
wayfarer-0.4.1 | lib/wayfarer/config/struct.rb |