File: active_support/core_ext/range/include_range.rb

Overview
Module Structure
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: ActiveSupport#1
  module: CoreExtensions#2
  module: Range#3
  module: IncludeRange#5
has properties
module method: included / 1 #6
method: include_with_range? / 1 #18

Code

   1  module ActiveSupport #:nodoc:
   2    module CoreExtensions #:nodoc:
   3      module Range #:nodoc:
   4        # Check if a Range includes another Range.
   5        module IncludeRange
   6          def self.included(base) #:nodoc:
   7            base.alias_method_chain :include?, :range
   8          end
   9 
  10          # Extends the default Range#include? to support range comparisons.
  11          #  (1..5).include?(1..5) # => true
  12          #  (1..5).include?(2..3) # => true
  13          #  (1..5).include?(2..6) # => false
  14          #
  15          # The native Range#include? behavior is untouched.
  16          #  ("a".."f").include?("c") # => true
  17          #  (5..9).include?(11) # => false
  18          def include_with_range?(value)
  19            if value.is_a?(::Range)
  20              operator = exclude_end? ? :< : :<=
  21              end_value = value.exclude_end? ? last.succ : last
  22              include?(value.first) && (value.last <=> end_value).send(operator, 0)
  23            else
  24              include_without_range?(value)
  25            end
  26          end
  27        end
  28      end
  29    end
  30  end