Class: Norn::SkillRegistry
- Inherits:
-
Object
- Object
- Norn::SkillRegistry
- Defined in:
- lib/norn/skill_registry.rb
Class Method Summary collapse
-
.activate!(name) ⇒ Object
Mark a skill as activated.
-
.active_skills ⇒ Object
Retrieves currently activated Norn::Skill objects in this session.
-
.check_and_activate!(text) ⇒ Object
Scans text and activates any matching skills based on their triggers (case-insensitive).
- .clear! ⇒ Object
-
.generate_catalog_xml ⇒ Object
Generates XML catalog for Tier 1 Progressive Disclosure.
- .register(skill) ⇒ Object
- .registered_skills ⇒ Object
- .resolve(name) ⇒ Object
Class Method Details
.activate!(name) ⇒ Object
Mark a skill as activated
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/norn/skill_registry.rb', line 58 def activate!(name) skill = resolve(name) return false unless skill session = nil begin session = Norn["session"] rescue end if session names = session.get(:active_skills) || [] unless names.include?(skill.name) session.set(:active_skills, names + [skill.name]) end else @fallback_active_skills ||= [] unless @fallback_active_skills.include?(skill) @fallback_active_skills << skill end end true end |
.active_skills ⇒ Object
Retrieves currently activated Norn::Skill objects in this session
42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/norn/skill_registry.rb', line 42 def active_skills session = nil begin session = Norn["session"] rescue end if session names = session.get(:active_skills) || [] names.map { |n| resolve(n) }.compact else @fallback_active_skills end end |
.check_and_activate!(text) ⇒ Object
Scans text and activates any matching skills based on their triggers (case-insensitive)
83 84 85 86 87 88 89 90 91 |
# File 'lib/norn/skill_registry.rb', line 83 def check_and_activate!(text) activated_any = false registered_skills.each do |skill| if skill.matches?(text) activated_any = true if activate!(skill.name) end end activated_any end |
.clear! ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/norn/skill_registry.rb', line 28 def clear! @lock.synchronize do @skills.clear @fallback_active_skills.clear end # Reset session storage if available begin session = Norn["session"] session.set(:active_skills, []) if session rescue end end |
.generate_catalog_xml ⇒ Object
Generates XML catalog for Tier 1 Progressive Disclosure
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/norn/skill_registry.rb', line 94 def generate_catalog_xml return "" if registered_skills.empty? xml = [] xml << "<available_skills>" registered_skills.each do |skill| xml << " <skill>" xml << " <name>#{skill.name}</name>" xml << " <description>#{skill.description}</description>" xml << " <location>#{skill.location}</location>" if skill.location xml << " </skill>" end xml << "</available_skills>" xml.join("\n") end |
.register(skill) ⇒ Object
10 11 12 13 14 |
# File 'lib/norn/skill_registry.rb', line 10 def register(skill) @lock.synchronize do @skills[skill.name.to_s.downcase] = skill end end |
.registered_skills ⇒ Object
22 23 24 25 26 |
# File 'lib/norn/skill_registry.rb', line 22 def registered_skills @lock.synchronize do @skills.values end end |
.resolve(name) ⇒ Object
16 17 18 19 20 |
# File 'lib/norn/skill_registry.rb', line 16 def resolve(name) @lock.synchronize do @skills[name.to_s.downcase] end end |