Sha256: 423a4395a23b335a3adde1df4008d1dba0f1dd706bb5197f3f5fe5494c416191

Contents?: true

Size: 978 Bytes

Versions: 3

Compression:

Stored size: 978 Bytes

Contents

module GitCommands
  class Aggregator
    PATTERN = ENV.fetch("AGGREGATE_PATTERN") { "release/<timestamp>" }
    NAME = ENV["AGGREGATE_NAME"]

    class InvalidPatternError < ArgumentError; end

    def initialize(name: NAME, pattern: PATTERN)
      @name = name
      @pattern = check_pattern(pattern)
      define_methods
    end

    def timestamp
      @timestamp ||= Time.new.strftime("%Y%m%d")
    end

    def call
      return @name if @name
      @pattern.gsub(/<[\w_]+>/) do |part|
        msg = part.gsub(/<|>/, "")
        send(msg)
      end
    end

    private def check_pattern(pattern)
      fail InvalidPatternError unless pattern.match(/<\w+>/) 
      pattern
    end

    private def pattern_methods
      @methods ||= @pattern.scan(/<(\w+)>/).flatten - ["timestamp"]
    end

    def define_methods
      pattern_methods.each do |name|
        define_singleton_method(name) do
          ENV.fetch(name.upcase) { "" }
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
git_commands-3.5.3 lib/git_commands/aggregator.rb
git_commands-3.5.2 lib/git_commands/aggregator.rb
git_commands-3.5.1 lib/git_commands/aggregator.rb