Module: HasLocalizationTable::ActiveRecord::Attributes
- Defined in:
- lib/has_localization_table/active_record/attributes.rb
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object
Define attribute getters and setters
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/has_localization_table/active_record/attributes.rb', line 28
def method_missing(name, *args, &block)
if name.to_s =~ /\A([a-z0-9_]+)(=)?\Z/i
if localized_attributes.include?($1.to_sym)
if $2.nil?
raise ArgumentError, "wrong number of arguments (#{args.size} for 0 or 1)" unless args.size.between?(0, 1)
options = args.
return read_localized_attribute($1, args.first, options) || read_localized_attribute($1, HasLocalizationTable.primary_locale, options)
else
raise ArgumentError, "wrong number of arguments (#{args.size} for 1)" unless args.size == 1
return write_localized_attribute($1, args.first)
end
end
end
super
end
|
Instance Method Details
#read_localized_attribute(attribute, locale = HasLocalizationTable.current_locale, options = {}) ⇒ Object
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# File 'lib/has_localization_table/active_record/attributes.rb', line 4
def read_localized_attribute(attribute, locale = HasLocalizationTable.current_locale, options = {})
locale ||= HasLocalizationTable.current_locale
attribute_cache[attribute.to_sym][locale.id] ||= begin
attr = localization_association.detect{ |a| a.send(HasLocalizationTable.locale_foreign_key) == locale.id }.send(attribute) rescue nil
if options.fetch(:fallback, HasLocalizationTable.config.fallback_locale) && !attr
fallback = options.fetch(:fallback, HasLocalizationTable.config.fallback_locale)
fallback = fallback.call(self) if fallback.respond_to?(:call)
attr = read_localized_attribute(attribute, fallback)
end
attr
end
end
|
#respond_to?(*args) ⇒ Boolean
47
48
49
50
|
# File 'lib/has_localization_table/active_record/attributes.rb', line 47
def respond_to?(*args)
return true if args.first.to_s =~ /\A([a-z0-9_]+)=?\Z/i and localized_attributes.include?($1.to_sym)
super
end
|
#write_localized_attribute(attribute, value, locale = HasLocalizationTable.current_locale) ⇒ Object
18
19
20
21
22
23
24
25
|
# File 'lib/has_localization_table/active_record/attributes.rb', line 18
def write_localized_attribute(attribute, value, locale = HasLocalizationTable.current_locale)
value = value.to_s
localization = localization_association.detect{ |a| a.send(HasLocalizationTable.locale_foreign_key) == locale.id } ||
localization_association.build(HasLocalizationTable.locale_foreign_key => locale.id)
localization.send(:"#{attribute}=", value)
attribute_cache[attribute.to_sym][locale.id] = value.blank? ? nil : value
end
|