Class: Spellr::Language

Inherits:
Object
  • Object
show all
Defined in:
lib/spellr/language.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, wordlists: [], generate: nil, only: [], description: '', hashbangs: []) ⇒ Language

rubocop:disable Metrics/ParameterLists



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/spellr/language.rb', line 9

def initialize(name, # rubocop:disable Metrics/ParameterLists
  wordlists: [],
  generate: nil,
  only: [],
  description: '',
  hashbangs: [])
  @name = name
  @description = description
  @generate = generate
  @wordlist_paths = wordlists
  @only = only
  @hashbangs = hashbangs
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



7
8
9
# File 'lib/spellr/language.rb', line 7

def name
  @name
end

Instance Method Details

#addable_wordlistsObject



58
59
60
# File 'lib/spellr/language.rb', line 58

def addable_wordlists
  ((config_wordlists - default_wordlists) + [project_wordlist]).uniq(&:path)
end

#all_wordlist_pathsObject



35
36
37
# File 'lib/spellr/language.rb', line 35

def all_wordlist_paths
  @wordlist_paths + default_wordlists.map(&:path)
end

#config_wordlistsObject



31
32
33
# File 'lib/spellr/language.rb', line 31

def config_wordlists
  @config_wordlists ||= @wordlist_paths.map(&Spellr::Wordlist.method(:new))
end

#gem_wordlistObject



62
63
64
65
66
# File 'lib/spellr/language.rb', line 62

def gem_wordlist
  @gem_wordlist ||= Spellr::Wordlist.new(
    Pathname.new(__dir__).parent.parent.join('wordlists', "#{name}.txt")
  )
end

#generate_wordlistObject



46
47
48
49
50
51
52
53
54
55
56
# File 'lib/spellr/language.rb', line 46

def generate_wordlist
  return [] unless generate

  require_relative 'cli'
  require 'shellwords'
  warn "Generating wordlist for #{name}"

  Spellr::CLI.new(generate.shellsplit)

  config_wordlists + default_wordlists
end

#generated_project_wordlistObject



75
76
77
78
79
# File 'lib/spellr/language.rb', line 75

def generated_project_wordlist
  @generated_project_wordlist ||= Spellr::Wordlist.new(
    Pathname.pwd.join('.spellr_wordlists', 'generated', "#{name}.txt")
  )
end

#matches?(file) ⇒ Boolean

Returns:

  • (Boolean)


23
24
25
26
27
28
29
# File 'lib/spellr/language.rb', line 23

def matches?(file)
  return true if @only.empty?

  file = Spellr::File.wrap(file)
  return true if @only.any? { |o| file.fnmatch?(o) }
  return true if file.hashbang && @hashbangs.any? { |h| file.hashbang.include?(h) }
end

#project_wordlistObject



68
69
70
71
72
73
# File 'lib/spellr/language.rb', line 68

def project_wordlist
  @project_wordlist ||= Spellr::Wordlist.new(
    Pathname.pwd.join('.spellr_wordlists', "#{name}.txt"),
    name: name
  )
end

#wordlistsObject



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

def wordlists
  w = config_wordlists + default_wordlists.select(&:exist?)
  return generate_wordlist if w.empty?

  w
end