Class: SplitIoClient::SplitFactory
- Inherits:
-
Object
- Object
- SplitIoClient::SplitFactory
- Includes:
- Cache::Repositories, Cache::Stores
- Defined in:
- lib/splitclient-rb/split_factory.rb
Constant Summary collapse
- ROOT_PROCESS_ID =
Process.pid
- SINGLETON_WARN =
'We recommend keeping only one instance of the factory at all times (Singleton pattern) and reusing it throughout your application'
Instance Attribute Summary collapse
-
#adapter ⇒ Object
readonly
Returns the value of attribute adapter.
-
#client ⇒ Object
readonly
Returns the value of attribute client.
-
#config ⇒ Object
readonly
Returns the value of attribute config.
-
#manager ⇒ Object
readonly
Returns the value of attribute manager.
Instance Method Summary collapse
-
#initialize(api_key, config_hash = {}) ⇒ SplitFactory
constructor
A new instance of SplitFactory.
- #register_factory ⇒ Object
- #start! ⇒ Object (also: #resume!)
- #stop! ⇒ Object
- #valid_mode ⇒ Object
Constructor Details
#initialize(api_key, config_hash = {}) ⇒ SplitFactory
Returns a new instance of SplitFactory.
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 45 |
# File 'lib/splitclient-rb/split_factory.rb', line 10 def initialize(api_key, config_hash = {}) at_exit do unless ENV['SPLITCLIENT_ENV'] == 'test' if (Process.pid == ROOT_PROCESS_ID) @config.logger.info('Split SDK shutdown started...') @client.destroy if @client stop! @config.logger.info('Split SDK shutdown complete') end end end @api_key = api_key @config = SplitConfig.new (config_hash) raise 'Invalid SDK mode' unless valid_mode @splits_repository = SplitsRepository.new(@config) @segments_repository = SegmentsRepository.new(@config) @impressions_repository = ImpressionsRepository.new(@config) @metrics_repository = MetricsRepository.new(@config) @events_repository = EventsRepository.new(@config, @api_key) @sdk_blocker = SDKBlocker.new(@splits_repository, @segments_repository, @config) @adapter = start! @client = SplitClient.new(@api_key, @adapter, @splits_repository, @segments_repository, @impressions_repository, @metrics_repository, @events_repository, @sdk_blocker, @config) @manager = SplitManager.new(@api_key, @adapter, @splits_repository, @sdk_blocker, @config) validate_api_key RedisMetricsFixer.new(@metrics_repository, @config).call register_factory end |
Instance Attribute Details
#adapter ⇒ Object (readonly)
Returns the value of attribute adapter.
8 9 10 |
# File 'lib/splitclient-rb/split_factory.rb', line 8 def adapter @adapter end |
#client ⇒ Object (readonly)
Returns the value of attribute client.
8 9 10 |
# File 'lib/splitclient-rb/split_factory.rb', line 8 def client @client end |
#config ⇒ Object (readonly)
Returns the value of attribute config.
8 9 10 |
# File 'lib/splitclient-rb/split_factory.rb', line 8 def config @config end |
#manager ⇒ Object (readonly)
Returns the value of attribute manager.
8 9 10 |
# File 'lib/splitclient-rb/split_factory.rb', line 8 def manager @manager end |
Instance Method Details
#register_factory ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/splitclient-rb/split_factory.rb', line 55 def register_factory SplitIoClient.load_factory_registry number_of_factories = SplitIoClient.split_factory_registry.number_of_factories_for(@api_key) if(number_of_factories > 0) @config.logger.warn("Factory instantiation: You already have #{number_of_factories} factories with this API Key. #{SINGLETON_WARN}") elsif(SplitIoClient.split_factory_registry.other_factories) @config.logger.warn('Factory instantiation: You already have an instance of the Split factory.' \ " Make sure you definitely want this additional instance. #{SINGLETON_WARN}") end SplitIoClient.split_factory_registry.add(@api_key) end |
#start! ⇒ Object Also known as: resume!
47 48 49 |
# File 'lib/splitclient-rb/split_factory.rb', line 47 def start! SplitAdapter.new(@api_key, @splits_repository, @segments_repository, @impressions_repository, @metrics_repository, @events_repository, @sdk_blocker, @config) end |
#stop! ⇒ Object
51 52 53 |
# File 'lib/splitclient-rb/split_factory.rb', line 51 def stop! @config.threads.each { |_, t| t.exit } end |
#valid_mode ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/splitclient-rb/split_factory.rb', line 70 def valid_mode valid_startup_mode = false case @config.mode when :consumer if @config.cache_adapter.is_a? SplitIoClient::Cache::Adapters::RedisAdapter valid_startup_mode = true else @config.logger.error('Consumer mode cannot be used with Memory adapter. ' \ 'Use Redis adapter instead.') end when :standalone if @config.cache_adapter.is_a? SplitIoClient::Cache::Adapters::MemoryAdapter valid_startup_mode = true else @config.logger.error('Standalone mode cannot be used with Redis adapter. ' \ 'Use Memory adapter instead.') end when :producer @config.logger.error('Producer mode is no longer supported. Use Split Synchronizer. ' \ 'See: https://github.com/splitio/split-synchronizer') else @config.logger.error('Invalid SDK mode selected. ' \ "Valid modes are 'standalone with memory adapter' and 'consumer with redis adapter'") end valid_startup_mode end |