lib/validators.rb in jt-rails-address-1.2.0 vs lib/validators.rb in jt-rails-address-1.3.0

- old
+ new

@@ -1,14 +1,32 @@ module JT::Rails::Address::Validators extend ActiveSupport::Concern + included do |base| + + before_validation :check_if_reset_address + + base.class_eval do + + # jt_rails_address_fields is shared only by a class and its subclass + def self.jt_rails_address_fields + class_variable_set(:@@jt_rails_address_fields, []) if !class_variable_defined?(:@@jt_rails_address_fields) + class_variable_get(:@@jt_rails_address_fields) + end + + end + end + class_methods do def has_address(prefix, options = {}) attr_accessor prefix + attr_accessor "#{prefix.to_s}_destroy" + jt_rails_address_fields << prefix.to_sym + define_singleton_method("#{prefix}_fields") do fields = [] for field in JT::Rails::Address.fields fields << "#{prefix}_#{field}".to_sym end @@ -16,14 +34,25 @@ end end end - def load_address(prefix, data) - # Reset fields + def check_if_reset_address + for address_field in self.class.jt_rails_address_fields + if [1, true].include?(self.send("#{address_field}_destroy")) + reset_address(address_field) + end + end + end + + def reset_address(prefix) for field in JT::Rails::Address.fields self["#{prefix}_#{field}"] = nil end + end + + def load_address(prefix, data) + reset_address(prefix) for key, value in data self["#{prefix}_#{key}"] = value end end