module Decidim::Plans::OptionallyTranslatableAttributes
Public Instance Methods
before_validation()
click to toggle source
# File lib/decidim/plans/optionally_translatable_attributes.rb, line 59 def before_validation handle_multilingual_fields end
conditional_proc(condition)
click to toggle source
# File lib/decidim/plans/optionally_translatable_attributes.rb, line 46 def conditional_proc(condition) return proc { true } if condition.nil? if condition.is_a?(String) || condition.is_a?(Symbol) return proc { |record| record.send(condition) } end proc { |record| condition.call(record) } end
optionally_translatable_attribute(name, type, *options)
click to toggle source
# File lib/decidim/plans/optionally_translatable_attributes.rb, line 11 def optionally_translatable_attribute(name, type, *options) @translatable_attributes ||= [] @translatable_attributes << name translatable_attribute(name, type, *options) end
optionally_translatable_validate_presence(attribute, options = {})
click to toggle source
# File lib/decidim/plans/optionally_translatable_attributes.rb, line 17 def optionally_translatable_validate_presence(attribute, options = {}) if_conditional_proc = conditional_proc(options[:if]) unless_conditional_proc = conditional_proc(options[:unless]) multilingual_proc = proc { |record| record.component.settings.multilingual_answers? } multilingual_options = options.dup localized_options = options.dup multilingual_options[:if] = proc { |record| multilingual_proc.call(record) && if_conditional_proc.call(record) } localized_options[:unless] = proc { |record| multilingual_proc.call(record) && unless_conditional_proc.call(record) } multilingual_options[:translatable_presence] = true localized_options[:presence] = true localized_attribute = "#{attribute}_#{current_locale}".to_sym validates attribute, multilingual_options validates localized_attribute, localized_options end
translatable_attributes()
click to toggle source
# File lib/decidim/plans/optionally_translatable_attributes.rb, line 42 def translatable_attributes @translatable_attributes end
Private Instance Methods
handle_multilingual_fields()
click to toggle source
# File lib/decidim/plans/optionally_translatable_attributes.rb, line 69 def handle_multilingual_fields return if multilingual? self.class.translatable_attributes.each do |name| attr_src_name = "#{name}_#{current_locale}" value = public_send(attr_src_name) # Set the same value for all locales as given for the source locale available_locales.each do |loc| attr_name = "#{name}_#{loc}" public_send("#{attr_name}=", value) end end end
multilingual?()
click to toggle source
# File lib/decidim/plans/optionally_translatable_attributes.rb, line 65 def multilingual? component.settings.multilingual_answers? end