Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: opal/opal
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: e527d846568d
Choose a base ref
...
head repository: opal/opal
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 1bd3d5a17a87
Choose a head ref
  • 3 commits
  • 4 files changed
  • 1 contributor

Commits on Oct 27, 2013

  1. Cleanup Enumerable#sort_by

    meh committed Oct 27, 2013
    Copy the full SHA
    e88e944 View commit details
  2. Copy the full SHA
    2feba15 View commit details
  3. Implement Enumerable#one?

    meh committed Oct 27, 2013
    Copy the full SHA
    1bd3d5a View commit details
Showing with 71 additions and 30 deletions.
  1. +60 −30 corelib/enumerable.rb
  2. +5 −0 spec/opal/enumerable/none_break_spec.rb
  3. +5 −0 spec/opal/enumerable/one_break_spec.rb
  4. +1 −0 spec/rubyspecs
90 changes: 60 additions & 30 deletions corelib/enumerable.rb
Original file line number Diff line number Diff line change
@@ -648,49 +648,79 @@ def min(&block)

def none?(&block)
%x{
var result = true,
proc;
var result = true;
if (block !== nil) {
proc = function(obj) {
var value,
args = $slice.call(arguments);
self.$each._p = function() {
var value = $opal.$yieldX(block, arguments);
if ((value = block.apply(#{self}, args)) === $breaker) {
return $breaker.$v;
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
if (value !== false && value !== nil) {
result = false;
$breaker.$v = nil;
if (#{Opal.truthy?(`value`)}) {
result = false;
return $breaker;
}
}
}
else {
proc = function(obj) {
if (arguments.length == 1 && (obj !== false && obj !== nil)) {
result = false;
$breaker.$v = nil;
self.$each._p = function() {
var value = #{Opal.destructure(`arguments`)};
if (#{Opal.truthy?(`value`)}) {
result = false;
return $breaker;
}
else {
for (var i = 0, length = arguments.length; i < length; i++) {
if (arguments[i] !== false && arguments[i] !== nil) {
result = false;
$breaker.$v = nil;
};
}
self.$each();
return result;
}
end

def one?(&block)
%x{
var result = false;
if (block !== nil) {
self.$each._p = function() {
var value = $opal.$yieldX(block, arguments);
return $breaker;
}
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
if (#{Opal.truthy?(`value`)}) {
if (result === true) {
result = false;
return $breaker;
}
result = true;
}
};
}
}
else {
self.$each._p = function() {
var value = #{Opal.destructure(`arguments`)};
#{self}.$each._p = proc;
#{self}.$each();
if (#{Opal.truthy?(`value`)}) {
if (result === true) {
result = false;
return $breaker;
}
result = true;
}
}
}
self.$each();
return result;
}
@@ -699,11 +729,11 @@ def none?(&block)
def sort_by(&block)
return enum_for :sort_by unless block_given?

map { |*f|
# FIXME: this should probably belongs to somewhere more
f = `#{f}.length === 1 ? #{f}[0] : #{f}`
`[#{block.call(f)}, #{f}]`
}.sort.map { |f| `#{f}[1]` }
map {
arg = Opal.destructure(`arguments`)

[block.call(arg), arg]
}.sort.map { |arg| `arg[1]` }
end

alias select find_all
5 changes: 5 additions & 0 deletions spec/opal/enumerable/none_break_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
describe "Enumerable#none?" do
it "breaks out with the proper value" do
[1, 2, 3].none? { break 42 }.should == 42
end
end
5 changes: 5 additions & 0 deletions spec/opal/enumerable/one_break_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
describe "Enumerable#one?" do
it "breaks out with the proper value" do
[1, 2, 3].one? { break 42 }.should == 42
end
end
1 change: 1 addition & 0 deletions spec/rubyspecs
Original file line number Diff line number Diff line change
@@ -122,6 +122,7 @@ core/enumerable/max_spec
core/enumerable/member_spec
core/enumerable/min_spec
core/enumerable/none_spec
core/enumerable/one_spec
core/enumerable/reduce_spec
core/enumerable/select_spec
core/enumerable/sort_by_spec