artabl 0.01

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 28832667b578cd237de34e183b4861fe1e0831e761232ecd4e75c6a683c37d71
4
+ data.tar.gz: 00ede4427462c3d191c3845f264ec5f8d7f0fb073c4ffe00943cb9261abfe2ad
5
+ SHA512:
6
+ metadata.gz: ebb057ea5d8c610d30bf6f56f201914d2caca45936ab4cabc373896dd5d4cf23c50455c80bbdfa0b3578e756652db1f3252248d86d054d70614f616ba043cd2f
7
+ data.tar.gz: e483e9ef375acb8b7515d60df79d5042fcbb1c0fc612517062c9feaf34e09b232c687182e726008a7b72e2f403d8040f66644c3deb12b35e3a3178dba38e7687
data/lib/artabl.rb ADDED
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler'
4
+ Bundler.require
5
+
6
+ # TODO: Переделать.
7
+ class Artabl
8
+ require_relative 'artabl/cell'
9
+ require_relative 'artabl/collection'
10
+ require_relative 'artabl/version'
11
+
12
+ Error = Class.new(StandardError)
13
+ DataNotHashError = Class.new(Error)
14
+
15
+ def initialize(data)
16
+ @data = data
17
+ end
18
+
19
+ attr_reader :data
20
+
21
+ def self.convert(data)
22
+ new(data).convert
23
+ end
24
+
25
+ def convert
26
+ validate!
27
+ size_columns
28
+ end
29
+
30
+ private
31
+
32
+ def norm_data
33
+ data.is_a?(Array) ? data : [data]
34
+ end
35
+
36
+ def validate!
37
+ norm_data.each { |row| raise DataNotHashError unless row.is_a?(Hash) }
38
+ end
39
+
40
+ def headers
41
+ norm_data.map(&:keys).flatten.uniq
42
+ end
43
+
44
+ def arr_table
45
+ result_rows = []
46
+ result_rows << headers
47
+
48
+ norm_data.each do |data_row|
49
+ result_row = headers.map do |h|
50
+ data_row[h]
51
+ end
52
+
53
+ result_rows << result_row
54
+ end
55
+
56
+ result_rows
57
+ end
58
+
59
+ def size_columns
60
+ sizes = []
61
+
62
+ arr_table.each do |row|
63
+ row.each_with_index do |col, idx|
64
+ sizes[idx] ||= 0
65
+
66
+ next if col.nil?
67
+
68
+ sizes[idx] = col.size if col.size > sizes[idx]
69
+ end
70
+ end
71
+
72
+ sizes
73
+ end
74
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Artabl::Cell
4
+ def initialize(body:, column:, row:)
5
+ @body = body
6
+ @column = column
7
+ @row = row
8
+
9
+ column.add_cell(self)
10
+ row.add_cell(self)
11
+ end
12
+
13
+ attr_reader :body, :column, :row
14
+
15
+ def size
16
+ body.length
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Artabl::Collection
4
+ require_relative 'collection/base'
5
+ require_relative 'collection/column'
6
+ require_relative 'collection/row'
7
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Artabl::Collection::Base
4
+ def initialize(cells: [], position: 0)
5
+ @cells = cells
6
+ @position = position
7
+ end
8
+
9
+ attr_reader :cells, :position
10
+
11
+ def add_cell(cell)
12
+ cells.push(cell)
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Artabl::Collection::Column < Artabl::Collection::Base
4
+ def size
5
+ cells.map(&:size).max
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Artabl::Collection::Row < Artabl::Collection::Base
4
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Artabl
4
+ VERSION = '0.01'
5
+ end
metadata ADDED
@@ -0,0 +1,50 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: artabl
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.01'
5
+ platform: ruby
6
+ authors:
7
+ - Vladimir Bardokin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-02-02 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email:
15
+ - mecha@twodev.ru
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/artabl.rb
21
+ - lib/artabl/cell.rb
22
+ - lib/artabl/collection.rb
23
+ - lib/artabl/collection/base.rb
24
+ - lib/artabl/collection/column.rb
25
+ - lib/artabl/collection/row.rb
26
+ - lib/artabl/version.rb
27
+ homepage: https://github.com/Mecha23/artabl
28
+ licenses:
29
+ - MIT
30
+ metadata: {}
31
+ post_install_message:
32
+ rdoc_options: []
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 2.7.1
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubygems_version: 3.1.2
47
+ signing_key:
48
+ specification_version: 4
49
+ summary: artabl
50
+ test_files: []