Sha256: c918be150ba74dd63fca6ea0e5d74c4b0871f9ef2d3cb67e69b64e2b95dfa931

Contents?: true

Size: 1.34 KB

Versions: 4

Compression:

Stored size: 1.34 KB

Contents

require "dotenv"

module Jets
  class Dotenv
    include Jets::AwsServices
    include Jets::Util::Logging

    def load!
      return unless load?
      variables = ::Dotenv.load(*dotenv_files)
      Ssm.new(variables).interpolate!
    end

    def parse
      return {} unless load?
      variables = ::Dotenv.parse(*dotenv_files)
      Ssm.new(variables).interpolate!
    end

    def load?
      enabled = ENV["JETS_DOTENV"] != "0" # allow to disable with JETS_DOTENV=0
      # Prevent ssm calls when on AWS Lambda but will call if on AWS CodeBuild
      on_aws = (ENV["ON_AWS"] || ENV["_HANDLER"]) && !ENV["CODEBUILD_CI"]
      enabled && !on_aws
    end

    # dotenv files with the following precedence:
    #
    # - config/jets/env/.env.dev.extra (highest)
    # - config/jets/env/.env.dev
    # - config/jets/env/.env - The original (lowest)
    #
    def dotenv_files
      files = []

      files << ".env.#{Jets.env}.#{Jets.extra}" if Jets.extra
      files << ".env.#{Jets.env}"
      files << ".env"

      files.map! { |f| Jets.root.join("config/jets/env", f) }.compact
      files.map(&:to_s)
    end

    class << self
      extend Memoist
      @@load = nil
      def load!
        @@load ||= new.load!
      end
      memoize :load!

      @@parse = nil
      def parse
        @@parse ||= new.parse
      end
      memoize :parse
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
jets-6.0.5 lib/jets/dotenv.rb
jets-6.0.4 lib/jets/dotenv.rb
jets-6.0.3 lib/jets/dotenv.rb
jets-6.0.2 lib/jets/dotenv.rb