Module: Mobility

Defined in:
lib/mobility.rb,
lib/mobility/util.rb,
lib/mobility/loaded.rb,
lib/mobility/sequel.rb,
lib/mobility/backend.rb,
lib/mobility/plugins.rb,
lib/mobility/version.rb,
lib/mobility/wrapper.rb,
lib/mobility/backends.rb,
lib/mobility/attributes.rb,
lib/mobility/translates.rb,
lib/mobility/active_model.rb,
lib/mobility/active_record.rb,
lib/mobility/backends/null.rb,
lib/mobility/configuration.rb,
lib/mobility/plugins/cache.rb,
lib/mobility/plugins/dirty.rb,
lib/mobility/backends/jsonb.rb,
lib/mobility/backends/table.rb,
lib/mobility/plugins/sequel.rb,
lib/mobility/backends/column.rb,
lib/mobility/backends/hstore.rb,
lib/mobility/backends/sequel.rb,
lib/mobility/plugins/default.rb,
lib/mobility/backend_resetter.rb,
lib/mobility/plugins/presence.rb,
lib/mobility/plugins/fallbacks.rb,
lib/mobility/backends/key_value.rb,
lib/mobility/sequel/translation.rb,
lib/mobility/backends/serialized.rb,
lib/mobility/backends/hash_valued.rb,
lib/mobility/plugins/active_model.rb,
lib/mobility/plugins/sequel/dirty.rb,
lib/mobility/backend/orm_delegator.rb,
lib/mobility/backends/sequel/jsonb.rb,
lib/mobility/backends/sequel/table.rb,
lib/mobility/plugins/active_record.rb,
lib/mobility/sequel/column_changes.rb,
lib/mobility/backends/active_record.rb,
lib/mobility/backends/sequel/column.rb,
lib/mobility/backends/sequel/hstore.rb,
lib/mobility/backends/sequel/pg_hash.rb,
lib/mobility/sequel/backend_resetter.rb,
lib/mobility/sequel/text_translation.rb,
lib/mobility/backend/stringify_locale.rb,
lib/mobility/plugins/locale_accessors.rb,
lib/mobility/sequel/model_translation.rb,
lib/mobility/active_record/translation.rb,
lib/mobility/backends/sequel/key_value.rb,
lib/mobility/sequel/string_translation.rb,
lib/mobility/backends/sequel/serialized.rb,
lib/mobility/plugins/active_model/dirty.rb,
lib/mobility/plugins/active_record/dirty.rb,
lib/mobility/backends/active_record/jsonb.rb,
lib/mobility/backends/active_record/table.rb,
lib/mobility/active_model/backend_resetter.rb,
lib/mobility/backends/active_record/column.rb,
lib/mobility/backends/active_record/hstore.rb,
lib/mobility/backends/sequel/query_methods.rb,
lib/mobility/plugins/fallthrough_accessors.rb,
lib/mobility/active_record/backend_resetter.rb,
lib/mobility/active_record/text_translation.rb,
lib/mobility/backends/active_record/pg_hash.rb,
lib/mobility/active_record/attribute_methods.rb,
lib/mobility/active_record/model_translation.rb,
lib/mobility/active_record/string_translation.rb,
lib/mobility/backends/active_record/key_value.rb,
lib/mobility/plugins/cache/translation_cacher.rb,
lib/mobility/backends/active_record/serialized.rb,
lib/mobility/active_record/uniqueness_validator.rb,
lib/rails/generators/mobility/install_generator.rb,
lib/mobility/backends/sequel/jsonb/query_methods.rb,
lib/mobility/backends/sequel/table/query_methods.rb,
lib/mobility/backends/active_record/query_methods.rb,
lib/mobility/backends/sequel/column/query_methods.rb,
lib/mobility/backends/sequel/hstore/query_methods.rb,
lib/mobility/backends/sequel/postgres_query_methods.rb,
lib/mobility/backends/sequel/key_value/query_methods.rb,
lib/rails/generators/mobility/translations_generator.rb,
lib/mobility/backends/sequel/serialized/query_methods.rb,
lib/rails/generators/mobility/backend_generators/base.rb,
lib/mobility/backends/active_record/jsonb/query_methods.rb,
lib/mobility/backends/active_record/table/query_methods.rb,
lib/mobility/backends/active_record/column/query_methods.rb,
lib/mobility/backends/active_record/hstore/query_methods.rb,
lib/mobility/backends/active_record/key_value/query_methods.rb,
lib/mobility/backends/active_record/serialized/query_methods.rb,
lib/rails/generators/mobility/backend_generators/table_backend.rb,
lib/rails/generators/mobility/backend_generators/column_backend.rb,
lib/rails/generators/mobility/active_record_migration_compatibility.rb

Overview

Mobility is a gem for storing and retrieving localized data through attributes on a class. The Mobility module includes all necessary methods and modules to support defining backend accessors on a class.

To enable Mobility on a class, simply include or extend the Mobility module, and define any attribute accessors using Translates#mobility_accessor (aliased to the value of Mobility.accessor_method, which defaults to translates).

class MyClass
extend Mobility
translates :title, backend: :key_value
end

When defining this module, Mobility attempts to require various gems (for example, active_record and sequel) to evaluate which are loaded. Loaded gems are tracked with dynamic subclasses of the Loaded module and referenced in backends to define gem-dependent behavior.

Defined Under Namespace

Modules: ActiveModel, ActiveRecord, ActiveRecordMigrationCompatibility, Backend, BackendGenerators, Backends, ClassMethods, InstanceMethods, Loaded, Plugins, Sequel, Translates, Util Classes: Attributes, BackendRequired, BackendResetter, Configuration, InstallGenerator, InvalidLocale, TranslationsGenerator, VersionNotSupportedError, Wrapper

Constant Summary collapse

VERSION =
"0.2.2"

Locale Accessors collapse

Configuration Methods collapse

Class Method Summary collapse

Class Method Details

.accessor_methodSymbol

Alias for mobility_accessor (defaults to translates) (see Mobility::Configuration#query_method)

Returns:

  • (Symbol)


# File 'lib/mobility.rb', line 147


.configMobility::Configuration

Returns Mobility configuration.

Returns:



143
144
145
# File 'lib/mobility.rb', line 143

def config
  @configuration ||= Mobility::Configuration.new
end

.configure {|Mobility::Configuration| ... } ⇒ Object

Configure Mobility

Yields:



179
180
181
# File 'lib/mobility.rb', line 179

def configure
  yield config
end

.default_accessor_localesHash

Default set of options. These will be merged with any backend options when defining translated attributes (with translates). Default options may not include the keys 'backend' or 'model_class'. (see Mobility::Configuration#plugins) (see Mobility::Configuration#default_accessor_locales)

Returns:

  • (Hash)


167
168
169
170
171
# File 'lib/mobility.rb', line 167

%w[accessor_method query_method default_backend default_options plugins default_accessor_locales].each do |method_name|
  define_method method_name do
    config.public_send(method_name)
  end
end

.default_backendSymbol, Class

Default backend to use (can be symbol or actual backend class)

Returns:

  • (Symbol, Class)


# File 'lib/mobility.rb', line 156


.default_fallbacksI18n::Locale::Fallbacks

Default fallbacks instance

Returns:

  • (I18n::Locale::Fallbacks)


# File 'lib/mobility.rb', line 153


.default_optionsHash

Default set of options. These will be merged with any backend options when defining translated attributes (with translates). Default options may not include the keys 'backend' or 'model_class'. (see Mobility::Configuration#plugins) (see Mobility::Configuration#default_accessor_locales)

Returns:

  • (Hash)


167
168
169
170
171
# File 'lib/mobility.rb', line 167

%w[accessor_method query_method default_backend default_options plugins default_accessor_locales].each do |method_name|
  define_method method_name do
    config.public_send(method_name)
  end
end

.enforce_available_locales!(locale) ⇒ Object

Raises InvalidLocale exception if the locale passed in is present but not available.

Parameters:

  • locale (String, Symbol)

Raises:



213
214
215
216
217
# File 'lib/mobility.rb', line 213

def enforce_available_locales!(locale)
  if I18n.enforce_available_locales
    raise Mobility::InvalidLocale.new(locale) unless (I18n.locale_available?(locale) || locale.nil?)
  end
end

.extended(model_class) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/mobility.rb', line 80

def extended(model_class)
  return if model_class.respond_to? :mobility_accessor

  model_class.include(InstanceMethods)
  model_class.extend(ClassMethods)

  if translates = Mobility.config.accessor_method
    model_class.singleton_class.send(:alias_method, translates, :mobility_accessor)
  end

  if Loaded::ActiveRecord
    model_class.include(ActiveRecord)                   if model_class < ::ActiveRecord::Base
    model_class.include(ActiveRecord::AttributeMethods) if model_class.ancestors.include?(::ActiveRecord::AttributeMethods)
  end

  if Loaded::Sequel
    model_class.include(Sequel) if model_class < ::Sequel::Model
  end
end

.included(model_class) ⇒ Object

Extends model with this class so that include Mobility is equivalent to extend Mobility (but extend is preferred).

Parameters:

  • model_class


103
104
105
# File 'lib/mobility.rb', line 103

def included(model_class)
  model_class.extend self
end

.localeSymbol

Returns Mobility locale.

Returns:

  • (Symbol)

    Mobility locale



109
110
111
# File 'lib/mobility.rb', line 109

def locale
  read_locale || I18n.locale
end

.locale=(locale) ⇒ Symbol

Sets Mobility locale

Parameters:

  • locale (Symbol)

    Locale to set

Returns:

  • (Symbol)

    Locale

Raises:

  • (InvalidLocale)

    if locale is nil or not in I18n.available_locales (if I18n.enforce_available_locales is true)



118
119
120
# File 'lib/mobility.rb', line 118

def locale=(locale)
  set_locale(locale)
end

.normalize_locale(locale = Mobility.locale) ⇒ String Also known as: normalized_locale

Return normalized locale

Examples:

Mobility.normalize_locale(:ja)
#=> "ja"
Mobility.normalize_locale("pt-BR")
#=> "pt_br"

Parameters:

  • locale (String, Symbol) (defaults to: Mobility.locale)

Returns:

  • (String)

    Normalized locale



192
193
194
# File 'lib/mobility.rb', line 192

def normalize_locale(locale = Mobility.locale)
  "#{locale.to_s.downcase.sub("-", "_")}".freeze
end

.normalize_locale_accessor(attribute, locale = Mobility.locale) ⇒ String

Return normalized locale accessor name

Examples:

Mobility.normalize_locale_accessor(:foo, :ja)
#=> "foo_ja"
Mobility.normalize_locale_accessor(:bar, "pt-BR")
#=> "bar_pt_br"

Parameters:

  • attribute (String, Symbol)
  • locale (String, Symbol) (defaults to: Mobility.locale)

Returns:

  • (String)

    Normalized locale accessor name



206
207
208
# File 'lib/mobility.rb', line 206

def normalize_locale_accessor(attribute, locale = Mobility.locale)
  "#{attribute}_#{normalize_locale(locale)}".freeze
end

.pluginsHash

Default set of options. These will be merged with any backend options when defining translated attributes (with translates). Default options may not include the keys 'backend' or 'model_class'. (see Mobility::Configuration#plugins) (see Mobility::Configuration#default_accessor_locales)

Returns:

  • (Hash)


167
168
169
170
171
# File 'lib/mobility.rb', line 167

%w[accessor_method query_method default_backend default_options plugins default_accessor_locales].each do |method_name|
  define_method method_name do
    config.public_send(method_name)
  end
end

.query_methodSymbol

Alias for mobility_accessor (defaults to translates) (see Mobility::Configuration#query_method)

Returns:

  • (Symbol)


# File 'lib/mobility.rb', line 147


.storageRequestStore

Returns Request store.

Returns:

  • (RequestStore)

    Request store



137
138
139
# File 'lib/mobility.rb', line 137

def storage
  RequestStore.store
end

.with_locale(locale) {|Symbol| ... } ⇒ Object

Sets Mobility locale around block

Parameters:

  • locale (Symbol)

    Locale to set in block

Yields:

  • (Symbol)

    Locale



125
126
127
128
129
130
131
132
133
# File 'lib/mobility.rb', line 125

def with_locale(locale)
  previous_locale = read_locale
  begin
    set_locale(locale)
    yield(locale)
  ensure
    set_locale(previous_locale)
  end
end