Class: Kithe::Indexable::ThreadSettings
- Inherits:
-
Object
- Object
- Kithe::Indexable::ThreadSettings
- Defined in:
- app/indexing/kithe/indexable/thread_settings.rb
Overview
An object that is stored in Thread.current to represent current indexing/writing settings, used to implement Kithe::Indexable.index_with
The public API is that Kithe::Indexable.index_with calls:
-
ThreadSettings.push(settings) to register current settings
-
ThreadSettings.current.pop at end of block to un-register them
Then code in Kithe::Indexable can check ‘ThreadSettings.current` to get the current ThreadSettings. It returns a “null object” representing no settings if there are none, so calling code can do things like:
ThreadSettings.current.disabled_callbacks?
and
ThreadSettings.current.writer
without worrying about if there are current settings.
Defined Under Namespace
Classes: NullSettings
Constant Summary collapse
- THREAD_CURRENT_KEY =
:kithe_indexable_current_writer_settings
Class Method Summary collapse
-
.current ⇒ Object
Returns a ThreadSettings currently stored in Thread.current, or else A Null object (Null Object Pattern) representings no settings.
- .push(**kwargs) ⇒ Object
Instance Method Summary collapse
-
#disabled_callbacks? ⇒ Boolean
Are automatic after_commit callbacks currently disabled?.
-
#initialize(batching:, disable_callbacks:, original_settings:, writer:, on_finish:) ⇒ ThreadSettings
constructor
Ordinarily you will not use this directly, it’s called by .push.
-
#pop ⇒ Object
Remove this object from Thread.current, replacing with any previous current settings.
-
#writer ⇒ Object
Is there a writer configured for current settings? If so, return it.
Constructor Details
#initialize(batching:, disable_callbacks:, original_settings:, writer:, on_finish:) ⇒ ThreadSettings
Ordinarily you will not use this directly, it’s called by .push. But param definitions are here.
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'app/indexing/kithe/indexable/thread_settings.rb', line 57 def initialize(batching:, disable_callbacks:, original_settings:, writer:, on_finish:) @original_settings = original_settings @batching = batching @disable_callbacks = disable_callbacks @on_finish = on_finish @writer = writer if @batching && @writer raise ArgumentError.new("either `batching:true` convenience, or `writer:` specified, you can't do both") end @local_writer = false end |
Class Method Details
.current ⇒ Object
Returns a ThreadSettings currently stored in Thread.current, or else A Null object (Null Object Pattern) representings no settings.
36 37 38 |
# File 'app/indexing/kithe/indexable/thread_settings.rb', line 36 def self.current Thread.current[THREAD_CURRENT_KEY] || NullSettings.new end |
.push(**kwargs) ⇒ Object
26 27 28 29 30 31 32 |
# File 'app/indexing/kithe/indexable/thread_settings.rb', line 26 def self.push(**kwargs) original = Thread.current[THREAD_CURRENT_KEY] instance = new(**kwargs.merge(original_settings: original)) Thread.current[THREAD_CURRENT_KEY] = instance instance end |
Instance Method Details
#disabled_callbacks? ⇒ Boolean
Are automatic after_commit callbacks currently disabled?
91 92 93 |
# File 'app/indexing/kithe/indexable/thread_settings.rb', line 91 def disabled_callbacks? @disable_callbacks end |
#pop ⇒ Object
Remove this object from Thread.current, replacing with any previous current settings.
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'app/indexing/kithe/indexable/thread_settings.rb', line 97 def pop # only call on-finish if we have a writer, batch writers are lazily # created and maybe we never created one if @writer # if we created the writer ourselves locally and nobody # specified an on_finish, close our locally-created writer. on_finish = if @local_writer && @on_finish.nil? proc {|writer| writer.close } else @on_finish end on_finish.call(@writer) if on_finish end Thread.current[THREAD_CURRENT_KEY] = @original_settings end |
#writer ⇒ Object
Is there a writer configured for current settings? If so, return it. May return nil.
In case of ‘batching:true`, the batching writer will be lazily created on first time #writer is asked for.
80 81 82 83 84 85 86 87 88 |
# File 'app/indexing/kithe/indexable/thread_settings.rb', line 80 def writer @writer ||= begin if @batching batch_size = (@batching == true) ? Kithe.indexable_settings.batching_mode_batch_size : @batching @local_writer = true Kithe.indexable_settings.writer_instance!("solr_writer.batch_size" => batch_size) end end end |