Sha256: 4c39981d09a67b332ba01004804cd6e777fa9fb6ee0559b1afb60df82b3b9af1

Contents?: true

Size: 1.67 KB

Versions: 13

Compression:

Stored size: 1.67 KB

Contents

class Range
  include Enumerable

  %x{
    Range.prototype._isRange = true;

    Opal.range = function(beg, end, exc) {
      var range         = new Range;
          range.begin   = beg;
          range.end     = end;
          range.exclude = exc;

      return range;
    };
  }

  attr_reader :begin
  attr_reader :end

  def initialize(min, max, exclude = false)
    @begin   = min
    @end     = max
    @exclude = exclude
  end

  def ==(other)
    %x{
      if (!other._isRange) {
        return false;
      }

      return #{self}.exclude === other.exclude && #{self}.begin == other.begin && #{self}.end == other.end;
    }
  end

  # FIXME: currently hardcoded to assume range holds numerics
  def ===(obj)
    `return obj >= #{self}.begin && (#{self}.exclude ? obj < #{self}.end : obj <= #{self}.end)`
  end

  def cover?(value)
    `#{self}.begin` <= value && value <= (exclude_end? ? `#{self}.end` - 1 : `#{self}.end`)
  end

  def each(&block)
    current = min

    while current != max
      yield current

      current = current.succ
    end

    yield current unless exclude_end?

    self
  end

  def eql?(other)
    return false unless Range === other

    exclude_end? == other.exclude_end? && `#{self}.begin`.eql?(other.begin) && `#{self}.end`.eql?(other.end)
  end

  def exclude_end?
    `#{self}.exclude`
  end

  # FIXME: currently hardcoded to assume range holds numerics
  def include?(val)
    `return obj >= #{self}.begin && obj <= #{self}.end`
  end

  alias max end

  alias min begin

  alias member? include?

  def step(n = 1)
    raise NotImplementedError
  end

  def to_s
    `#{self}.begin + (#{self}.exclude ? '...' : '..') + #{self}.end`
  end

  alias inspect to_s
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
opal-0.3.44 opal/opal/range.rb
opal-0.3.43 opal/opal/range.rb
opal-0.3.42 opal/opal/range.rb
opal-0.3.41 opal/opal/range.rb
opal-0.3.40 lib/assets/javascripts/opal/range.rb
opal-0.3.39 lib/assets/javascripts/opal/range.rb
opal-0.3.38 lib/assets/javascripts/opal/range.rb
opal-0.3.37 lib/assets/javascripts/opal/range.rb
opal-0.3.36 lib/assets/javascripts/opal/range.rb
opal-0.3.35 lib/assets/javascripts/opal/range.rb
opal-0.3.34 lib/assets/javascripts/opal/range.rb
opal-0.3.33 core/range.rb
opal-0.3.32 core/range.rb