Class: SplitIoClient::SplitFactory

Inherits:
Object
  • Object
show all
Includes:
Cache::Repositories, Cache::Stores
Defined in:
lib/splitclient-rb/split_factory.rb

Constant Summary collapse

ROOT_PROCESS_ID =
Process.pid

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api_key, config_hash = {}) ⇒ SplitFactory

Returns a new instance of SplitFactory.



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/splitclient-rb/split_factory.rb', line 9

def initialize(api_key, config_hash = {})
  @api_key = api_key
  SplitIoClient.configure(config_hash)

  raise 'Invalid SDK mode' unless valid_mode

  @cache_adapter = SplitIoClient.configuration.cache_adapter

  @splits_repository = SplitsRepository.new(@cache_adapter)
  @segments_repository = SegmentsRepository.new(@cache_adapter)
  @impressions_repository = ImpressionsRepository.new(SplitIoClient.configuration.impressions_adapter)
  @metrics_repository = MetricsRepository.new(SplitIoClient.configuration.metrics_adapter)
  @events_repository = EventsRepository.new(SplitIoClient.configuration.events_adapter)

  @sdk_blocker = SDKBlocker.new(@splits_repository, @segments_repository)
  @adapter = start!

  @client = SplitClient.new(@api_key, @adapter, @splits_repository, @segments_repository, @impressions_repository, @metrics_repository, @events_repository)
  @manager = SplitManager.new(@api_key, @adapter, @splits_repository)

  validate_api_key

  @sdk_blocker.block if SplitIoClient.configuration.block_until_ready > 0


  at_exit do
    unless ENV['SPLITCLIENT_ENV'] == 'test'
      if (Process.pid == ROOT_PROCESS_ID)
        SplitIoClient.configuration.logger.info('Split SDK shutdown started...')
        @client.destroy
        stop!
        SplitIoClient.configuration.logger.info('Split SDK shutdown complete')
      end
    end
  end
end

Instance Attribute Details

#adapter ⇒ Object (readonly)

Returns the value of attribute adapter.



7
8
9
# File 'lib/splitclient-rb/split_factory.rb', line 7

def adapter
  @adapter
end

#client ⇒ Object (readonly)

Returns the value of attribute client.



7
8
9
# File 'lib/splitclient-rb/split_factory.rb', line 7

def client
  @client
end

#manager ⇒ Object (readonly)

Returns the value of attribute manager.



7
8
9
# File 'lib/splitclient-rb/split_factory.rb', line 7

def manager
  @manager
end

Instance Method Details

#start! ⇒ Object Also known as: resume!



46
47
48
# File 'lib/splitclient-rb/split_factory.rb', line 46

def start!
  SplitAdapter.new(@api_key, @splits_repository, @segments_repository, @impressions_repository, @metrics_repository, @events_repository, @sdk_blocker)
end

#stop! ⇒ Object



50
51
52
# File 'lib/splitclient-rb/split_factory.rb', line 50

def stop!
  SplitIoClient.configuration.threads.each { |_, t| t.exit }
end

#valid_mode ⇒ Object



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
79
80
# File 'lib/splitclient-rb/split_factory.rb', line 54

def valid_mode
  valid_startup_mode = false
  case SplitIoClient.configuration.mode
  when :consumer
    if SplitIoClient.configuration.cache_adapter.is_a? SplitIoClient::Cache::Adapters::RedisAdapter
      valid_startup_mode = true
    else
      SplitIoClient.configuration.logger.error('Consumer mode cannot be used with Memory adapter. ' \
        'Use Redis adapter instead.')
    end
  when :standalone
    if SplitIoClient.configuration.cache_adapter.is_a? SplitIoClient::Cache::Adapters::MemoryAdapter
      valid_startup_mode = true
    else
      SplitIoClient.configuration.logger.error('Standalone mode cannot be used with Redis adapter. ' \
        'Use Memory adapter instead.')
    end
  when :producer
    SplitIoClient.configuration.logger.error('Producer mode is no longer supported. Use Split Synchronizer. ' \
      'See: https://github.com/splitio/split-synchronizer')
  else
    SplitIoClient.configuration.logger.error('Invalid SDK mode selected. ' \
      "Valid modes are 'standalone with memory adapter' and 'consumer with redis adapter'")
  end

  valid_startup_mode
end