class Mobility::Backends::Sequel::Serialized

Implements {Mobility::Backends::Serialized} backend for Sequel models, using the Sequel serialization plugin.

@see sequel.jeremyevans.net/rdoc-plugins/classes/Sequel/Plugins/Serialization.html Sequel serialization plugin @see sequel.jeremyevans.net/rdoc-plugins/classes/Sequel/Plugins/SerializationModificationDetection.html Sequel serialization_modification_detection plugin

@example Define attribute with serialized backend

class Post < Sequel::Model
  extend Mobility
  translates :title, backend: :serialized, format: :yaml
end

@example Read and write attribute translations

post = Post.create(title: "foo")
post.title
#=> "foo"
Mobility.locale = :ja
post.title = "あああ"
post.save
post.deserialized_values[:title]       # get deserialized value
#=> {:en=>"foo", :ja=>"あああ"}
post.title(super: true)                # get serialized value
#=> "---\n:en: foo\n:ja: \"あああ\"\n"

Public Class Methods

build_op(attr, _locale) click to toggle source

@!endgroup

# File lib/mobility/backends/sequel/serialized.rb, line 53
def self.build_op(attr, _locale)
  raise ArgumentError,
    "You cannot query on mobility attributes translated with the Serialized backend (#{attr})."
end
configure(options) click to toggle source

@!group Backend Configuration @param (see Backends::Serialized.configure) @option (see Backends::Serialized.configure) @raise (see Backends::Serialized.configure)

Calls superclass method
# File lib/mobility/backends/sequel/serialized.rb, line 47
def self.configure(options)
  super
  Serialized.configure(options)
end
valid_keys() click to toggle source
Calls superclass method
# File lib/mobility/backends/sequel/serialized.rb, line 39
def self.valid_keys
  super + [:format]
end

Public Instance Methods

translations() click to toggle source

Returns deserialized column value @return [Hash]

# File lib/mobility/backends/sequel/serialized.rb, line 83
def translations
  if model.deserialized_values.has_key?(column_name)
    model.deserialized_values[column_name]
  elsif model.frozen?
    deserialize_value(serialized_value)
  else
    model.deserialized_values[column_name] = deserialize_value(serialized_value)
  end
end

Private Instance Methods

column_name() click to toggle source
# File lib/mobility/backends/sequel/serialized.rb, line 113
def column_name
  super.to_sym
end
deserialize_value(value) click to toggle source
# File lib/mobility/backends/sequel/serialized.rb, line 105
def deserialize_value(value)
  model.send(:deserialize_value, column_name, value)
end
serialized_value() click to toggle source
# File lib/mobility/backends/sequel/serialized.rb, line 109
def serialized_value
  model[column_name]
end