Module: Trith::Core::Sequence::Operators

Defined in:
lib/trith/core/sequence.rb

Overview

Sequence operators.

Instance Method Summary (collapse)

Instance Method Details

- (Enumerable) concat(seq1, seq2)

Parameters:

  • (#concat, #each) seq1
  • (#each) seq2

Returns:

  • (Enumerable)


342
343
344
345
346
347
348
349
350
351
# File 'lib/trith/core/sequence.rb', line 342

def concat(seq1, seq2)
  case
    when seq1.respond_to?(:concat)
      seq1.dup.concat(seq2)
    when seq1.respond_to?(:each)
      seq1.each.to_a.concat(seq2.each.to_a) # TODO: optimize
    else
      raise Machine::InvalidOperandError.new(seq1, :concat)
  end
end

- (Enumerable) flatten(seq)

Parameters:

  • (#flatten, #each) seq

Returns:

  • (Enumerable)


374
375
376
377
378
379
380
381
382
383
384
385
386
387
# File 'lib/trith/core/sequence.rb', line 374

def flatten(seq)
  case seq
    when String then seq
    when Array  then seq.flatten
    else case
      when seq.respond_to?(:flatten)
        seq.flatten
      when seq.respond_to?(:each)
        seq.each.to_a.flatten # TODO: optimize
      else
        raise Machine::InvalidOperandError.new(seq, :flatten)
    end
  end
end

- (Enumerable) reverse(seq)

Parameters:

  • (#reverse, #each) seq

Returns:

  • (Enumerable)


356
357
358
359
360
361
362
363
364
365
366
367
368
369
# File 'lib/trith/core/sequence.rb', line 356

def reverse(seq)
  case seq
    when String then seq.reverse
    when Array  then seq.reverse
    else case
      when seq.respond_to?(:reverse)
        seq.reverse
      when seq.respond_to?(:each)
        seq.each.to_a.reverse # TODO: optimize
      else
        raise Machine::InvalidOperandError.new(seq, :reverse)
    end
  end
end