artabl 0.01

Sign up to get free protection for your applications and to get access to all the features.
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: []