html_table_dsl 0.0.1 → 0.0.2
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 +4 -4
- data/Gemfile +1 -1
- data/README.md +10 -2
- data/html_table_dsl.gemspec +27 -0
- data/lib/error.rb +6 -0
- data/lib/html/col.rb +0 -10
- data/lib/html/row.rb +2 -11
- data/lib/html/table.rb +9 -9
- data/lib/html/tag.rb +26 -8
- data/lib/html/tbody.rb +2 -13
- data/lib/html/thead.rb +2 -13
- data/main.rb +12 -8
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c3d8bba615e6b3109d0bc42b772ee8fb9af58fbba61429255b2f843caefe1011
|
4
|
+
data.tar.gz: 632c3177d6f57eb9fda67418d322e83758ff5a3db2bb134371a029d778877c6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b5b93a8185a38b80bbbd87b1e1d497fd60cf4d9e1c87d063314010fda0a9bbc0083f5b9047a8d7297fd32603fd4990e92842ecde056ab00037a64a6cd9a4012
|
7
|
+
data.tar.gz: b95e69b2bfa0d947a4b3b34d93c1b6c79b1420187061798af63c12d4d50bba8e5938a051d3f776960f2c0c5d3599b02ad98707f5835fa6bd32f46da17f82363d
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
# HTML-table DSL
|
2
2
|
DLS for working with HTML tables. Easy creation and population of tables in Ruby.
|
3
3
|
|
4
|
+
## Install gem
|
5
|
+
```
|
6
|
+
gem install html_table_dsl
|
7
|
+
```
|
8
|
+
## Use gem
|
9
|
+
```
|
10
|
+
require 'html/table'
|
11
|
+
```
|
4
12
|
## Create table
|
5
13
|
```ruby
|
6
14
|
html_table = Html.table(1, 2, name: 'table_name', class: 'table_class')
|
@@ -14,8 +22,8 @@ html_table.attributes = { class: 'table_class_new', name: nil, style: 'border: 1
|
|
14
22
|
## Set headers
|
15
23
|
```ruby
|
16
24
|
head_cols = [Html::HeadCol.new('Text')]
|
17
|
-
|
18
|
-
html_table.write_header(
|
25
|
+
head_rows = [Html::Row.new(head_cols, name: 'row_name', class: 'row_class')]
|
26
|
+
html_table.write_header(head_rows)
|
19
27
|
# <table><thead><tr name='row_name' class='row_class'><th>Text</th></tr></thead><tbody> ... </tbody></table>
|
20
28
|
```
|
21
29
|
## Set rows
|
@@ -0,0 +1,27 @@
|
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
|
4
|
+
Gem::Specification.new do |spec|
|
5
|
+
spec.name = 'html_table_dsl'
|
6
|
+
spec.version = '0.0.2'
|
7
|
+
spec.authors = ['GorohovAlex']
|
8
|
+
spec.email = ['gorochov.as@gmail.com']
|
9
|
+
|
10
|
+
spec.summary = 'HTML-table DSL'
|
11
|
+
spec.description = 'DLS for working with HTML tables. Easy creation and population of tables in Ruby.'
|
12
|
+
spec.homepage = 'https://github.com/GorohovAlex/html_table_dsl'
|
13
|
+
|
14
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
15
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
16
|
+
end
|
17
|
+
spec.bindir = 'exe'
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
22
|
+
spec.add_development_dependency 'fasterer', '~> 0.10.1'
|
23
|
+
spec.add_development_dependency 'pry', '~> 0.14.2'
|
24
|
+
spec.add_development_dependency 'rspec', '~> 3.12'
|
25
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 2.23.2'
|
26
|
+
spec.add_development_dependency 'simplecov', '~> 0.22.0'
|
27
|
+
end
|
data/lib/error.rb
ADDED
data/lib/html/col.rb
CHANGED
@@ -3,20 +3,10 @@ require_relative 'tag'
|
|
3
3
|
|
4
4
|
module Html
|
5
5
|
class Col < Tag
|
6
|
-
def initialize(value = '', **attrs)
|
7
|
-
super(**attrs)
|
8
|
-
|
9
|
-
@value = value
|
10
|
-
end
|
11
|
-
|
12
6
|
private
|
13
7
|
|
14
8
|
def tag_name
|
15
9
|
:td
|
16
10
|
end
|
17
|
-
|
18
|
-
def value
|
19
|
-
CGI.escapeHTML(@value.to_s)
|
20
|
-
end
|
21
11
|
end
|
22
12
|
end
|
data/lib/html/row.rb
CHANGED
@@ -1,24 +1,15 @@
|
|
1
1
|
require_relative 'col'
|
2
|
+
require_relative 'head_col'
|
2
3
|
require_relative 'tag'
|
3
4
|
|
4
5
|
module Html
|
5
6
|
class Row < Tag
|
6
|
-
|
7
|
-
|
8
|
-
def initialize(cols = Array.new(0, Col.new), **attrs)
|
9
|
-
super(**attrs)
|
10
|
-
|
11
|
-
@cols = cols
|
12
|
-
end
|
7
|
+
ALLOWED_CHILDREN = [Html::Col, Html::HeadCol].freeze
|
13
8
|
|
14
9
|
private
|
15
10
|
|
16
11
|
def tag_name
|
17
12
|
:tr
|
18
13
|
end
|
19
|
-
|
20
|
-
def value
|
21
|
-
@cols&.map(&:to_s)&.join
|
22
|
-
end
|
23
14
|
end
|
24
15
|
end
|
data/lib/html/table.rb
CHANGED
@@ -10,10 +10,10 @@ module Html
|
|
10
10
|
|
11
11
|
class Table < Tag
|
12
12
|
def initialize(rows = 0, cols = 0, **attrs)
|
13
|
-
|
13
|
+
@head_rows = []
|
14
|
+
@body_rows = Array.new(rows, Row.new(Array.new(cols, Col.new(' '))))
|
14
15
|
|
15
|
-
|
16
|
-
@body_rows = Array.new(rows, Row.new(Array.new(cols, Col.new)))
|
16
|
+
super(**attrs)
|
17
17
|
end
|
18
18
|
|
19
19
|
def write_row(index, row)
|
@@ -24,18 +24,18 @@ module Html
|
|
24
24
|
@head_rows = head_rows
|
25
25
|
end
|
26
26
|
|
27
|
-
private
|
28
|
-
|
29
|
-
def tag_name
|
30
|
-
:table
|
31
|
-
end
|
32
|
-
|
33
27
|
def value
|
34
28
|
output_value = ''
|
35
29
|
output_value += head.to_s unless head.empty?
|
36
30
|
output_value + body.to_s unless body.empty?
|
37
31
|
end
|
38
32
|
|
33
|
+
private
|
34
|
+
|
35
|
+
def tag_name
|
36
|
+
:table
|
37
|
+
end
|
38
|
+
|
39
39
|
def head
|
40
40
|
@head ||= Thead.new(@head_rows)
|
41
41
|
end
|
data/lib/html/tag.rb
CHANGED
@@ -1,27 +1,38 @@
|
|
1
|
-
require '
|
1
|
+
require './lib/error'
|
2
2
|
|
3
3
|
module Html
|
4
4
|
class Tag
|
5
|
-
|
5
|
+
ALLOWED_CHILDREN = [].freeze
|
6
|
+
attr_reader :value
|
7
|
+
|
8
|
+
def initialize(value = nil, **attrs)
|
6
9
|
@attributes = attrs
|
10
|
+
@value = value
|
11
|
+
valid_children?
|
7
12
|
end
|
8
13
|
|
9
14
|
def to_s
|
10
|
-
"<#{tag_name}#{read_attributes}>#{
|
15
|
+
"<#{tag_name}#{read_attributes}>#{read_value}</#{tag_name}>"
|
11
16
|
end
|
12
17
|
|
13
18
|
def attributes=(new_attributes)
|
14
19
|
@attributes.merge!(new_attributes).compact!
|
15
20
|
end
|
16
21
|
|
17
|
-
private
|
18
|
-
|
19
22
|
def tag_name
|
20
|
-
|
23
|
+
nil
|
21
24
|
end
|
22
25
|
|
23
|
-
def
|
24
|
-
|
26
|
+
def empty?
|
27
|
+
return value.all?(&:empty?) if value.is_a?(Array)
|
28
|
+
|
29
|
+
value.nil? ? true : value&.empty?
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def read_value
|
35
|
+
value.is_a?(Array) ? value.map(&:to_s).join : value
|
25
36
|
end
|
26
37
|
|
27
38
|
def read_attributes
|
@@ -31,5 +42,12 @@ module Html
|
|
31
42
|
def attributes
|
32
43
|
@attributes.map { |key, value| "#{CGI.escapeHTML(key.to_s)}='#{CGI.escapeHTML(value)}'" }.join(' ')
|
33
44
|
end
|
45
|
+
|
46
|
+
def valid_children?
|
47
|
+
return true if @value.is_a?(String) || @value.nil?
|
48
|
+
|
49
|
+
all_allowed = @value&.all? { |value| self.class::ALLOWED_CHILDREN.include?(value.class) }
|
50
|
+
raise ChildFormatError, self.class::ALLOWED_CHILDREN unless all_allowed
|
51
|
+
end
|
34
52
|
end
|
35
53
|
end
|
data/lib/html/tbody.rb
CHANGED
@@ -1,24 +1,13 @@
|
|
1
1
|
require_relative 'tag'
|
2
|
+
require_relative 'row'
|
2
3
|
module Html
|
3
4
|
class Tbody < Tag
|
4
|
-
|
5
|
-
super(**attrs)
|
6
|
-
|
7
|
-
@rows = rows
|
8
|
-
end
|
9
|
-
|
10
|
-
def empty?
|
11
|
-
@rows.nil? || @rows.empty?
|
12
|
-
end
|
5
|
+
ALLOWED_CHILDREN = [Html::Row].freeze
|
13
6
|
|
14
7
|
private
|
15
8
|
|
16
9
|
def tag_name
|
17
10
|
:tbody
|
18
11
|
end
|
19
|
-
|
20
|
-
def value
|
21
|
-
@rows&.map(&:to_s)&.join
|
22
|
-
end
|
23
12
|
end
|
24
13
|
end
|
data/lib/html/thead.rb
CHANGED
@@ -1,25 +1,14 @@
|
|
1
1
|
require_relative 'tag'
|
2
|
+
require_relative 'row'
|
2
3
|
|
3
4
|
module Html
|
4
5
|
class Thead < Tag
|
5
|
-
|
6
|
-
super(**attrs)
|
7
|
-
|
8
|
-
@row = row
|
9
|
-
end
|
10
|
-
|
11
|
-
def empty?
|
12
|
-
@row.nil? || @row.cols.empty?
|
13
|
-
end
|
6
|
+
ALLOWED_CHILDREN = [Html::Row].freeze
|
14
7
|
|
15
8
|
private
|
16
9
|
|
17
10
|
def tag_name
|
18
11
|
:thead
|
19
12
|
end
|
20
|
-
|
21
|
-
def value
|
22
|
-
@row
|
23
|
-
end
|
24
13
|
end
|
25
14
|
end
|
data/main.rb
CHANGED
@@ -3,20 +3,24 @@ require_relative './lib/html/head_col'
|
|
3
3
|
require_relative './lib/html/row'
|
4
4
|
require_relative './lib/html/table'
|
5
5
|
|
6
|
-
html_table = Html.table(1, 2)
|
7
|
-
|
6
|
+
html_table = Html.table(1, 2) # , name: 'table_name', class: 'table_class')
|
7
|
+
html_table.attributes = { class: 'table_class_new', name: nil, style: 'border: 1px' }
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
head_cols = [Html::HeadCol.new('<i>Text</i>')]
|
10
|
+
head_row = [Html::Row.new(head_cols, name: 'row_name', class: 'row_class')]
|
11
|
+
html_table.write_header(head_row)
|
12
12
|
# cols = Array.new(3) { |index| Html::Col.new("COL #{index} VALUE", style: 'border: 1px solid black') }
|
13
|
-
#
|
13
|
+
# Html::Row.new(cols, name: 'row_name', class: 'row_class111', style: 'background-color: red;')
|
14
|
+
# first_row = Html::Row.new([1], name: 'row_name', class: 'row_class111', style: 'background-color: red;')
|
14
15
|
# second_row = Html::Row.new(cols, name: 'row_name', class: 'row_class', style: 'background-color: green;')
|
15
16
|
|
16
17
|
# html_table.write_row(0, first_row)
|
18
|
+
# puts html_table
|
19
|
+
# first_row.attributes = { class: 'row_class222' }
|
20
|
+
|
17
21
|
# html_table.write_row(1, second_row)
|
18
22
|
|
19
|
-
cols = [Html::Col.new('Text', name: 'col_name', style: 'col_style')]
|
20
|
-
html_table.write_row(0, Html::Row.new(cols, name: 'row_name', class: 'row_class'))
|
23
|
+
# cols = [Html::Col.new('Text', name: 'col_name', style: 'col_style')]
|
24
|
+
# html_table.write_row(0, Html::Row.new(cols, name: 'row_name', class: 'row_class'))
|
21
25
|
|
22
26
|
puts html_table
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: html_table_dsl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GorohovAlex
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-08-
|
11
|
+
date: 2023-08-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,6 +108,8 @@ files:
|
|
108
108
|
- Gemfile
|
109
109
|
- Gemfile.lock
|
110
110
|
- README.md
|
111
|
+
- html_table_dsl.gemspec
|
112
|
+
- lib/error.rb
|
111
113
|
- lib/html/col.rb
|
112
114
|
- lib/html/head_col.rb
|
113
115
|
- lib/html/row.rb
|