Class: Fino::Registry
- Inherits:
-
Object
- Object
- Fino::Registry
- Defined in:
- lib/fino/registry.rb
Defined Under Namespace
Classes: DSL
Constant Summary collapse
Instance Attribute Summary collapse
-
#option_registry ⇒ Object
readonly
Returns the value of attribute option_registry.
-
#section_definitions ⇒ Object
readonly
Returns the value of attribute section_definitions.
-
#setting_definitions(at: Fino::EMPTINESS) ⇒ Object
readonly
Returns the value of attribute setting_definitions.
Instance Method Summary collapse
-
#initialize ⇒ Registry
constructor
A new instance of Registry.
- #register(setting_definition) ⇒ Object
- #register_section(section_definition) ⇒ Object
- #register_type_specific_data(setting_definition, path) ⇒ Object
- #section_definition(section_name) ⇒ Object
- #setting_definition(setting_name, at: nil) ⇒ Object
- #setting_definition!(setting_name, at: nil) ⇒ Object
Constructor Details
#initialize ⇒ Registry
Returns a new instance of Registry.
56 57 58 59 60 61 62 63 64 |
# File 'lib/fino/registry.rb', line 56 def initialize @setting_definitions = Set.new @setting_definitions_by_path = {} @section_definitions = Set.new @section_definitions_by_name = {} @option_registry = Fino::Settings::Select::OptionRegistry.new end |
Instance Attribute Details
#option_registry ⇒ Object (readonly)
Returns the value of attribute option_registry.
54 55 56 |
# File 'lib/fino/registry.rb', line 54 def option_registry @option_registry end |
#section_definitions ⇒ Object (readonly)
Returns the value of attribute section_definitions.
54 55 56 |
# File 'lib/fino/registry.rb', line 54 def section_definitions @section_definitions end |
#setting_definitions(at: Fino::EMPTINESS) ⇒ Object (readonly)
Returns the value of attribute setting_definitions.
54 55 56 |
# File 'lib/fino/registry.rb', line 54 def setting_definitions @setting_definitions end |
Instance Method Details
#register(setting_definition) ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/fino/registry.rb', line 91 def register(setting_definition) unless @setting_definitions.add?(setting_definition) raise DuplicateSetting, "#{setting_definition.setting_name} is already registered at #{setting_definition.key}" end path = setting_definition.path.map(&:to_s) @setting_definitions_by_path.deep_set(setting_definition, *path) register_type_specific_data(setting_definition, path) end |
#register_section(section_definition) ⇒ Object
110 111 112 113 114 |
# File 'lib/fino/registry.rb', line 110 def register_section(section_definition) return unless @section_definitions.add?(section_definition) @section_definitions_by_name[section_definition.name.to_s] = section_definition end |
#register_type_specific_data(setting_definition, path) ⇒ Object
103 104 105 106 107 108 |
# File 'lib/fino/registry.rb', line 103 def register_type_specific_data(setting_definition, path) case setting_definition.type when Fino::Settings::Select.type_identifier @option_registry.register(setting_definition..fetch(:options, []), path) end end |
#section_definition(section_name) ⇒ Object
87 88 89 |
# File 'lib/fino/registry.rb', line 87 def section_definition(section_name) @section_definitions_by_name[section_name.to_s] end |
#setting_definition(setting_name, at: nil) ⇒ Object
66 67 68 |
# File 'lib/fino/registry.rb', line 66 def setting_definition(setting_name, at: nil) @setting_definitions_by_path.dig(*[at, setting_name].compact.map(&:to_s)) end |
#setting_definition!(setting_name, at: nil) ⇒ Object
70 71 72 73 74 |
# File 'lib/fino/registry.rb', line 70 def setting_definition!(setting_name, at: nil) setting_definition(setting_name, at: at).tap do |definition| raise UnknownSetting, "Unknown setting: #{path.compact.join('.')}" unless definition end end |