Module: Mobility::Backends::Serialized
- Defined in:
- lib/mobility/backends/serialized.rb
Overview
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
.
Backend Configuration collapse
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.configure(options) ⇒ Object
31 32 33 34 35 |
# File 'lib/mobility/backends/serialized.rb', line 31 def configure() [:format] ||= :yaml [:format] = [:format].downcase.to_sym raise ArgumentError, "Serialized backend only supports yaml or json formats." unless [:yaml, :json].include?([:format]) end |
.deserializer_for(format) ⇒ Object
54 55 56 57 58 59 60 61 |
# 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) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# 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 |
Instance Method Details
#check_opts(opts) ⇒ Object
64 65 66 67 68 69 |
# 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 |