Sha256: 076c8201abf3bf74d757803c0b8518bfb54961cf60ebc7c336386946bf573657

Contents?: true

Size: 1.83 KB

Versions: 51

Compression:

Stored size: 1.83 KB

Contents

module SplitIoClient
  module Api
    class Splits < Client
      def initialize(api_key, config, metrics)
        @api_key = api_key
        @config = config
        @metrics = metrics
      end

      def since(since)
        start = Time.now
        prefix = 'splitChangeFetcher'
        splits = get_api("#{@config.base_uri}/splitChanges", @config, @api_key, since: since)

        if splits == false
          @config.logger.error("Failed to make a http request")
        elsif splits.status / 100 == 2
          result = splits_with_segment_names(splits.body)

          @metrics.count(prefix + '.status.' + splits.status.to_s, 1)

          @config.logger.debug("#{result[:splits].length} splits retrieved. since=#{since}") if @config.debug_enabled and result[:splits].length > 0
          @config.logger.debug("#{result}") if @config.transport_debug_enabled
        else
          @metrics.count(prefix + '.status.' + splits.status.to_s, 1)

          @config.logger.error('Unexpected result from Splits API call')
        end

        latency = (Time.now - start) * 1000.0
        @metrics.time(prefix + '.time', latency)

        result
      end

      private

      def splits_with_segment_names(splits_json)
        parsed_splits = JSON.parse(splits_json, symbolize_names: true)

        parsed_splits[:segment_names] =
          parsed_splits[:splits].each_with_object(Set.new) do |split, splits|
            splits << segment_names(split)
          end.flatten

        parsed_splits
      end

      def segment_names(split)
        split[:conditions].each_with_object(Set.new) do |condition, names|
          condition[:matcherGroup][:matchers].each do |matcher|
            next if matcher[:userDefinedSegmentMatcherData].nil?

            names << matcher[:userDefinedSegmentMatcherData][:segmentName]
          end
        end
      end
    end
  end
end

Version data entries

51 entries across 51 versions & 1 rubygems

Version Path
splitclient-rb-5.0.3-java lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-5.0.3 lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-5.0.3.pre.rc1-java lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-5.0.3.pre.rc1 lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-5.0.2-java lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-5.0.2 lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-5.0.2.pre.rc1-java lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-5.0.2.pre.rc1 lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-5.0.1-java lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-5.0.1 lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-5.0.1.pre.rc1-java lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-5.0.1.pre.rc1 lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-5.0.0-java lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-5.0.0 lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-5.0.0.pre.rc1-java lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-5.0.0.pre.rc1 lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-4.5.2-java lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-4.5.2 lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-4.5.2.pre.rc1-java lib/splitclient-rb/engine/api/splits.rb
splitclient-rb-4.5.2.pre.rc1 lib/splitclient-rb/engine/api/splits.rb