Finding expiring/expired documents This code is to find expiring/expired documents. It was included in one of the models, say Document. 

Is this good approach of using constant variables which holds the some data and used within this mixin only? Is there any better approach I could use instead the constants?

require 'active_support/concern'

module Expirable
  extend ActiveSupport::Concern

  BEFORE_EXPIRY_DURATION =
    eval(APP_CONFIG.timings.notification_of_expired.before_expiry)

  EXPIRING_DURATION =
    (BEFORE_EXPIRY_DURATION.ago..Date.today)

  included do
    scope :expirables,
      -&gt; { where("expiry_date IS NOT NULL") }
    scope :ready_to_expire,
      -&gt; { expirables.where(expiry_date: EXPIRING_DURATION) }
    scope :expired,
      -&gt; { expirables.where("DATE(expiry_date) &lt; ?", Date.today) }
  end

  module ClassMethods
  end

  def ready_to_expire?
    expiry_date.present? &amp;&amp; !expired? &amp;&amp; expiry_date.to_date.in?(EXPIRING_DURATION)
  end

  def expired?
    expiry_date.present? &amp;&amp; (expiry_date.to_date &lt; Date.today)
  end

end
Looks good except for your use of constants.

Constant variables is probably the biggest oxymoron I have ever heard. The whole point of a constant is that it does not change - the very name variable implies that it is prone to change.  

A proper use of a constants is to hold immutable data where the value is clearly understandable by just reading the code:

# A very contrived example
class Week
  DAYS = [:monday, :tuesday, :wednesday, :thursday, 
          :friday, :saturday, :sunday]
end


The key point here is that if the value is not known at before the class is evaluated it should be treated as an extreme code smell.

Here is  better but long example of how constants should be properly used: ActiveSupport::Timezone on Github.