Sha256: 65fe1e5377d43380a077b4cd72b5743dc8db51d119753fc9184356a1522467ff

Contents?: true

Size: 1.32 KB

Versions: 6

Compression:

Stored size: 1.32 KB

Contents

# frozen_string_literal: true

Range.class_eval do
  unless method_defined?(:*)
    # Allows multiplying a range. This will create a new range due to range objects being immutable.
    #
    # @note Make sure to assign this to a new var or do inline replacement `*=`.
    #
    # @raise [RubyRailsExtensions::Errors::NonNumericError]
    #
    # @param other [Numeric, Range<Numeric>]
    #
    # @return [Range]
    #
    def *(other)
      unless self.begin.is_a?(Numeric)
        raise(
          RubyRailsExtensions::Errors::NonNumericError,
          "Wrong range type (given #{self.begin.class}, expected Numeric)"
        )
      end

      new_begin, new_end =
        if other.is_a?(Range)
          unless other.begin.is_a?(Numeric)
            raise(
              RubyRailsExtensions::Errors::NonNumericError,
              "Wrong range type (given #{other.begin.class}, expected Numeric)"
            )
          end

          [self.begin * other.begin, self.end * other.end]
        else
          unless other.is_a?(Numeric)
            raise(
              RubyRailsExtensions::Errors::NonNumericError,
              "Wrong type (given #{other.class}, expected Numeric)"
            )
          end

          [self.begin * other, self.end * other]
        end

      Range.new(new_begin, new_end, exclude_end?)
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
ruby-rails-extensions-1.1.1 lib/ruby-rails-extensions/extensions/range_multiply.rb
ruby-rails-extensions-1.1.1.pre.rc.1 lib/ruby-rails-extensions/extensions/range_multiply.rb
ruby-rails-extensions-0.2.0 lib/ruby-rails-extensions/extensions/range_multiply.rb
ruby-rails-extensions-0.2.0.pre.rc.1 lib/ruby-rails-extensions/extensions/range_multiply.rb
ruby-rails-extensions-1.1.0 lib/ruby-rails-extensions/extensions/range_multiply.rb
ruby-rails-extensions-1.1.0.pre.rc.1 lib/ruby-rails-extensions/extensions/range_multiply.rb