Class: LaunchDarkly::Impl::Integrations::FileDataSourceImpl

Inherits:
Object
  • Object
show all
Defined in:
lib/ldclient-rb/impl/integrations/file_data_source.rb

Overview

Since:

  • 5.5.0

Defined Under Namespace

Classes: FileDataSourcePoller

Constant Summary collapse

@@have_listen =

To avoid pulling in ‘listen’ and its transitive dependencies for people who aren’t using the file data source or who don’t need auto-updating, we only enable auto-update if the ‘listen’ gem has been provided by the host app.

Since:

  • 5.5.0

false

Instance Method Summary collapse

Constructor Details

#initialize(feature_store, logger, options = {}) ⇒ FileDataSourceImpl

Returns a new instance of FileDataSourceImpl.

Since:

  • 5.5.0



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/ldclient-rb/impl/integrations/file_data_source.rb', line 23

def initialize(feature_store, logger, options={})
  @feature_store = feature_store
  @logger = logger
  @paths = options[:paths] || []
  if @paths.is_a? String
    @paths = [ @paths ]
  end
  @auto_update = options[:auto_update]
  if @auto_update && @@have_listen && !options[:force_polling] # force_polling is used only for tests
    # We have seen unreliable behavior in the 'listen' gem in JRuby 9.1 (https://github.com/guard/listen/issues/449).
    # Therefore, on that platform we'll fall back to file polling instead.
    if defined?(JRUBY_VERSION) && JRUBY_VERSION.start_with?("9.1.")
      @use_listen = false
    else
      @use_listen = true
    end
  end
  @poll_interval = options[:poll_interval] || 1
  @initialized = Concurrent::AtomicBoolean.new(false)
  @ready = Concurrent::Event.new
end

Instance Method Details

#initialized?Boolean

Returns:

  • (Boolean)

Since:

  • 5.5.0



45
46
47
# File 'lib/ldclient-rb/impl/integrations/file_data_source.rb', line 45

def initialized?
  @initialized.value
end

#startObject

Since:

  • 5.5.0



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/ldclient-rb/impl/integrations/file_data_source.rb', line 49

def start
  ready = Concurrent::Event.new

  # We will return immediately regardless of whether the file load succeeded or failed -
  # the difference can be detected by checking "initialized?"
  ready.set

  load_all

  if @auto_update
    # If we're going to watch files, then the start event will be set the first time we get
    # a successful load.
    @listener = start_listener
  end

  ready
end

#stopObject

Since:

  • 5.5.0



67
68
69
# File 'lib/ldclient-rb/impl/integrations/file_data_source.rb', line 67

def stop
  @listener.stop unless @listener.nil?
end