table_structure 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ea80d58dcf58000e510c71d8eac9960ccb469256df07144c9e7845aec32512aa
4
- data.tar.gz: 2ae14c91013b1cd2b84e177f3fd7ebb6948775230f019c5ca3f3c3677b892b33
3
+ metadata.gz: 8bffa1aa49a812a2f4c1998aac9a297eeabe871a0c49376da090546da3a47a2d
4
+ data.tar.gz: 8bd2243648e9c2768339813f407e81cf2a94bd5e858349f9de0eaeb52acb6bfc
5
5
  SHA512:
6
- metadata.gz: 60a40d43594078d7d480e518a2e144d4fda1612ee07b3707e21646ea3f7785ac055de4e9b82509190fe22735c0fb887ee94b74a61536ec7adb102730a7fad28a
7
- data.tar.gz: 49d45d82eb9cac83caaac09d1494b8957ac56683cf21a3f11b7f01600b4e0a2174207043ee651f8ce3464f4b0474b5130962690a671977eb55a4efc9d15b892a
6
+ metadata.gz: 523e57f201c4aad11b038156676fa3c0c8835248366a7bb49929dc580265001f73c4a858049e972a782bf99d7f0a664407a6e258bdf94c616225b633c5d3461c
7
+ data.tar.gz: e3620fdee15c2bdb77d22224426d31c83349ba469f386681926d58963d5ee986b50b98b527cbc7d23e74edd8fba0891d8db2dd9ec7e256e7421cfdae890bf224
@@ -1,7 +1,15 @@
1
+ # 0.4.1
2
+ Changes:
3
+ - `TableStructure::Iterator`
4
+ - `TableStructure::Writer`
5
+ - `TableStructure::CSV::Writer`
6
+ - Add `header: { step: n }` option. Header rows are output at intervals of step number.
7
+ - e.g. `TableStructure::Iterator.new(schema, header: { step: 10 })`
8
+
1
9
  # 0.4.0
2
10
  Changes:
3
11
  - Remove deprecated methods, arguments and options.
4
- - It is recommended that you update to 0.3.23 first. if you get warnings or errors, fix them and then update to 0.4.0.
12
+ - It is recommended that you update to `0.3.23` first. If you get warnings or errors, fix them and then update to `0.4.0`.
5
13
 
6
14
  # 0.3.23
7
15
  Changes:
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- table_structure (0.4.0)
4
+ table_structure (0.4.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -30,7 +30,6 @@ module TableStructure
30
30
  require 'table_structure/table/column_converter'
31
31
  require 'table_structure/table/context_builder'
32
32
  require 'table_structure/table/row_builder'
33
- require 'table_structure/table/iterator'
34
33
  require 'table_structure/writer'
35
34
  require 'table_structure/csv/writer'
36
35
  require 'table_structure/iterator'
@@ -9,7 +9,7 @@ module TableStructure
9
9
  schema,
10
10
  bom: false,
11
11
  csv_options: {},
12
- header: { context: nil }
12
+ header: { context: nil, step: nil }
13
13
  )
14
14
  require 'csv'
15
15
 
@@ -2,16 +2,26 @@
2
2
 
3
3
  module TableStructure
4
4
  class Iterator
5
+ class HeaderOptions
6
+ attr_reader :enabled, :context, :step
7
+ alias enabled? enabled
8
+
9
+ def initialize(options)
10
+ @enabled = !!options
11
+ if options.is_a?(Hash)
12
+ @context = options[:context]
13
+ @step = options[:step]
14
+ end
15
+ end
16
+ end
17
+
5
18
  def initialize(
6
19
  schema,
7
- header: { context: nil },
20
+ header: { context: nil, step: nil },
8
21
  row_type: :array
9
22
  )
10
- @schema = schema
11
- @options = {
12
- header: header,
13
- row_type: row_type
14
- }
23
+ @table = Table.new(schema, row_type: row_type)
24
+ @header_options = HeaderOptions.new(header)
15
25
  end
16
26
 
17
27
  def iterate(items, &block)
@@ -19,22 +29,29 @@ module TableStructure
19
29
  raise ::TableStructure::Error, "Must be enumerable. #{items}"
20
30
  end
21
31
 
22
- enum =
23
- Table::Iterator
24
- .new(
25
- Table.new(@schema, row_type: @options[:row_type]),
26
- header: @options[:header]
27
- )
28
- .iterate(items)
29
-
30
- if block_given?
31
- enum =
32
- enum
33
- .lazy
34
- .map { |row| block.call(row) }
32
+ table_enum = ::Enumerator.new do |y|
33
+ body_enum = @table.body(items)
34
+
35
+ if @header_options.enabled?
36
+ header_row = @table.header(context: @header_options.context)
37
+ y << header_row
38
+
39
+ if @header_options.step&.positive?
40
+ loop do
41
+ @header_options.step.times { y << body_enum.next }
42
+ y << header_row
43
+ end
44
+ else
45
+ body_enum.each { |row| y << row }
46
+ end
47
+ else
48
+ body_enum.each { |row| y << row }
49
+ end
35
50
  end
36
51
 
37
- enum
52
+ table_enum = table_enum.lazy.map(&block) if block_given?
53
+
54
+ table_enum
38
55
  end
39
56
  end
40
57
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TableStructure
4
- VERSION = '0.4.0'
4
+ VERSION = '0.4.1'
5
5
  end
@@ -4,7 +4,7 @@ module TableStructure
4
4
  class Writer
5
5
  def initialize(
6
6
  schema,
7
- header: { context: nil },
7
+ header: { context: nil, step: nil },
8
8
  method: :<<,
9
9
  row_type: :array
10
10
  )
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: table_structure
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - jsmmr
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-03 00:00:00.000000000 Z
11
+ date: 2020-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -97,7 +97,6 @@ files:
97
97
  - lib/table_structure/table.rb
98
98
  - lib/table_structure/table/column_converter.rb
99
99
  - lib/table_structure/table/context_builder.rb
100
- - lib/table_structure/table/iterator.rb
101
100
  - lib/table_structure/table/row_builder.rb
102
101
  - lib/table_structure/version.rb
103
102
  - lib/table_structure/writer.rb
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module TableStructure
4
- class Table::Iterator
5
- def initialize(table, header: { context: nil })
6
- @table = table
7
- @header_options = header
8
- end
9
-
10
- def iterate(items)
11
- ::Enumerator.new do |y|
12
- if @header_options
13
- header_context = @header_options.is_a?(Hash) ? @header_options[:context] : nil
14
- y << @table.header(context: header_context)
15
- end
16
- @table
17
- .body(items)
18
- .each { |row| y << row }
19
- end
20
- end
21
- end
22
- end