Sha256: dd811bd51bb5abbf3c7388bca047dc459231567e39374adb7d2bcececf835477

Contents?: true

Size: 1.63 KB

Versions: 5

Compression:

Stored size: 1.63 KB

Contents

# frozen_string_literal: true

require "bundler"

module Confset
  module Integrations
    class Heroku < Struct.new(:app)
      def invoke
        puts "Setting vars..."
        heroku_command = "config:set #{vars}"
        heroku(heroku_command)
        puts "Vars set:"
        puts heroku_command
      end

      def vars
        # Load only local options to Heroku
        Confset.load_and_set_settings(
            Rails.root.join("config", "settings.local.yml").to_s,
            Rails.root.join("config", "settings", "#{environment}.local.yml").to_s,
            Rails.root.join("config", "environments", "#{environment}.local.yml").to_s
        )

        out = ""
        dotted_hash = to_dotted_hash Kernel.const_get(Confset.const_name).to_hash, {}, Confset.const_name
        dotted_hash.each { |key, value| out += " #{key}=#{value} " }
        out
      end

      def environment
        heroku("run 'echo $RAILS_ENV'").chomp[/(\w+)\z/]
      end

      def heroku(command)
        with_app = app ? " --app #{app}" : ""
        `heroku #{command}#{with_app}`
      end

      def `(command)
        Bundler.with_clean_env { super }
      end

      def to_dotted_hash(source, target = {}, namespace = nil)
        prefix = "#{namespace}." if namespace
        case source
        when Hash
          source.each do |key, value|
            to_dotted_hash(value, target, "#{prefix}#{key}")
          end
        when Array
          source.each_with_index do |value, index|
            to_dotted_hash(value, target, "#{prefix}#{index}")
          end
        else
          target[namespace] = source
        end
        target
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
confset-1.1.0 lib/confset/integrations/heroku.rb
confset-1.0.3 lib/confset/integrations/heroku.rb
confset-1.0.2 lib/confset/integrations/heroku.rb
confset-1.0.1 lib/confset/integrations/heroku.rb
confset-1.0.0 lib/confset/integrations/heroku.rb