spec/lib/shamu/services/lazy_transform_spec.rb in shamu-0.0.9 vs spec/lib/shamu/services/lazy_transform_spec.rb in shamu-0.0.11

- old
+ new

@@ -1,96 +1,105 @@ require "spec_helper" describe Shamu::Services::LazyTransform do let( :source ) { [ 1, 2, 3 ] } + def transformer( &block ) + ->( records ) { + records.map do |r| + yield + r + end + } + end + it "short-circuits count" do expect do |block| - transformed = Shamu::Services::LazyTransform.new( source, &block ) + transformed = Shamu::Services::LazyTransform.new( source, &transformer( &block ) ) expect( transformed.count ).to eq source.count end.not_to yield_control end it "delegates when count has an arg" do expect do |block| - transformed = Shamu::Services::LazyTransform.new( source, &block ) + transformed = Shamu::Services::LazyTransform.new( source, &transformer( &block ) ) expect( transformed.count( 1000 ) ).to eq 0 end.to yield_control end it "delegates when count has a block given" do expect do |block| - transformed = Shamu::Services::LazyTransform.new( source, &block ) + transformed = Shamu::Services::LazyTransform.new( source, &transformer( &block ) ) expect( transformed.count { true } ).to eq source.count end.to yield_control end it "short-circuits first" do expect do |block| - transformed = Shamu::Services::LazyTransform.new( source, &block ) + transformed = Shamu::Services::LazyTransform.new( source, &transformer( &block ) ) transformed.first end.to yield_control.once end it "doesn't short-circuit first(n)" do expect do |block| - transformed = Shamu::Services::LazyTransform.new( source, &block ) + transformed = Shamu::Services::LazyTransform.new( source, &transformer( &block ) ) transformed.first( 2 ) end.to yield_control.exactly(3) end it "short-circuits empty?" do expect do |block| - transformed = Shamu::Services::LazyTransform.new( source, &block ) + transformed = Shamu::Services::LazyTransform.new( source, &transformer( &block ) ) expect( transformed ).not_to be_empty end.not_to yield_control end it "short-circuits present?" do expect do |block| - transformed = Shamu::Services::LazyTransform.new( source, &block ) + transformed = Shamu::Services::LazyTransform.new( source, &transformer( &block ) ) transformed.present? end.not_to yield_control end it "transforms when enumerated" do expect do |block| - transformed = Shamu::Services::LazyTransform.new( source, &block ) + transformed = Shamu::Services::LazyTransform.new( source, &transformer( &block ) ) transformed.to_a end.to yield_control.exactly( 3 ) end it "yields transformed values" do - transformed = Shamu::Services::LazyTransform.new( source ) { |v| v * v } + transformed = Shamu::Services::LazyTransform.new( source ) { |vs| vs.map { |v| v * v } } expect( transformed.to_a ).to eq [ 1, 4, 9 ] end it "short-circuits drop" do expect do |block| - transformed = Shamu::Services::LazyTransform.new( source, &block ) + transformed = Shamu::Services::LazyTransform.new( source, &transformer( &block ) ) transformed.drop( 2 ).to_a end.to yield_control.exactly( 1 ) end it "uses existing transformed on drop if avaialable" do expect do |block| - transformed = Shamu::Services::LazyTransform.new( source, &block ) + transformed = Shamu::Services::LazyTransform.new( source, &transformer( &block ) ) transformed.to_a transformed.drop( 2 ).to_a end.to yield_control.exactly( 3 ) end it "short-circuits take" do expect do |block| - transformed = Shamu::Services::LazyTransform.new( source, &block ) + transformed = Shamu::Services::LazyTransform.new( source, &transformer( &block ) ) transformed.take( 2 ).to_a end.to yield_control.exactly( 2 ) end it "users existing transformed on take if avaialable" do expect do |block| - transformed = Shamu::Services::LazyTransform.new( source, &block ) + transformed = Shamu::Services::LazyTransform.new( source, &transformer( &block ) ) transformed.to_a transformed.take( 2 ).to_a end.to yield_control.exactly( 3 ) end -end \ No newline at end of file +end