Sha256: 278ce87e658984b824608143d2dafa696377837837e2cd96b1de8c0bfd9af376
Contents?: true
Size: 1.6 KB
Versions: 1
Compression:
Stored size: 1.6 KB
Contents
module MobilityUniqueness extend ActiveSupport::Concern class_methods do def validates_uniqueness_of_translated(*args) return unless defined?(Mobility) opitons = args.extract_options! before_validation do message = opitons[:message] || 'violates uniqueness constraint' query_classes = args.group_by { |attr| mobility_query_class(attr) } query_classes.each do |query_class, attributes| values = Mobility.available_locales.map do |locale| attributes.map { |attr| send(:"#{attr}_#{locale}") } end.flatten count_by_group = query_class.where(locale: Mobility.available_locales) .where(translatable_type: self.class.to_s) .where(key: attributes, value: values) .where.not(translatable_id: id) .group(:key, :locale, :value) .count count_by_group.each do |(key, locale, _value), count| errors.add(:"#{key}_#{locale}", message) unless count.zero? end end end end end def mobility_query_class(attr) attr_type = self.class.attribute_types[attr&.to_s].type translations = { string: Mobility::Backends::ActiveRecord::KeyValue::StringTranslation, text: Mobility::Backends::ActiveRecord::KeyValue::TextTranslation } translations[attr_type] end end # Automatically include the in all ActiveRecord models ActiveSupport.on_load(:active_record) do include MobilityUniqueness end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
mobility_uniqueness-0.1.2 | lib/mobility_uniqueness.rb |