Top Level Namespace
Defined Under Namespace
Instance Method Summary collapse
-
#ruby2_keywords ⇒ Object
Mobility is a gem for storing and retrieving localized data through attributes on a class.
Instance Method Details
#ruby2_keywords ⇒ Object
Mobility is a gem for storing and retrieving localized data through attributes on a class.
There are two ways to translate attributes on a class, both of which are
variations on the same basic mechanism. The first and most common way is to
extend the Mobility module, which adds a class method translates.
Translated attributes can then be defined like this:
class Post
extend Mobility
translates :title, backend: :key_value
end
Behind the scenes, translates simply creates an instance of
Mobility.translations_class, passes it whatever arguments are passed to
translates, and includes the instance (which is a module) into the class.
So the above example is equivalent to:
class Post
Mobility.translations_class.new(:title, backend: :key_value)
end
Mobility.translations_class is a subclass of Mobility::Translations created
when Mobility.configure is called to configure Mobility. In fact, when you
call Mobility.configure, it is the subclass of Mobility::Translations which
is passed to the block as config (or as self if no argument is passed to
the block). Plugins and plugin configuration is all applied to the same
Mobility.translations_class.
There is another way to use Mobility, which is to create your own subclass or
subclasses of Mobility::Translations and include them explicitly, without
using translates.
For example:
class Translations < Mobility::Translations
plugins do
backend :key_value
# ...
end
end
class Post
include Translations.new(:title)
end
This usage might be handy if, for example, you want to have more complex
configuration, where some models use some plugins while others do not. Since
Mobility::Translations is a class like any other, you can subclass it and
define plugins specifically on the subclass which are not present on its
parent:
class TranslationsWithFallbacks < Translations
plugins do
fallbacks
end
end
class Comment
include TranslationsWithFallbacks.new(:author)
end
In this case, Comment uses TranslationsWithFallbacks and thus has the
fallbacks plugin, whereas Post uses Translations which does not have that
plugin enabled.
77 |
# File 'lib/mobility.rb', line 77 def ruby2_keywords(*); end |