From fff7e5928958e05b007db215795cb38f9565d6bc Mon Sep 17 00:00:00 2001
From: Ivan Lan <lanyifan@tallty.com>
Date: Sat, 21 Nov 2020 12:45:57 +0800
Subject: [PATCH] Add excel pagination

---
 lib/tallty_import_export/excel.rb      | 20 ++++++++++++++++++++
 lib/tallty_import_export/import.rb     |  6 +++++-
 lib/tallty_import_export/importable.rb |  4 ++++
 spec/excel_spec.rb                     |  8 ++++++++
 4 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/lib/tallty_import_export/excel.rb b/lib/tallty_import_export/excel.rb
index bfdbda8..46eff6d 100644
--- a/lib/tallty_import_export/excel.rb
+++ b/lib/tallty_import_export/excel.rb
@@ -46,6 +46,10 @@ module TalltyImportExport
       cache.all
     end
 
+    def records_pagination page: 1, per_page: 15
+      Pagination.new(rows, page: page, per_page: per_page)
+    end
+
     class Rows < Array
       # excel_hash { key => excel name }
       def each_with_excel_hash excel_hash
@@ -59,5 +63,21 @@ module TalltyImportExport
         end
       end
     end
+
+    class Pagination < Array
+      attr_reader :current_page, :total_pages
+
+      def initialize ary, page: ,per_page:
+        @raw_ary = ary
+        @current_page = page
+        @total_pages = (@raw_ary.count / per_page.to_f).ceil
+        parsed_ary = @raw_ary[(page - 1) * per_page ... (page) * per_page]
+        super(parsed_ary)
+      end
+
+      def count
+        @raw_ary.count
+      end
+    end
   end
 end
diff --git a/lib/tallty_import_export/import.rb b/lib/tallty_import_export/import.rb
index 39e9902..d1b4710 100644
--- a/lib/tallty_import_export/import.rb
+++ b/lib/tallty_import_export/import.rb
@@ -28,7 +28,7 @@ module TalltyImportExport
         h
       end
 
-      if TalltyImportExport::Excel === xlsx_file
+      if tallty_excel === xlsx_file
         xlsx_file.rows.each_with_excel_hash(excel_hash) do |line_info|
           process_line_info(line_info, associations)
         end
@@ -44,6 +44,10 @@ module TalltyImportExport
       end
     end
 
+    def tallty_excel
+      TalltyImportExport::Excel
+    end
+
     def process_line_info line_info, associations
       # 转换处理导入的数据格式
       line_info = convert_data(line_info)
diff --git a/lib/tallty_import_export/importable.rb b/lib/tallty_import_export/importable.rb
index 266e88f..ea62744 100644
--- a/lib/tallty_import_export/importable.rb
+++ b/lib/tallty_import_export/importable.rb
@@ -16,6 +16,10 @@ module TalltyImportExport
       def import_xlsx *args
         import_instance.import_xlsx(*args)
       end
+
+      def import_excel_klass
+        import_instance.tallty_excel
+      end
     end
   end
 end
diff --git a/spec/excel_spec.rb b/spec/excel_spec.rb
index f19fbe1..c4078a0 100644
--- a/spec/excel_spec.rb
+++ b/spec/excel_spec.rb
@@ -6,4 +6,12 @@ RSpec.describe TalltyImportExport::Excel do
     expect(@excel.titles).to eq(["名称", "学号", "副学号", "meta字段1", "meta字段2", "累加值"])
     expect(@excel.rows[0]).to eq({"名称"=>1, "学号"=>20070101, "副学号"=>1, "meta字段1"=>"meta1", "meta字段2"=>"metaA", "累加值"=>1})
   end
+
+  it 'Excel::Pagination' do
+    pagination = TalltyImportExport::Excel::Pagination.new([1,2,3,4,5,6], page: 2, per_page: 2)
+    expect(pagination.count).to eq(6)
+    expect(pagination.current_page).to eq(2)
+    expect(pagination.total_pages).to eq(3)
+    expect(pagination).to eq([3, 4])
+  end
 end
--
libgit2 0.27.1