Convert Range step and include extension modules to class reopen

This commit is contained in:
Jeremy Kemper 2009-03-29 02:31:08 -07:00
parent fe34d10f0c
commit da8ade36b3
3 changed files with 40 additions and 58 deletions

@ -1,5 +1,4 @@
require 'active_support/core_ext/range/blockless_step'
require 'active_support/core_ext/range/conversions'
require 'active_support/core_ext/range/include_range'
require 'active_support/core_ext/range/overlaps'
require 'active_support/core_ext/util'
ActiveSupport.core_ext Range, %w(include_range blockless_step)

@ -1,32 +1,24 @@
module ActiveSupport #:nodoc:
module CoreExtensions #:nodoc:
module Range #:nodoc:
# Return an array when step is called without a block.
module BlocklessStep
def self.included(base) #:nodoc:
base.alias_method_chain :step, :blockless
end
class Range
if RUBY_VERSION < '1.9'
# Return an array when step is called without a block.
def step_with_blockless(value = 1, &block)
if block_given?
step_without_blockless(value, &block)
else
returning [] do |array|
array = []
step_without_blockless(value) { |step| array << step }
end
array
end
end
else
def step_with_blockless(value = 1, &block)
def step_with_blockless(value = 1, &block) #:nodoc:
if block_given?
step_without_blockless(value, &block)
step_without_blockless
else
step_without_blockless(value).to_a
end
end
end
end
end
end
alias_method_chain :step, :blockless
end

@ -1,12 +1,4 @@
module ActiveSupport #:nodoc:
module CoreExtensions #:nodoc:
module Range #:nodoc:
# Check if a Range includes another Range.
module IncludeRange
def self.included(base) #:nodoc:
base.alias_method_chain :include?, :range
end
class Range
# Extends the default Range#include? to support range comparisons.
# (1..5).include?(1..5) # => true
# (1..5).include?(2..3) # => true
@ -19,12 +11,11 @@ def include_with_range?(value)
if value.is_a?(::Range)
operator = exclude_end? ? :< : :<=
end_value = value.exclude_end? ? last.succ : last
include?(value.first) && (value.last <=> end_value).send(operator, 0)
include_without_range?(value.first) && (value.last <=> end_value).send(operator, 0)
else
include_without_range?(value)
end
end
end
end
end
alias_method_chain :include?, :range
end