module Mobility::Backends::Serialized
Stores translations as serialized attributes in a single text column. This implies that the translated values are not searchable, and thus this backend is not recommended unless specific constraints prevent use of other solutions.
To use this backend, ensure that the model table has a text column on its table with the same name as the translated attribute.
Backend
Options¶ ↑
format
¶ ↑
Format for serialization. Either :yaml
(default) or :json
.
@see Mobility::Backends::ActiveRecord::Serialized
@see Mobility::Backends::Sequel::Serialized
Public Class Methods
configure(options)
click to toggle source
@!group Backend
Configuration @option options [Symbol] format (:yaml) Serialization format @raise [ArgumentError] if a format other than :yaml
or :json
is passed in
# File lib/mobility/backends/serialized.rb, line 31 def configure(options) options[:format] ||= :yaml options[:format] = options[:format].downcase.to_sym raise ArgumentError, "Serialized backend only supports yaml or json formats." unless [:yaml, :json].include?(options[:format]) end
deserializer_for(format)
click to toggle source
# File lib/mobility/backends/serialized.rb, line 54 def deserializer_for(format) case format when :yaml lambda { |v| YAML.load(v) } when :json lambda { |v| JSON.parse(v, symbolize_names: true) } end end
serializer_for(format)
click to toggle source
@!endgroup
# File lib/mobility/backends/serialized.rb, line 38 def serializer_for(format) lambda do |obj| return if obj.nil? if obj.is_a? ::Hash obj = obj.inject({}) do |translations, (locale, value)| translations[locale] = value.to_s unless value.nil? translations end else raise ArgumentError, "Attribute is supposed to be a Hash, but was a #{obj.class}. -- #{obj.inspect}" end obj.send("to_#{format}") end end
Public Instance Methods
check_opts(opts)
click to toggle source
# File lib/mobility/backends/serialized.rb, line 64 def check_opts(opts) if keys = extract_attributes(opts) raise ArgumentError, "You cannot query on mobility attributes translated with the Serialized backend (#{keys.join(", ")})." end end