Sha256: c4f692b947fde50f735150f5477aa42ccf7f0bcff0aa5edb03a1af2fecad5c90
Contents?: true
Size: 1.63 KB
Versions: 1
Compression:
Stored size: 1.63 KB
Contents
require 'ffi' require 'dotenv' require 'json' require 'set' module Envkey::Core extend FFI::Library def self.load_env spring_pre_fork_ts=nil, overload_dotenv_vars=[], overload_envkey_vars=[] original_env = ENV.to_h dotenv_vars = Dotenv.load updated_dotenv_vars = dotenv_vars.keys.select do |k| overload_dotenv_vars.include?(k) || original_env[k] == nil end overload_dotenv_vars.each do |k| ENV[k] = dotenv_vars[k] end if (key = ENV["ENVKEY"]) reader, writer = IO.pipe fork do reader.close ffi_lib File.expand_path('../../ext/envkey.so', File.dirname(__FILE__)) attach_function :EnvJson, [:pointer], :string json = EnvJson(FFI::MemoryPointer.from_string(key)) writer.puts json end writer.close while json = reader.gets if json && json.gsub("\n","").gsub("\r", "") != "" envs = JSON.parse(json) updated_envkey_vars = [] envs.each do |k,v| var = k.upcase if !ENV[var] || overload_envkey_vars.include?(var) updated_envkey_vars << var ENV[var] = v end end # avoid printing success message twice in quick succession when using spring if !spring_pre_fork_ts || (Time.now - spring_pre_fork_ts) > 3 puts "ENVKEY: vars loaded and decrypted - access with ENV['YOUR_VAR_NAME']" end return [Set.new(updated_dotenv_vars), Set.new(updated_envkey_vars)] else raise "Envkey invalid. Couldn't load env." end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
envkey-0.1.2 | lib/envkey/core.rb |