private static RangeLike rangeValues(ThreadContext context, IRubyObject range) { RangeLike like = new RangeLike(); if (range instanceof RubyRange) { RubyRange vrange = (RubyRange) range; like.begin = vrange.first(context); like.end = vrange.last(context); like.excl = vrange.exclude_end_p().isTrue(); } else { if (!range.respondsTo("begin") || !range.respondsTo("end") || !range.respondsTo("exclude_end?")) { return null; } like.begin = Helpers.invoke(context, range, "begin"); like.end = Helpers.invoke(context, range, "end"); like.excl = Helpers.invoke(context, range, "exlucde_end?").isTrue(); } like.range = Helpers.invoke(context, like.end, "-", like.begin); return like; }