Class: Dry::Schema::Messages::Abstract

Inherits:
Object
  • Object
show all
Includes:
Configurable
Defined in:
lib/dry/schema/messages/abstract.rb

Overview

Abstract class for message backends

Direct Known Subclasses

I18n, Namespaced, YAML

Class Method Summary collapse

Instance Method Summary collapse

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.



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/dry/schema/messages/abstract.rb', line 58

def self.build(options = EMPTY_HASH)
  messages = new

  messages.configure do |config|
    options.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

  messages.prepare
end

.setting_namesObject

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.



47
48
49
50
51
52
53
54
55
# File 'lib/dry/schema/messages/abstract.rb', line 47

def self.setting_names
  # TODO: this is compatibility tweak to make it work with dry-configurable < 0.16.1
  #       and should be removed in dry-schema 2.0.0
  @setting_names ||= settings
    .map { |setting|
      setting.respond_to?(:name) ? setting.name : setting
    }
    .map(&:to_sym)
end

Instance Method Details

#call(predicate, options) ⇒ Template Also known as: []

Retrieve a message template

Returns:



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/dry/schema/messages/abstract.rb', line 97

def call(predicate, options)
  options = {locale: default_locale, **options}
  opts = options.reject { |k,| config.lookup_options.include?(k) }
  path = lookup_paths(predicate, options).detect { |key| key?(key, opts) }

  return unless path

  result = get(path, opts)

  [
    Template.new(
      messages: self,
      key: path,
      options: opts
    ),
    result[:meta]
  ]
end

#default_localeObject

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.



175
176
177
# File 'lib/dry/schema/messages/abstract.rb', line 175

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.



147
148
149
# File 'lib/dry/schema/messages/abstract.rb', line 147

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.

Raises:

  • (NotImplementedError)


180
181
182
# File 'lib/dry/schema/messages/abstract.rb', line 180

def interpolatable_data(_key, _options, **_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.

Raises:

  • (NotImplementedError)


185
186
187
# File 'lib/dry/schema/messages/abstract.rb', line 185

def interpolate(_key, _options, **_data)
  raise NotImplementedError
end

#key?(_key, _options = EMPTY_HASH) ⇒ Boolean

Check if given key is defined

Returns:

  • (Boolean)

Raises:

  • (NotImplementedError)


123
124
125
# File 'lib/dry/schema/messages/abstract.rb', line 123

def key?(_key, _options = EMPTY_HASH)
  raise NotImplementedError
end

#looked_up_paths(predicate, options) ⇒ String

Retrieve an array of looked up paths

Parameters:

  • predicate (Symbol)
  • options (Hash)

Returns:

  • (String)


135
136
137
138
# File 'lib/dry/schema/messages/abstract.rb', line 135

def looked_up_paths(predicate, options)
  tokens = lookup_tokens(predicate, options)
  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.



141
142
143
144
# File 'lib/dry/schema/messages/abstract.rb', line 141

def lookup_paths(predicate, options)
  tokens = lookup_tokens(predicate, options)
  filled_lookup_paths(tokens)
end

#namespaced(namespace) ⇒ Object

Return a new message backend that will look for messages under provided namespace

Parameters:

  • namespace (Symbol, String)


161
162
163
# File 'lib/dry/schema/messages/abstract.rb', line 161

def namespaced(namespace)
  Dry::Schema::Messages::Namespaced.new(namespace, self)
end

#rootPathname

Return root path to messages file

Returns:

  • (Pathname)


170
171
172
# File 'lib/dry/schema/messages/abstract.rb', line 170

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.



84
85
86
87
88
89
90
# File 'lib/dry/schema/messages/abstract.rb', line 84

def rule(name, options = {})
  tokens = {name: name, locale: options.fetch(:locale, default_locale)}
  path = rule_lookup_paths(tokens).detect { |key| key?(key, options) }

  rule = get(path, options) 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.



152
153
154
# File 'lib/dry/schema/messages/abstract.rb', line 152

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.



79
80
81
# File 'lib/dry/schema/messages/abstract.rb', line 79

def translate(key, locale: default_locale)
  t["#{config.top_namespace}.#{key}", locale: locale]
end