Module: LittleWeasel::Modules::DictionarySourceable

Includes:
DictionaryCacheKeys, DictionarySourceValidatable, DictionaryValidatable
Included in:
Services::DictionaryCacheService, Services::DictionaryCreatorService
Defined in:
lib/LittleWeasel/modules/dictionary_sourceable.rb

Overview

This module provides methods to manage dictionary sources.

Constant Summary collapse

MEMORY_SOURCE =
'*'

Constants included from DictionaryCacheKeys

LittleWeasel::Modules::DictionaryCacheKeys::DICTIONARIES, LittleWeasel::Modules::DictionaryCacheKeys::DICTIONARY_CACHE, LittleWeasel::Modules::DictionaryCacheKeys::DICTIONARY_ID, LittleWeasel::Modules::DictionaryCacheKeys::DICTIONARY_OBJECT, LittleWeasel::Modules::DictionaryCacheKeys::DICTIONARY_REFERENCES, LittleWeasel::Modules::DictionaryCacheKeys::SOURCE

Class Method Summary collapse

Instance Method Summary collapse

Methods included from DictionaryValidatable

#validate_dictionary_source_does_not_exist, validate_dictionary_source_does_not_exist

Methods included from DictionarySourceValidatable

#validate_dictionary_source, validate_dictionary_source

Methods included from DictionaryCacheKeys

#initialize_dictionary_cache, initialize_dictionary_cache, #initialized_dictionary_cache, initialized_dictionary_cache

Class Method Details

.file_source?(dictionary_source) ⇒ Boolean

Returns:

  • (Boolean)


18
19
20
# File 'lib/LittleWeasel/modules/dictionary_sourceable.rb', line 18

def self.file_source?(dictionary_source)
  !memory_source? dictionary_source
end

.memory_sourceObject



26
27
28
# File 'lib/LittleWeasel/modules/dictionary_sourceable.rb', line 26

def memory_source
  "#{MEMORY_SOURCE}#{SecureRandom.uuid[0..7]}"
end

.memory_source?(dictionary_source) ⇒ Boolean

Returns:

  • (Boolean)


22
23
24
# File 'lib/LittleWeasel/modules/dictionary_sourceable.rb', line 22

def self.memory_source?(dictionary_source)
  dictionary_source =~ /^#{Regexp.quote(MEMORY_SOURCE)}[0-9a-fA-F]{8}$/
end

Instance Method Details

#add_dictionary_source(dictionary_source:) ⇒ Object

Adds a dictionary source. A “dictionary source” specifies the source from which the dictionary ultimately obtains its words.

or a memory source indicator to signify that the dictionary was created dynamically from memory.

Parameters:

  • source (String)

    the dictionary source. This can be a file path



37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/LittleWeasel/modules/dictionary_sourceable.rb', line 37

def add_dictionary_source(dictionary_source:)
  validate_dictionary_source_does_not_exist dictionary_cache_service: self

  set_dictionary_reference \
    dictionary_id: dictionary_id_associated_with(dictionary_source: dictionary_source)
  # Only set the dictionary source if it doesn't already exist because settings
  # the dictionary source wipes out the #dictionary_object; dictionary objects
  # can have more than one dictionary reference pointing to them, and we don't
  # want to blow away the #dictionary_object, metadata, or any other data
  # associated with it if it already exists.
  set_dictionary_source(dictionary_source: dictionary_source) unless dictionary?
  self
end

#dictionary_id_associated_with(dictionary_source:) ⇒ Object (private)

Returns the dictionary_id for the dictionary_source if it exists in dictionaries; otherwise, returns the new dictionary id that should be used.



77
78
79
80
81
82
83
# File 'lib/LittleWeasel/modules/dictionary_sourceable.rb', line 77

def dictionary_id_associated_with(dictionary_source:)
  dictionaries = dictionary_cache.dig(DICTIONARY_CACHE, DICTIONARIES)
  dictionaries&.each_pair do |dictionary_id, dictionary_hash|
    return dictionary_id if dictionary_source == dictionary_hash[SOURCE]
  end
  SecureRandom.uuid[0..7]
end

#dictionary_sourceObject Also known as: dictionary_file



51
52
53
# File 'lib/LittleWeasel/modules/dictionary_sourceable.rb', line 51

def dictionary_source
  dictionary_cache.dig(DICTIONARY_CACHE, DICTIONARIES, dictionary_id, SOURCE)
end

#dictionary_source!Object Also known as: dictionary_file!

Raises:

  • (ArgumentError)


56
57
58
59
60
61
# File 'lib/LittleWeasel/modules/dictionary_sourceable.rb', line 56

def dictionary_source!
  raise ArgumentError, "A dictionary source could not be found for key '#{key}'." \
    unless dictionary_reference?

  dictionary_cache[DICTIONARY_CACHE][DICTIONARIES][dictionary_id!][SOURCE]
end

#memory_sourceObject (private)



26
27
28
# File 'lib/LittleWeasel/modules/dictionary_sourceable.rb', line 26

def memory_source
  "#{MEMORY_SOURCE}#{SecureRandom.uuid[0..7]}"
end

#set_dictionary_source(dictionary_source:) ⇒ Object (private)

Sets the dictionary source in the dictionary cache.



67
68
69
70
71
72
# File 'lib/LittleWeasel/modules/dictionary_sourceable.rb', line 67

def set_dictionary_source(dictionary_source:)
  dictionary_cache[DICTIONARY_CACHE][DICTIONARIES][dictionary_id!] = {
    SOURCE => dictionary_source,
    DICTIONARY_OBJECT => {}
  }
end