Class: Kotoshu::Keyboard::Registry
- Inherits:
-
Object
- Object
- Kotoshu::Keyboard::Registry
- Defined in:
- lib/kotoshu/keyboard/registry.rb
Overview
Registry for keyboard layouts
The registry provides a centralized way to access keyboard layouts and automatically selects the appropriate layout for a given language.
Class Method Summary collapse
-
.available_layouts ⇒ Array<Layout>
Get all available layouts.
-
.clear! ⇒ void
Clear all registered layouts (mainly for testing).
-
.layout_by_name(name) ⇒ Layout
Get layout by name.
-
.layout_for(language_code) ⇒ Layout
Get layout for a specific language code.
-
.register(layout_class) ⇒ Layout
Register a keyboard layout.
-
.register_default(layout_name) ⇒ Object
Set the default layout.
-
.supported_languages ⇒ Array<String>
Get all supported language codes.
-
.supports_language?(language_code) ⇒ Boolean
Check if a language is supported.
Class Method Details
.available_layouts ⇒ Array<Layout>
Get all available layouts
78 79 80 |
# File 'lib/kotoshu/keyboard/registry.rb', line 78 def available_layouts layouts.values end |
.clear! ⇒ void
This method returns an undefined value.
Clear all registered layouts (mainly for testing)
107 108 109 110 |
# File 'lib/kotoshu/keyboard/registry.rb', line 107 def clear! @layouts = nil @default_layout_name = nil end |
.layout_by_name(name) ⇒ Layout
Get layout by name
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/kotoshu/keyboard/registry.rb', line 64 def layout_by_name(name) name_str = name.to_s result = layouts.values.find do |layout| layout.name == name_str || layout.class.name.end_with?("::#{name_str}") end # Return QWERTY as fallback (not default_layout to avoid recursion) result || layouts['Kotoshu::Keyboard::Layouts::QWERTY'] end |
.layout_for(language_code) ⇒ Layout
Get layout for a specific language code
Searches for a layout that supports the given language code. Returns QWERTY as fallback if no matching layout is found.
47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/kotoshu/keyboard/registry.rb', line 47 def layout_for(language_code) # Try exact match first layout = layouts.values.find { |l| l.supports_language?(language_code) } # Try base language if variant (e.g., 'en-GB' -> 'en') unless layout base_lang = language_code.to_s.split('-').first layout = layouts.values.find { |l| l.supports_language?(base_lang) } end layout || default_layout end |
.register(layout_class) ⇒ Layout
Register a keyboard layout
36 37 38 |
# File 'lib/kotoshu/keyboard/registry.rb', line 36 def register(layout_class) layouts[layout_class.name] = layout_class.new end |
.register_default(layout_name) ⇒ Object
Set the default layout
92 93 94 |
# File 'lib/kotoshu/keyboard/registry.rb', line 92 def register_default(layout_name) @default_layout_name = layout_name end |
.supported_languages ⇒ Array<String>
Get all supported language codes
85 86 87 |
# File 'lib/kotoshu/keyboard/registry.rb', line 85 def supported_languages layouts.values.flat_map(&:language_codes).uniq.sort end |
.supports_language?(language_code) ⇒ Boolean
Check if a language is supported
100 101 102 |
# File 'lib/kotoshu/keyboard/registry.rb', line 100 def supports_language?(language_code) layouts.values.any? { |l| l.supports_language?(language_code) } end |