Sha256: d7455a68d9181bacb59a27be75fefbad7690d24e56b00d7d47d852ee728fbbf1

Contents?: true

Size: 1.19 KB

Versions: 2

Compression:

Stored size: 1.19 KB

Contents

module Traco
  module ClassMethods
    def locales_for_attribute(attribute)
      re = /\A#{attribute}_([a-z]{2})\z/

      column_names.
        grep(re) { $1.to_sym }.
        sort_by(&locale_sort_value)
    end

    def locale_columns(attribute)
      locales_for_attribute(attribute).map { |locale|
        :"#{attribute}_#{locale}"
      }
    end

    def human_attribute_name(attribute, options = {})
      default = super(attribute, options.merge(:default => ""))
      if default.blank? && attribute.to_s.match(/\A(\w+)_([a-z]{2})\z/)
        column, locale = $1, $2.to_sym
        if translates?(column)
          return "#{super(column, options)} (#{locale_name(locale)})"
        end
      end
      super
    end

    private

    def locale_sort_value
      lambda { |locale|
        if locale == I18n.default_locale
          # Sort the default locale first.
          "0"
        else
          # Sort the rest alphabetically.
          locale.to_s
        end
      }
    end

    def translates?(attribute)
      translatable_attributes.include?(attribute.to_sym)
    end

    def locale_name(locale)
      I18n.t(locale, :scope => :"i18n.languages", :default => locale.to_s.upcase)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
traco-1.0.0 lib/traco/class_methods.rb
traco-0.4.2 lib/traco/class_methods.rb