From 0e2d7950637cbd9898b3b30e16b925e120408fe7 Mon Sep 17 00:00:00 2001 From: dsenarruzza Date: Mon, 14 Dec 2020 14:46:41 -0300 Subject: [PATCH] fix each method to unify iteration in pages or common iteration --- lib/rasti/db/query.rb | 22 +++++++++++++--------- spec/query_spec.rb | 30 +++++++++++++++++++++++------- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/lib/rasti/db/query.rb b/lib/rasti/db/query.rb index 6375f63..abd4c4e 100644 --- a/lib/rasti/db/query.rb +++ b/lib/rasti/db/query.rb @@ -70,15 +70,11 @@ def all end alias_method :to_a, :all - def each(&block) - all.each(&block) - end - - def each_in_pages(size:, &block) - dataset.each_page(size) do |page| - page.each do |row| - block.call build_model(row) - end + def each(size:nil, &block) + if size.nil? + all.each(&block) + else + each_batch size: size, &block end end @@ -171,6 +167,14 @@ def chainable(&block) build_query dataset: instance_eval(&block) end + def each_batch(size:, &block) + dataset.each_page(size) do |page| + page.each do |row| + block.call build_model(row) + end + end + end + def with_related(relation_name, primary_keys) ds = collection_class.relations[relation_name].apply_filter environment, dataset, primary_keys build_query dataset: ds diff --git a/spec/query_spec.rb b/spec/query_spec.rb index cb968cb..77a7168 100644 --- a/spec/query_spec.rb +++ b/spec/query_spec.rb @@ -174,15 +174,31 @@ users_query.detect(id: 3).must_equal User.new(id: 3, name: 'User 3') end - it 'Each in pages' do - user_pages = [] - users_query.each_in_pages(size: 2) do | page | - user_pages << page + describe 'Each' do + + it 'without size' do + users = [] + + users_query.each do | user | + users << user + end + users.size.must_equal 10 + users.each_with_index do | user, i | + user.must_equal User.new(id: i+1, name: "User #{i+1}") + end end - user_pages.size.must_equal 10 - user_pages.each_with_index do | user_page, i | - user_page.must_equal User.new(id: i+1, name: "User #{i+1}") + + it 'with size' do + users = [] + users_query.each(size: 2) do | user | + users << user + end + users.size.must_equal 10 + users.each_with_index do | user, i | + user.must_equal User.new(id: i+1, name: "User #{i+1}") + end end + end it 'Each page' do