module HasContactNumber::ModelMethods::ClassMethods

Public Instance Methods

contact_number_attributes(*columns) click to toggle source
# File lib/has_contact_number/model_methods.rb, line 7
def contact_number_attributes(*columns)
  columns.each do |column|

    define_methods_for(column)

  end
end
define_methods_for(column) click to toggle source
# File lib/has_contact_number/model_methods.rb, line 15
    def define_methods_for(column)
      class_eval <<-METHODS
        attr_accessor :#{column}_isd_code, :#{column}_without_isd_code

        def #{column}_isd_code
          @#{column}_isd_code ||= #{column} && #{column}[0..3]
        end

        def #{column}_isd_code=(val)
          @#{column}_isd_code = val
          self.#{column} = "\#{val}\#{#{column}_without_isd_code}"
        end

        def #{column}_without_isd_code
          @#{column}_without_isd_code ||= #{column} && #{column}[4..-1]
        end

        def #{column}_without_isd_code=(val)
          @#{column}_without_isd_code = val
          self.#{column} = "\#{#{column}_isd_code}\#{val}"
        end

        validates :#{column}_isd_code, presence: true, if: proc { |model| model.#{column}_without_isd_code.present? }
        validates :#{column}_without_isd_code, presence: true, if: proc { |model| model.#{column}_isd_code.present? }
        validates :#{column}, phony_plausible: true, if: proc { |model|
          model.#{column}_isd_code.present? && model.#{column}_without_isd_code.present?
        }
      METHODS
    end