Class: Dry::Schema::Messages::Abstract
- Inherits:
-
Object
- Object
- Dry::Schema::Messages::Abstract
- Includes:
- Configurable
- Defined in:
- lib/dry/schema/messages/abstract.rb
Overview
Abstract class for message backends
Direct Known Subclasses
Class Method Summary collapse
- .build(options = EMPTY_HASH) ⇒ Object private
- .setting_names ⇒ Object private
Instance Method Summary collapse
-
#call(predicate, options) ⇒ Template
(also: #[])
Retrieve a message template.
- #default_locale ⇒ Object private
- #filled_lookup_paths(tokens) ⇒ Object private
- #interpolatable_data(_key, _options, **_data) ⇒ Object private
- #interpolate(_key, _options, **_data) ⇒ Object private
-
#key?(_key, _options = EMPTY_HASH) ⇒ Boolean
Check if given key is defined.
-
#looked_up_paths(predicate, options) ⇒ String
Retrieve an array of looked up paths.
- #lookup_paths(predicate, options) ⇒ Object private
-
#namespaced(namespace) ⇒ Object
Return a new message backend that will look for messages under provided namespace.
-
#root ⇒ Pathname
Return root path to messages file.
- #rule(name, options = {}) ⇒ Object private
- #rule_lookup_paths(tokens) ⇒ Object private
- #translate(key, locale: default_locale) ⇒ Object private
Class Method Details
.build(options = EMPTY_HASH) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/dry/schema/messages/abstract.rb', line 51 def self.build( = EMPTY_HASH) = new .configure do |config| .each do |key, value| config.public_send(:"#{key}=", value) end config.root = "#{config.top_namespace}.#{config.root}" config.rule_lookup_paths = config.rule_lookup_paths.map { |path| "#{config.top_namespace}.#{path}" } yield(config) if block_given? end .prepare end |
.setting_names ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
46 47 48 |
# File 'lib/dry/schema/messages/abstract.rb', line 46 def self.setting_names @setting_names ||= settings.map { _1.name.to_sym } end |
Instance Method Details
#call(predicate, options) ⇒ Template Also known as: []
Retrieve a message template
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/dry/schema/messages/abstract.rb', line 90 def call(predicate, ) = {locale: default_locale, **} opts = .reject { |k,| config..include?(k) } path = lookup_paths(predicate, ).detect { |key| key?(key, opts) } return unless path result = get(path, opts) [ Template.new( messages: self, key: path, options: opts ), result[:meta] ] end |
#default_locale ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
168 169 170 |
# File 'lib/dry/schema/messages/abstract.rb', line 168 def default_locale config.default_locale end |
#filled_lookup_paths(tokens) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
140 141 142 |
# File 'lib/dry/schema/messages/abstract.rb', line 140 def filled_lookup_paths(tokens) config.lookup_paths.map { |path| path % tokens } end |
#interpolatable_data(_key, _options, **_data) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
173 174 175 |
# File 'lib/dry/schema/messages/abstract.rb', line 173 def interpolatable_data(_key, , **_data) raise ::NotImplementedError end |
#interpolate(_key, _options, **_data) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
178 179 180 |
# File 'lib/dry/schema/messages/abstract.rb', line 178 def interpolate(_key, , **_data) raise ::NotImplementedError end |
#key?(_key, _options = EMPTY_HASH) ⇒ Boolean
Check if given key is defined
116 117 118 |
# File 'lib/dry/schema/messages/abstract.rb', line 116 def key?(_key, = EMPTY_HASH) raise ::NotImplementedError end |
#looked_up_paths(predicate, options) ⇒ String
Retrieve an array of looked up paths
128 129 130 131 |
# File 'lib/dry/schema/messages/abstract.rb', line 128 def looked_up_paths(predicate, ) tokens = lookup_tokens(predicate, ) filled_lookup_paths(tokens) end |
#lookup_paths(predicate, options) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
134 135 136 137 |
# File 'lib/dry/schema/messages/abstract.rb', line 134 def lookup_paths(predicate, ) tokens = lookup_tokens(predicate, ) filled_lookup_paths(tokens) end |
#namespaced(namespace) ⇒ Object
Return a new message backend that will look for messages under provided namespace
154 155 156 |
# File 'lib/dry/schema/messages/abstract.rb', line 154 def namespaced(namespace) Dry::Schema::Messages::Namespaced.new(namespace, self) end |
#root ⇒ Pathname
Return root path to messages file
163 164 165 |
# File 'lib/dry/schema/messages/abstract.rb', line 163 def root config.root end |
#rule(name, options = {}) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
77 78 79 80 81 82 83 |
# File 'lib/dry/schema/messages/abstract.rb', line 77 def rule(name, = {}) tokens = {name: name, locale: .fetch(:locale, default_locale)} path = rule_lookup_paths(tokens).detect { |key| key?(key, ) } rule = get(path, ) if path rule.is_a?(::Hash) ? rule[:text] : rule end |
#rule_lookup_paths(tokens) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
145 146 147 |
# File 'lib/dry/schema/messages/abstract.rb', line 145 def rule_lookup_paths(tokens) config.rule_lookup_paths.map { |key| key % tokens } end |
#translate(key, locale: default_locale) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
72 73 74 |
# File 'lib/dry/schema/messages/abstract.rb', line 72 def translate(key, locale: default_locale) t["#{config.top_namespace}.#{key}", locale: locale] end |