Module: Mobility::Backend

Includes:
Enumerable
Included in:
Mobility::Backends::Null
Defined in:
lib/mobility/backend.rb,
lib/mobility/backend/orm_delegator.rb,
lib/mobility/backend/stringify_locale.rb

Overview

Defines a minimum set of shared components included in any backend. These are:

  • a reader returning the model on which the backend is defined (#model)
  • a reader returning the attribute for which the backend is defined (#attribute)
  • a constructor setting these two elements (+model+, attribute), and extracting fallbacks from the options hash (#initialize)
  • a setup method adding any configuration code to the model class (Setup#setup)

On top of this, a backend will normally:

  • implement a read instance method to read from the backend
  • implement a write instance method to write to the backend
  • implement an each_locale instance method to iterate through available locales (used to define other Enumerable traversal and search methods)
  • implement a configure class method to apply any normalization to the options hash
  • call the setup method yielding attributes and options to configure the model class

Examples:

Defining a Backend

class MyBackend
  include Mobility::Backend

  def read(locale, options = {})
    # ...
  end

  def write(locale, value, options = {})
    # ...
  end

  def each_locale
    # ...
  end

  def self.configure(options)
    # ...
  end

  setup do |attributes, options|
    # Do something with attributes and options in context of model class.
  end
end

See Also:

Defined Under Namespace

Modules: ClassMethods, OrmDelegator, Setup, StringifyLocale Classes: Translation

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#attributeString (readonly)

Returns Backend attribute.

Returns:

  • (String)

    Backend attribute



61
62
63
# File 'lib/mobility/backend.rb', line 61

def attribute
  @attribute
end

#modelObject (readonly)

Returns Model on which backend is defined.

Returns:

  • (Object)

    Model on which backend is defined



64
65
66
# File 'lib/mobility/backend.rb', line 64

def model
  @model
end

Class Method Details

.included(base) ⇒ Object

Extend included class with setup method



110
111
112
113
# File 'lib/mobility/backend.rb', line 110

def self.included(base)
  base.extend(Setup)
  base.extend(ClassMethods)
end

.method_name(attribute) ⇒ String

Returns name of backend reader method.

Parameters:

  • attribute (String)

Returns:

  • (String)

    name of backend reader method



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

def self.method_name(attribute)
  @backend_method_names ||= {}
  @backend_method_names[attribute] ||= "#{attribute}_backend".freeze
end

Instance Method Details

#each {|Translation| ... } ⇒ Object

Yields translations to block

Yield Parameters:



93
94
95
# File 'lib/mobility/backend.rb', line 93

def each
  each_locale { |locale| yield Translation.new(self, locale) }
end

#each_locale {|Locale| ... } ⇒ Object

Yields locales available for this attribute.

Yield Parameters:

  • Locale (Symbol)


88
89
# File 'lib/mobility/backend.rb', line 88

def each_locale
end

#initialize(model, attribute, **_) ⇒ Object

Parameters:

  • model

    Model on which backend is defined

  • attribute (String)

    Backend attribute



69
70
71
72
# File 'lib/mobility/backend.rb', line 69

def initialize(model, attribute, **_)
  @model = model
  @attribute = attribute
end

#localesArray<Symbol>

List locales available for this backend.

Returns:

  • (Array<Symbol>)

    Array of available locales



99
100
101
# File 'lib/mobility/backend.rb', line 99

def locales
  map(&:locale)
end

#present?(locale, options = {}) ⇒ TrueClass, FalseClass

Returns Whether translation is present for locale.

Parameters:

  • locale (Symbol)

    Locale to read

Returns:

  • (TrueClass, FalseClass)

    Whether translation is present for locale



105
106
107
# File 'lib/mobility/backend.rb', line 105

def present?(locale, options = {})
  Util.present?(read(locale, options))
end