Class: Decidim::Toggle::SettingsTabRegistry
- Inherits:
-
Object
- Object
- Decidim::Toggle::SettingsTabRegistry
- Defined in:
- lib/decidim/toggle/settings_tab_registry.rb
Instance Attribute Summary collapse
-
#configurations ⇒ Object
readonly
Returns the value of attribute configurations.
-
#form_tabs ⇒ Object
readonly
Returns the value of attribute form_tabs.
-
#module_configs ⇒ Object
readonly
Returns the value of attribute module_configs.
-
#registry_name ⇒ Object
readonly
Returns the value of attribute registry_name.
Class Method Summary collapse
- .create(name) ⇒ Object
- .destroy(name) ⇒ Object
- .find(name) ⇒ Object
- .register(name, &block) ⇒ Object
Instance Method Summary collapse
-
#ensure_configurations_applied! ⇒ Object
Runs registered
settings_tabsblocks soregister_form_tab/module_configsare populated (e.g. for config_for before any HTTP request builds tabs). - #form_tab(identifier) ⇒ Object
-
#form_tab_for_module(module_name) ⇒ Hash?
:form,:command,:tab_identifierwhen anadd_tabregistered thismodule_name. -
#initialize(name) ⇒ SettingsTabRegistry
constructor
A new instance of SettingsTabRegistry.
- #mark_configurations_applied! ⇒ Object
-
#register_form_tab(identifier, form_class, command_class, module_name: nil) ⇒ Object
Last registration for a given
identifierwins (used when an extension replaces a tab).
Constructor Details
#initialize(name) ⇒ SettingsTabRegistry
Returns a new instance of SettingsTabRegistry.
36 37 38 39 40 41 42 43 |
# File 'lib/decidim/toggle/settings_tab_registry.rb', line 36 def initialize(name) @registry_name = name.to_sym @configurations = [] @form_tabs = {} @module_configs = {} @tab_to_module_name = {} @configurations_applied = false end |
Instance Attribute Details
#configurations ⇒ Object (readonly)
Returns the value of attribute configurations.
34 35 36 |
# File 'lib/decidim/toggle/settings_tab_registry.rb', line 34 def configurations @configurations end |
#form_tabs ⇒ Object (readonly)
Returns the value of attribute form_tabs.
34 35 36 |
# File 'lib/decidim/toggle/settings_tab_registry.rb', line 34 def form_tabs @form_tabs end |
#module_configs ⇒ Object (readonly)
Returns the value of attribute module_configs.
34 35 36 |
# File 'lib/decidim/toggle/settings_tab_registry.rb', line 34 def module_configs @module_configs end |
#registry_name ⇒ Object (readonly)
Returns the value of attribute registry_name.
34 35 36 |
# File 'lib/decidim/toggle/settings_tab_registry.rb', line 34 def registry_name @registry_name end |
Class Method Details
.create(name) ⇒ Object
19 20 21 |
# File 'lib/decidim/toggle/settings_tab_registry.rb', line 19 def create(name) all[name.to_sym] = new(name) end |
.destroy(name) ⇒ Object
23 24 25 |
# File 'lib/decidim/toggle/settings_tab_registry.rb', line 23 def destroy(name) all[name.to_sym] = nil end |
.find(name) ⇒ Object
15 16 17 |
# File 'lib/decidim/toggle/settings_tab_registry.rb', line 15 def find(name) all[name.to_sym] end |
.register(name, &block) ⇒ Object
9 10 11 12 13 |
# File 'lib/decidim/toggle/settings_tab_registry.rb', line 9 def register(name, &block) registry = find(name) || create(name) registry.configurations << block registry end |
Instance Method Details
#ensure_configurations_applied! ⇒ Object
Runs registered settings_tabs blocks so register_form_tab / module_configs are populated
(e.g. for Decidim::Toggle.config_for before any HTTP request builds tabs).
51 52 53 54 55 56 57 |
# File 'lib/decidim/toggle/settings_tab_registry.rb', line 51 def ensure_configurations_applied! return if @configurations_applied ctx = Object.new ctx.define_singleton_method(:t) { |key, **kw| I18n.t(key, **kw) } SettingsTabs.new(@registry_name).build_for(ctx) end |
#form_tab(identifier) ⇒ Object
88 89 90 |
# File 'lib/decidim/toggle/settings_tab_registry.rb', line 88 def form_tab(identifier) form_tabs[identifier.to_sym] end |
#form_tab_for_module(module_name) ⇒ Hash?
Returns :form, :command, :tab_identifier when an add_tab registered this module_name.
93 94 95 96 |
# File 'lib/decidim/toggle/settings_tab_registry.rb', line 93 def form_tab_for_module(module_name) ensure_configurations_applied! module_configs[module_name.to_s] end |
#mark_configurations_applied! ⇒ Object
45 46 47 |
# File 'lib/decidim/toggle/settings_tab_registry.rb', line 45 def mark_configurations_applied! @configurations_applied = true end |
#register_form_tab(identifier, form_class, command_class, module_name: nil) ⇒ Object
Last registration for a given identifier wins (used when an extension replaces a tab).
When module_name is set, last registration for that module name wins (same as tab id).
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/decidim/toggle/settings_tab_registry.rb', line 61 def register_form_tab(identifier, form_class, command_class, module_name: nil) tid = identifier.to_sym if (previous = @tab_to_module_name[tid]) @module_configs.delete(previous) end if duplicate_tab_registration?(tid, form_class, command_class) raise DuplicateTabRegistrationError, "Tab :#{tid} is already registered with form #{@form_tabs[tid][:form]} " \ "and command #{@form_tabs[tid][:command]}; attempted #{form_class} / #{command_class}" end @form_tabs[tid] = { form: form_class, command: command_class } if module_name.blank? @tab_to_module_name.delete(tid) return end key = module_name.to_s @module_configs[key] = { form: form_class, command: command_class, tab_identifier: tid } @tab_to_module_name[tid] = key end |