Class: Inform::Grammar::Index

Inherits:
Hash show all
Defined in:
lib/story_teller/grammar_parser.rb

Overview

The Inform::Grammar::Index class

Constant Summary collapse

AdminPattern =
%r{admin}.freeze
BuilderPattern =
%r{builder}.freeze
Profanity =
%w[shit damn fuck sod].freeze
ValidModes =
%i[admin builder player].freeze
ModePatterns =
ValidModes.each_with_object({}) do |key, memo|
  memo[key] = Regexp.new(key.to_s)
end

Constants inherited from Hash

Hash::Empty, Hash::MethodBooleanPattern, Hash::MethodWriterPattern

Instance Method Summary collapse

Methods inherited from Hash

#sort

Instance Method Details

#all(actor = nil, grammar_index = self) ⇒ Object



306
307
308
309
310
311
312
313
# File 'lib/story_teller/grammar_parser.rb', line 306

def all(actor = nil, grammar_index = self)
  return grammar_index.map(&:keys).flatten.sort if actor.nil?
  mode = role(actor)
  unless Inform::Grammar.partitions.include?(mode)
    init_all_verbs_by_mode(mode, grammar_index, actor)
  end
  Inform::Grammar.partitions[mode]
end

#by_mode(mode = nil, grammar_index = self) ⇒ Object



315
316
317
318
319
320
321
# File 'lib/story_teller/grammar_parser.rb', line 315

def by_mode(mode = nil, grammar_index = self)
  mode = validate(mode)
  unless Inform::Grammar.selections.include?(mode)
    init_verbs_filtered_by_mode(mode, grammar_index)
  end
  Inform::Grammar.selections[mode]
end

#lookup(key, actor = nil, grammar_index = self) ⇒ Object

TODO: Remove (2026-04-30) after confirming replacement below works better. def lookup(key, actor = nil, grammar_index = self)

return nil if key.nil? || !grammar_index.include?(key)
verb = grammar_index[key].dup
return verb if actor.nil?
return nil if guarded?(verb, actor)
filter_by_permission(verb, actor)
verb

end



294
295
296
297
298
299
300
301
302
303
304
# File 'lib/story_teller/grammar_parser.rb', line 294

def lookup(key, actor = nil, grammar_index = self)
  return nil if key.nil? || !grammar_index.include?(key)

  verb = grammar_index[key].dup
  return verb if actor.nil?

  filter_by_permission(verb, actor)
  return nil if verb.grammars.empty?

  verb
end