table_structure 0.3.12 → 0.3.13

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: 2b675232423fea16fcc7aaaeae505f782fd8db4371065e242eb794eeed07b0c9
4
- data.tar.gz: c8f02884ae3ad9e768fde5253f9023299bd9967cb8b49406799a6f467ce1de17
3
+ metadata.gz: 5e9bf971b78fd68cbce2023d18033fcd397b1be4de329a5ba616df1c77baa62c
4
+ data.tar.gz: ad9e3d5a67d51239038d7fd711602fc4b518188adfd5fd5d1b1a67c3c3e703cd
5
5
  SHA512:
6
- metadata.gz: 537a05a78c42d4250d5c64d51b839c9abfb16ee0055d2fdc2f59fb36e70d38f0a406d549c6d2ad00634a80812c2f9673064659829263cdb682e84c2ff5456429
7
- data.tar.gz: e58886afb4755ef78a6520e7d4e07d941a4c5bc0c419fbe4e9f0bfd0739ed8005278a32bcb958c0284ae1e84d2dfcdca53db9d5b5c826682e367412a33c951ef
6
+ metadata.gz: b5f93b81fcff429a3899be7ce8e6a0b67bd638cfefea73e425097a08fcc5ddccee031c4f9c112c491cd4cf2dc1e761e3deaefbc1ba12bbab80a5b6ad37c88946
7
+ data.tar.gz: 36b8fa006be7530c21c747dc4c931e662161f60eac6e3c8b8a5dabe429c5bd5ce7bd8837dee05311fcba9f7b8e95fd4305be798e71ed38f5a512b459d3d535d8
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 0.3.13
2
+ Changes:
3
+ - Minor improvements.
4
+
1
5
  # 0.3.12
2
6
  Changes:
3
7
  - `TableStructure::Schema`
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- table_structure (0.3.12)
4
+ table_structure (0.3.13)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -98,6 +98,7 @@ items = [
98
98
  ]
99
99
 
100
100
  ## When using `find_each` method of Rails
101
+ # items = Item.enum_for(:find_each)
101
102
  # items = Enumerator.new { |y| Item.find_each { |item| y << item } }
102
103
 
103
104
  table = []
@@ -183,9 +184,6 @@ context = {
183
184
 
184
185
  schema = SampleTableSchema.new(context: context)
185
186
  iterator = TableStructure::Iterator.new(schema, result_type: :hash, header_omitted: true)
186
- ## or
187
- # writer = TableStructure::Writer.new(schema, result_type: :hash, header_omitted: true)
188
- # iterator = TableStructure::Iterator.new(writer)
189
187
  ```
190
188
 
191
189
  Enumerate the items converted by the schema:
@@ -242,6 +240,33 @@ context = { admin: true }
242
240
  schema = SampleTableSchema.new(context: context)
243
241
  ```
244
242
 
243
+ You can also omit columns by specifying `nil_definitions_ignored: true`.
244
+ If this option is set to `true` and `column(s)` difinition returns `nil`, the difinition is ignored.
245
+ ```ruby
246
+ class SampleTableSchema
247
+ include TableStructure::Schema
248
+
249
+ column name: 'ID',
250
+ value: ->(row, *) { row[:id] }
251
+
252
+ column name: 'Name',
253
+ value: ->(row, *) { row[:name] }
254
+
255
+ columns ->(table) {
256
+ if table[:pet_num].positive?
257
+ {
258
+ name: (1..table[:pet_num]).map { |num| "Pet #{num}" },
259
+ value: ->(row, *) { row[:pets] }
260
+ }
261
+ end
262
+ }
263
+ end
264
+
265
+ context = { pet_num: 0 }
266
+
267
+ schema = SampleTableSchema.new(context: context, nil_definitions_ignored: true)
268
+ ```
269
+
245
270
  You can also nest schemas.
246
271
  ```ruby
247
272
  class PetTableSchema
@@ -340,13 +365,28 @@ end
340
365
  ```
341
366
 
342
367
  You can also use only `TableStructure::Schema`.
343
- ```ruby
344
- schema = SampleTableSchema.new
345
- table = schema.create_table(result_type: :hash)
346
- header = table.header
347
- items.each do |item|
348
- row = table.row(context: item)
349
- end
368
+ ```erb
369
+ <% @schema.create_table(result_type: :array) do |table| %>
370
+ <table>
371
+ <thead>
372
+ <tr>
373
+ <% table.header.each do |val| %>
374
+ <th><%= val %></th>
375
+ <% end %>
376
+ </tr>
377
+ </thead>
378
+
379
+ <tbody>
380
+ <% table.rows(@items).each do |row| %>
381
+ <tr>
382
+ <% row.each do |val| %>
383
+ <td><%= val %></td>
384
+ <% end %>
385
+ </tr>
386
+ <% end %>
387
+ </tbody>
388
+ </table>
389
+ <% end %>
350
390
  ```
351
391
 
352
392
  ## Contributing
@@ -1,7 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'forwardable'
4
+
3
5
  module TableStructure
4
6
  module Schema
7
+ extend Forwardable
8
+
5
9
  def self.included(klass)
6
10
  klass.extend(DSL::ColumnConverter)
7
11
  klass.extend(DSL::ColumnDefinition)
@@ -18,6 +22,8 @@ module TableStructure
18
22
  nil_definitions_ignored: false
19
23
  }.freeze
20
24
 
25
+ def_delegators :@table_structure_schema_definition_, :create_table
26
+
21
27
  def initialize(context: nil, name: self.class.name, **options)
22
28
  column_definitions = [].concat(self.class.column_definitions)
23
29
  context_builders = {}.merge!(self.class.context_builders)
@@ -35,9 +41,5 @@ module TableStructure
35
41
  options
36
42
  )
37
43
  end
38
-
39
- def create_table(**options)
40
- @table_structure_schema_definition_.create_table(options)
41
- end
42
44
  end
43
45
  end
@@ -37,7 +37,11 @@ module TableStructure
37
37
  @column_converters.extend_methods_for(table)
38
38
  @result_builders.extend_methods_for(table)
39
39
 
40
- table
40
+ if block_given?
41
+ yield table
42
+ else
43
+ table
44
+ end
41
45
  end
42
46
 
43
47
  private
@@ -25,6 +25,12 @@ module TableStructure
25
25
  values(:value, context)
26
26
  end
27
27
 
28
+ def rows(items)
29
+ Enumerator.new do |y|
30
+ items.each { |item| y << row(context: item) }
31
+ end
32
+ end
33
+
28
34
  private
29
35
 
30
36
  def keys
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TableStructure
4
- VERSION = '0.3.12'
4
+ VERSION = '0.3.13'
5
5
  end
@@ -15,18 +15,18 @@ module TableStructure
15
15
 
16
16
  def write(items, to:, **options)
17
17
  options = @options.merge(options)
18
- table = @schema.create_table(options)
19
- unless options[:header_omitted]
20
- header = table.header(
21
- context: options[:header_context]
22
- )
23
- header = yield header if block_given?
24
- to.send(options[:method], header)
25
- end
26
- enumerize(items).each do |item|
27
- row = table.row(context: item)
28
- row = yield row if block_given?
29
- to.send(options[:method], row)
18
+ @schema.create_table(options) do |table|
19
+ unless options[:header_omitted]
20
+ header = table.header(
21
+ context: options[:header_context]
22
+ )
23
+ header = yield header if block_given?
24
+ to.send(options[:method], header)
25
+ end
26
+ table.rows(enumerize(items)).each do |row|
27
+ row = yield row if block_given?
28
+ to.send(options[:method], row)
29
+ end
30
30
  end
31
31
  nil
32
32
  end
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.3.12
4
+ version: 0.3.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - jsmmr
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-17 00:00:00.000000000 Z
11
+ date: 2019-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler