Class: Rivulet::WindowBuilder
- Inherits:
-
Object
- Object
- Rivulet::WindowBuilder
- Defined in:
- lib/rivulet/window_builder.rb
Instance Method Summary collapse
- #count ⇒ Object
- #each_window(&block) ⇒ Object
- #first(k = nil, &block) ⇒ Object
-
#initialize(stream:, mode:, size: nil, rule: nil, step: 1) ⇒ WindowBuilder
constructor
A new instance of WindowBuilder.
- #max_by(k = nil, &block) ⇒ Object
- #min_by(k = nil, &block) ⇒ Object
- #take(k, &block) ⇒ Object
Constructor Details
#initialize(stream:, mode:, size: nil, rule: nil, step: 1) ⇒ WindowBuilder
Returns a new instance of WindowBuilder.
5 6 7 8 9 10 11 |
# File 'lib/rivulet/window_builder.rb', line 5 def initialize(stream:, mode:, size: nil, rule: nil, step: 1) @stream = stream @mode = mode @size = size @rule = rule @step = step end |
Instance Method Details
#count ⇒ Object
81 82 83 84 85 |
# File 'lib/rivulet/window_builder.rb', line 81 def count n = 0 iterate { |_| n += 1 } n end |
#each_window(&block) ⇒ Object
13 14 15 16 17 18 19 20 |
# File 'lib/rivulet/window_builder.rb', line 13 def each_window(&block) results = [] iterate do |window| value = block.call(window) results << value if value end results end |
#first(k = nil, &block) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/rivulet/window_builder.rb', line 60 def first(k = nil, &block) if k results = [] iterate do |window| value = block ? block.call(window) : window results << value if value break if results.size == k end results else result = nil iterate do |window| result = block ? block.call(window) : window break if result end result end end |
#max_by(k = nil, &block) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/rivulet/window_builder.rb', line 22 def max_by(k = nil, &block) if k top = [] iterate do |window| score = block.call(window) top << score top.sort!.shift if top.size > k end top.sort.reverse else best = nil iterate do |window| score = block.call(window) best = score if best.nil? || score > best end best end end |
#min_by(k = nil, &block) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/rivulet/window_builder.rb', line 41 def min_by(k = nil, &block) if k top = [] iterate do |window| score = block.call(window) top << score top.sort!.pop if top.size > k end top.sort else best = nil iterate do |window| score = block.call(window) best = score if best.nil? || score < best end best end end |
#take(k, &block) ⇒ Object
79 |
# File 'lib/rivulet/window_builder.rb', line 79 def take(k, &block) = first(k, &block) |