module Tolken::Translates
Public Instance Methods
translates(field_name, options = {})
click to toggle source
# File lib/tolken/translates.rb, line 5 def translates(field_name, options = {}) define_getter(field_name) serialize(field_name, HashSerializer) if options[:presence] validation_names = I18n.available_locales.map { |locale| "#{field_name}_#{locale}" } readers = store_accessor(field_name, *validation_names) private(*(readers + readers.map { |name| "#{name}=" })) define_validator(field_name) if options[:presence] end end
Private Instance Methods
define_getter(field_name)
click to toggle source
# File lib/tolken/translates.rb, line 20 def define_getter(field_name) define_method(field_name) do |locale = nil| return self[field_name] unless locale begin self[field_name].fetch(locale.to_s) rescue IndexError raise ArgumentError, "Invalid locale #{locale}" unless I18n.available_locales.include?(locale.to_sym) nil end end end
define_validator(field)
click to toggle source
# File lib/tolken/translates.rb, line 34 def define_validator(field) validate( proc do invalid = I18n.available_locales.map do |locale| errors.add(:"#{field}_#{locale}", :blank) if self[field][locale.to_s].blank? end errors.add(field) if invalid.compact.present? end ) end