Class: Enumerator.self::Lazy
- Defined in:
- opal/opal/corelib/enumerator/lazy.rb
Class Method Summary collapse
Instance Method Summary collapse
- #collect(&block) ⇒ Object (also: #map)
- #collect_concat(&block) ⇒ Object (also: #flat_map)
- #drop(n) ⇒ Object
- #drop_while(&block) ⇒ Object
- #enum_for(method = :each, *args, &block) ⇒ Object (also: #to_enum)
- #find_all(&block) ⇒ Object (also: #filter, #select)
- #grep(pattern, &block) ⇒ Object
-
#initialize(object, size = nil, &block) ⇒ Lazy
constructor
A new instance of Lazy.
- #inspect ⇒ Object
- #lazy ⇒ Object
- #reject(&block) ⇒ Object
- #take(n) ⇒ Object
- #take_while(&block) ⇒ Object
Constructor Details
#initialize(object, size = nil, &block) ⇒ Lazy
Returns a new instance of Lazy.
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'opal/opal/corelib/enumerator/lazy.rb', line 13 def initialize(object, size = nil, &block) `$deny_frozen_access(self)` unless block_given? ::Kernel.raise ::ArgumentError, 'tried to call lazy new without a block' end @enumerator = object super size do |yielder, *each_args| object.each(*each_args) do |*args| %x{ args.unshift(#{yielder}); $yieldX(block, args); } end rescue StopLazyError nil end end |
Class Method Details
.for(object) ⇒ Object
7 8 9 10 11 |
# File 'opal/opal/corelib/enumerator/lazy.rb', line 7 def self.for(object, *) lazy = super `lazy.enumerator = object` lazy end |
Instance Method Details
#collect(&block) ⇒ Object Also known as: map
39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'opal/opal/corelib/enumerator/lazy.rb', line 39 def collect(&block) unless block ::Kernel.raise ::ArgumentError, 'tried to call lazy map without a block' end Lazy.new(self, enumerator_size) do |enum, *args| %x{ var value = $yieldX(block, args); #{enum.yield `value`}; } end end |
#collect_concat(&block) ⇒ Object Also known as: flat_map
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'opal/opal/corelib/enumerator/lazy.rb', line 53 def collect_concat(&block) unless block ::Kernel.raise ::ArgumentError, 'tried to call lazy map without a block' end Lazy.new(self, nil) do |enum, *args| %x{ var value = $yieldX(block, args); if (#{`value`.respond_to? :force} && #{`value`.respond_to? :each}) { #{`value`.each { |v| enum.yield v }} } else { var array = #{::Opal.try_convert `value`, ::Array, :to_ary}; if (array === nil) { #{enum.yield `value`}; } else { #{`value`.each { |v| enum.yield v }}; } } } end end |
#drop(n) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'opal/opal/corelib/enumerator/lazy.rb', line 79 def drop(n) n = `$coerce_to(#{n}, #{::Integer}, 'to_int')` if n < 0 ::Kernel.raise ::ArgumentError, 'attempt to drop negative size' end current_size = enumerator_size set_size = if ::Integer === current_size n < current_size ? n : current_size else current_size end dropped = 0 Lazy.new(self, set_size) do |enum, *args| if dropped < n dropped += 1 else enum.yield(*args) end end end |
#drop_while(&block) ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'opal/opal/corelib/enumerator/lazy.rb', line 103 def drop_while(&block) unless block ::Kernel.raise ::ArgumentError, 'tried to call lazy drop_while without a block' end succeeding = true Lazy.new(self, nil) do |enum, *args| if succeeding %x{ var value = $yieldX(block, args); if (!$truthy(value)) { succeeding = false; #{enum.yield(*args)}; } } else enum.yield(*args) end end end |
#enum_for(method = :each, *args, &block) ⇒ Object Also known as: to_enum
126 127 128 |
# File 'opal/opal/corelib/enumerator/lazy.rb', line 126 def enum_for(method = :each, *args, &block) self.class.for(self, method, *args, &block) end |
#find_all(&block) ⇒ Object Also known as: filter, select
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'opal/opal/corelib/enumerator/lazy.rb', line 130 def find_all(&block) unless block ::Kernel.raise ::ArgumentError, 'tried to call lazy select without a block' end Lazy.new(self, nil) do |enum, *args| %x{ var value = $yieldX(block, args); if ($truthy(value)) { #{enum.yield(*args)}; } } end end |
#grep(pattern, &block) ⇒ Object
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
# File 'opal/opal/corelib/enumerator/lazy.rb', line 146 def grep(pattern, &block) if block Lazy.new(self, nil) do |enum, *args| %x{ var param = #{::Opal.destructure(args)}, value = #{pattern === `param`}; if ($truthy(value)) { value = $yield1(block, param); #{enum.yield `$yield1(block, param)`}; } } end else Lazy.new(self, nil) do |enum, *args| %x{ var param = #{::Opal.destructure(args)}, value = #{pattern === `param`}; if ($truthy(value)) { #{enum.yield `param`}; } } end end end |
#inspect ⇒ Object
234 235 236 |
# File 'opal/opal/corelib/enumerator/lazy.rb', line 234 def inspect "#<#{self.class}: #{@enumerator.inspect}>" end |
#lazy ⇒ Object
35 36 37 |
# File 'opal/opal/corelib/enumerator/lazy.rb', line 35 def lazy self end |
#reject(&block) ⇒ Object
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'opal/opal/corelib/enumerator/lazy.rb', line 174 def reject(&block) unless block ::Kernel.raise ::ArgumentError, 'tried to call lazy reject without a block' end Lazy.new(self, nil) do |enum, *args| %x{ var value = $yieldX(block, args); if (!$truthy(value)) { #{enum.yield(*args)}; } } end end |
#take(n) ⇒ Object
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
# File 'opal/opal/corelib/enumerator/lazy.rb', line 190 def take(n) n = `$coerce_to(#{n}, #{::Integer}, 'to_int')` if n < 0 ::Kernel.raise ::ArgumentError, 'attempt to take negative size' end current_size = enumerator_size set_size = if ::Integer === current_size n < current_size ? n : current_size else current_size end taken = 0 Lazy.new(self, set_size) do |enum, *args| if taken < n enum.yield(*args) taken += 1 else ::Kernel.raise StopLazyError end end end |
#take_while(&block) ⇒ Object
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 |
# File 'opal/opal/corelib/enumerator/lazy.rb', line 215 def take_while(&block) unless block ::Kernel.raise ::ArgumentError, 'tried to call lazy take_while without a block' end Lazy.new(self, nil) do |enum, *args| %x{ var value = $yieldX(block, args); if ($truthy(value)) { #{enum.yield(*args)}; } else { #{::Kernel.raise StopLazyError}; } } end end |