0

I tried to path the ActiveRecord model validation -

require_dependency "issue"
module IssuePath
  def self.included(base) # :nodoc:
    base.send(:include, InstanceMethods)

    base.class_eval do
      alias_method :strict_validate_issue, :validate_issue
      alias_method :validate_issue, :unstrict_validate_issue 
    end
  end

  module ClassMethods   
  end

  module InstanceMethods
    def strict_validate_issue
      if !due_date
          errors.add :due_date, :due_date_empty
      end
      unstrict_validate_issue
    end
  end
end

Issue.send :include, IssuePath

But it threw an error NameError: undefined method unstrict_validate_issue' for classIssue (call 'Issue.connection' to establish a connection)'.

1 Answers1

0

Instead of strict_validate_issue define unstrict_validate_issue method and call strict_validate_issue inside it.

require_dependency "issue"
module IssuePath
  def self.included(base) # :nodoc:
    base.send(:include, InstanceMethods)

    base.class_eval do
      alias_method :strict_validate_issue, :validate_issue
      alias_method :validate_issue, :unstrict_validate_issue
    end
  end

  module ClassMethods
  end

  module InstanceMethods
    def unstrict_validate_issue
      if due_date.blank?
        errors.add :due_date, :due_date_empty
      end
      strict_validate_issue
    end
  end
end

Issue.send :include, IssuePath

You can even make it shorter:

require_dependency "issue"
module IssuePath
  extend ActiveSupport::Concern

  included do
    alias_method :strict_validate_issue, :validate_issue
    alias_method :validate_issue, :unstrict_validate_issue
  end

  def unstrict_validate_issue
    if due_date.blank?
      errors.add :due_date, :due_date_empty
    end
    strict_validate_issue
  end
end

Issue.send :include, IssuePath
Yakov
  • 3,033
  • 1
  • 11
  • 22