ResultadosDigitais/feature_flagger

View on GitHub
lib/feature_flagger/feature.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
module FeatureFlagger
  class Feature
    def initialize(feature_key, resource_name = nil)
      @feature_key = resolve_key(feature_key, resource_name)
      @doc = FeatureFlagger.config.info
      fetch_data
    end

    def description
      @data['description']
    end

    def created_at
      @data['created_at']
    end

    def owner
      @data['owner']
    end

    def full_rollout_until
      @data['full_rollout_until']
    end

    def key
      @feature_key.join(':')
    end

    private

    def resolve_key(feature_key, resource_name)
      key = Array(feature_key).flatten
      key.insert(0, resource_name) if resource_name
      key.map(&:to_s)
    end

    def fetch_data
      @data ||= find_value(@doc, *@feature_key)
      raise FeatureFlagger::KeyNotFoundError.new(@feature_key) if @data.nil?
      @data
    end

    def find_value(hash, key, *tail)
      value = hash[key]

      if value.nil? || tail.empty?
        value
      else
        find_value(value, *tail)
      end
    end
  end
end

class FeatureFlagger::KeyNotFoundError < StandardError ; end