Class: SplitIoClient::SplitManager

Inherits:
Object
  • Object
show all
Defined in:
lib/splitclient-rb/managers/split_manager.rb

Instance Method Summary collapse

Constructor Details

#initialize(splits_repository = nil, status_manager, config) ⇒ SplitIoManager

Creates a new split manager instance that connects to split.io API.



7
8
9
10
11
# File 'lib/splitclient-rb/managers/split_manager.rb', line 7

def initialize(splits_repository = nil, status_manager, config)
  @splits_repository = splits_repository
  @status_manager = status_manager
  @config = config
end

Instance Method Details

#block_until_ready(time = nil) ⇒ Object



80
81
82
# File 'lib/splitclient-rb/managers/split_manager.rb', line 80

def block_until_ready(time = nil)
  @status_manager.wait_until_ready(time) if @status_manager
end

#split(feature_flag_name) ⇒ Object

method to get a split view



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/splitclient-rb/managers/split_manager.rb', line 53

def split(feature_flag_name)
  return unless @config.valid_mode && @splits_repository && @config.split_validator.valid_split_parameters(feature_flag_name)

  if !ready?
    @config.logger.error("split: the SDK is not ready, the operation cannot be executed")
    return
  end

  sanitized_feature_flag_name = feature_flag_name.to_s.strip

  if feature_flag_name.to_s != sanitized_feature_flag_name
    @config.logger.warn("split: feature_flag_name #{feature_flag_name} has extra whitespace, trimming")
    feature_flag_name = sanitized_feature_flag_name
  end

  split = @splits_repository.get_split(feature_flag_name)

  if ready? && split.nil?
    @config.logger.warn("split: you passed #{feature_flag_name} " \
      'that does not exist in this environment, please double check what feature flags exist in the Split user interface')
  end

  return if split.nil? || Engine::Models::Split.archived?(split)

  build_split_view(feature_flag_name, split)
end

#split_namesObject

method to get the list of just split names. Ideal for ietrating and calling client.get_treatment



38
39
40
41
42
43
44
45
46
47
# File 'lib/splitclient-rb/managers/split_manager.rb', line 38

def split_names
  return [] if !@config.valid_mode || @splits_repository.nil?

  if !ready?
    @config.logger.error("split_names: the SDK is not ready, the operation cannot be executed")
    return []
  end

  @splits_repository.split_names
end

#splitsObject

method to get the split list from the client



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/splitclient-rb/managers/split_manager.rb', line 17

def splits
  return [] if !@config.valid_mode || @splits_repository.nil?

  if !ready?
    @config.logger.error("splits: the SDK is not ready, the operation cannot be executed")
    return []
  end

  @splits_repository.splits.each_with_object([]) do |(name, split), memo|
    split_view = build_split_view(name, split)

    next if split_view[:name] == nil

    memo << split_view unless Engine::Models::Split.archived?(split)
  end
end