Class: Spellr::Wordlist

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/spellr.rb,
lib/spellr/wordlist.rb

Defined Under Namespace

Classes: NotFound

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file, name: file) ⇒ Wordlist

Returns a new instance of Wordlist.



13
14
15
16
17
18
# File 'lib/spellr/wordlist.rb', line 13

def initialize(file, name: file)
  path = @file = file
  @path = Spellr.pwd.join('.spellr_wordlists').join(path).expand_path
  @name = name
  @include = {}
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



11
12
13
# File 'lib/spellr/wordlist.rb', line 11

def name
  @name
end

#pathObject (readonly)

Returns the value of attribute path.



11
12
13
# File 'lib/spellr/wordlist.rb', line 11

def path
  @path
end

Instance Method Details

#<<(term) ⇒ Object



39
40
41
42
43
44
45
# File 'lib/spellr/wordlist.rb', line 39

def <<(term)
  term = term.spellr_normalize
  touch
  @include[term] = true
  insert_sorted(term)
  @path.write(words.join) # we don't need to clear the cache
end

#clean(file = @path) ⇒ Object



52
53
54
55
# File 'lib/spellr/wordlist.rb', line 52

def clean(file = @path)
  require_relative 'tokenizer'
  write(Spellr::Tokenizer.new(file, skip_key: false).normalized_terms.join)
end

#each(&block) ⇒ Object



20
21
22
# File 'lib/spellr/wordlist.rb', line 20

def each(&block)
  words.each(&block)
end

#exist?Boolean

Returns:

  • (Boolean)


63
64
65
66
67
# File 'lib/spellr/wordlist.rb', line 63

def exist?
  return @exist if defined?(@exist)

  @exist = @path.exist?
end

#include?(term) ⇒ Boolean

significantly faster than default Enumerable#include? requires terms to have been sorted

Returns:

  • (Boolean)


32
33
34
35
36
37
# File 'lib/spellr/wordlist.rb', line 32

def include?(term)
  term = term.spellr_normalize
  @include.fetch(term) do
    @include[term] = words.bsearch { |value| term <=> value }
  end
end

#inspectObject

:nocov:



25
26
27
# File 'lib/spellr/wordlist.rb', line 25

def inspect
  "#<#{self.class.name}:#{@path}>"
end

#lengthObject



77
78
79
# File 'lib/spellr/wordlist.rb', line 77

def length
  to_a.length
end

#suggestions(term) ⇒ Object



81
82
83
# File 'lib/spellr/wordlist.rb', line 81

def suggestions(term)
  suggester.suggestions(term)
end

#touchObject



69
70
71
72
73
74
75
# File 'lib/spellr/wordlist.rb', line 69

def touch
  return if exist?

  @path.dirname.mkpath
  @path.write('')
  clear_cache
end

#wordsObject Also known as: to_a



47
48
49
# File 'lib/spellr/wordlist.rb', line 47

def words
  @words ||= (exist? ? @path.readlines : [])
end

#write(content) ⇒ Object



57
58
59
60
61
# File 'lib/spellr/wordlist.rb', line 57

def write(content)
  @path.write(content)

  clear_cache
end