st_html_table 0.1.0

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
+ SHA1:
3
+ metadata.gz: 9e8c0354612db1e00143ffc4adf6b6371a5760ae
4
+ data.tar.gz: 468dd0fb9f9aa78950afe172f5fffed7760b8ac1
5
+ SHA512:
6
+ metadata.gz: 39c5ef3a76ff3306952564764f18dc91596d2a8f53d252a5d08f044c47e2ac38c7ac242c85de16b1fda9c33e696207ca1c1703b6346cbd69c95e71429b630fa6
7
+ data.tar.gz: ba7a3ea3fded9d6484d44b20775c7cc850e62385d65643163b4ed4eb0165ced33b565d0ed2560153b18ee89c74496d444b8aa113514f75f45efb580878ec3670
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Stan Zhuravlev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,20 @@
1
+ # StHtmlTable
2
+
3
+ Библиотека StHtmlTable позволяет формировать красиво форматированные таблицы в формате HTML, например,
4
+ для передаче по электроннйо почты. Библиотека предназначена для использования в составе различных CLI-скриптов,
5
+ в частности, в составе библиотеки [cli_application](https://github.com/StanZhuravlev/cli_application).
6
+
7
+ Библиотека имеет ограниченные возможности по созданию таблиц, поскольку ее изначальная цель - отсылка админстраторам
8
+ писем с различными статусами. Поэтому вся таблица имеет несколько вариантов оформления строк. В частности:
9
+
10
+ |Тип строки|Значение|
11
+ -----
12
+ |:success|Черный текст на бледно-зеленом фоне|
13
+ |:fail|Черный текст на бледно-крансом фоне|
14
+ |:warn|Черный текст на желтом фоне|
15
+ |:neutral|Черный текст на сером фоне|
16
+
17
+ Тип строки задается для каждой строки таблицы.
18
+
19
+ ## Создание таблицы
20
+
@@ -0,0 +1,12 @@
1
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
2
+
3
+ require "st_html_table/version"
4
+ require 'rubygems'
5
+
6
+
7
+ module StHtmlTable
8
+ require 'st_html_table/cell'
9
+ require 'st_html_table/row'
10
+ require 'st_html_table/table'
11
+
12
+ end
@@ -0,0 +1,76 @@
1
+ module StHtmlTable
2
+ class Cell
3
+ attr_accessor :text
4
+ attr_reader :row
5
+ attr_reader :table
6
+ attr_accessor :is_header
7
+ attr_accessor :cols
8
+ attr_accessor :col_id
9
+ attr_accessor :row_id
10
+ attr_accessor :bold
11
+ attr_accessor :italic
12
+ attr_accessor :align
13
+ attr_accessor :valign
14
+ attr_accessor :type
15
+
16
+ def initialize(table, row)
17
+ @text = ' '
18
+ @row = row
19
+ @table = table
20
+ @is_header = false
21
+ @cols = 1
22
+ @col_id = 0
23
+ @row_id = 0
24
+ @type = :neutral
25
+ @valign = :top
26
+
27
+ @bold = false
28
+ @italic = false
29
+ @align = :left
30
+
31
+ @ident = 6
32
+ end
33
+
34
+ def prefix=(value)
35
+ @prefix = value
36
+ end
37
+
38
+ def suffix=(value)
39
+ @suffix = value
40
+ end
41
+
42
+ def to_s
43
+ @text.gsub(%r{</?[^>]+?>}, '')
44
+ end
45
+
46
+ def to_html
47
+ type = @is_header ? 'th' : 'td'
48
+
49
+ out = Array.new
50
+ out << (' ' * @ident) + build_cell_arguments(type)
51
+ out << (' ' * (@ident + 2)) + @text.to_s
52
+ out << (' ' * @ident) + "</#{type}>"
53
+ out.join("\n")
54
+ end
55
+
56
+ private
57
+
58
+
59
+ def build_cell_arguments(type)
60
+ out = Array.new
61
+ style = Array.new
62
+
63
+ style << "font-weight:bold;" if @bold
64
+ style << "font-style:italic;" if @italic
65
+ style << "border: 1px solid #eaeaea;"
66
+
67
+ out << "align=#{@align.to_s.inspect}"
68
+ out << "valign=#{@valign.to_s.inspect}" if @valign != :top
69
+ out << "style='#{style.join}'" unless style.empty?
70
+ out << "cols=\"#{@cols}\"" if @cols != 1
71
+ "<#{type} " + out.join(' ') + ">"
72
+ end
73
+
74
+
75
+ end
76
+ end
@@ -0,0 +1,124 @@
1
+ module StHtmlTable
2
+ class Row
3
+
4
+ def initialize(table) # :nodoc:
5
+ @table = table
6
+ @cells = Hash.new
7
+ @id = :none
8
+ @type = :neutral
9
+
10
+ @ident = 4
11
+ end
12
+
13
+ # Метод позволяет установить для строки таблицы один из следующих стилей: [:neutral, :fail, :success, :warn]
14
+ #
15
+ # @param [Sym] value тип строки. При изменении типа строки, все ячейи строки таблицы получат эти же значения
16
+ # @return [None] нет
17
+ def type=(value)
18
+ types = [:neutral, :fail, :success, :warn]
19
+ raise "Ошибка: тип строки должен быть одним из: #{types.inspect}" unless types.include?(value.to_sym)
20
+ @type = value.to_sym
21
+ @cells.each { |id, cell| cell.type = @type }
22
+ end
23
+
24
+ # Метод добавляет или изменяет ячейку таблицы, устанавливая ее соедержание, выравнивание, стиль оформления
25
+ #
26
+ # @param [Object] col_id идентифкатор столбца таблицы
27
+ # @param [Object] text содержание ячейки
28
+ # @param [Object] align выравнивание [:left, :center, :right]
29
+ # @param [Object] bold жирное начертание
30
+ # @param [Object] italic наклонное начертание
31
+ # @return [StHtmlTable::Cell] измененная ячейка
32
+ def add(col_id, text, align: :left, bold: false, italic: false)
33
+ add_cell(col_id, text, align, bold, italic)
34
+ end
35
+
36
+ def get_cell(col_id)
37
+ @cells[col_id]
38
+ end
39
+
40
+ def row_keys
41
+ @cells.keys
42
+ end
43
+
44
+ def add_header(header)
45
+ header.each do |id, name|
46
+ cell = ::StHtmlTable::Cell.new(@table, self)
47
+ cell.col_id = id.to_sym
48
+ cell.row_id = self.id
49
+ cell.is_header = true
50
+ cell.text = name
51
+ cell.align = :center
52
+ cell.bold = true
53
+
54
+ @cells[id.to_sym] = cell
55
+ end
56
+ end
57
+
58
+ def to_html
59
+ out = Array.new
60
+ out << (' ' * @ident) + "<tr #{build_color_scheme}>"
61
+ @cells.each do |id, cell|
62
+ out << cell.to_html
63
+ end
64
+ out << (' ' * @ident) + "</tr>"
65
+ out.join("\n")
66
+ end
67
+
68
+ def id=(id)
69
+ @id = id
70
+ end
71
+
72
+ def id
73
+ @id
74
+ end
75
+
76
+ def init_row # :nodoc:
77
+ keys = @table.row_keys
78
+ keys.each do |id|
79
+ cell = ::StHtmlTable::Cell.new(@table, self)
80
+ cell.col_id = id.to_sym
81
+ cell.row_id = self.id
82
+ cell.type = @type
83
+
84
+ @cells[id.to_sym] = cell
85
+ end
86
+ end
87
+
88
+
89
+ private
90
+
91
+
92
+
93
+ def build_color_scheme # :nodoc:
94
+ if @cells.values.first.is_header
95
+ return "style=\"color:#ffffff;background:#389bb9;\" valign=\"center\""
96
+ end
97
+
98
+ case @type
99
+ when :warn
100
+ return "bgcolor=\"efe685\""
101
+ when :success
102
+ return "bgcolor=\"#c4d7be\""
103
+ when :fail
104
+ return "bgcolor=\"#efbcbe\""
105
+ else
106
+ return "bgcolor=\"#e6e6e6\""
107
+ end
108
+ end
109
+
110
+ def add_cell(col_id, text, align, bold, italic) # :nodoc:
111
+ cell = get_cell(col_id)
112
+ raise "Ошибка: не найдена ячейка HTML-таблицы (#{col_id.inspect}, #{self.id.inspect})" if cell.nil?
113
+
114
+ cell.text = text
115
+ cell.align = align
116
+ cell.bold = bold
117
+ cell.italic = italic
118
+
119
+ cell
120
+ end
121
+
122
+
123
+ end
124
+ end
@@ -0,0 +1,89 @@
1
+ module StHtmlTable
2
+ class Table
3
+
4
+ def initialize # :nodoc:
5
+ init_table
6
+ end
7
+
8
+ # Метод создает таблицу с строкой-заголовком. Данный метод должен быть вызван первым, поскольку
9
+ # именно он определяет число столбцов в будущей таблице
10
+ #
11
+ # @param [Hash] header хеш вида column id => title of column
12
+ # @param [Integer] padding аналог cellpadding тега <table>
13
+ # @param [Integer] width ширина таблицы в процентах
14
+ # @return [None] нет
15
+ def create(header, padding: 5, width: 0)
16
+ init_table
17
+ @padding = padding
18
+ @width = width
19
+ init_header(header)
20
+ end
21
+
22
+ # Метод возвращает все идентифкаторы столбцов таблицы
23
+ #
24
+ # @return [Array] массив идентификаторов столбцов таблицы
25
+ def row_keys
26
+ @header.row_keys
27
+ end
28
+
29
+ # Метод возвращает ряд таблицы по идентификатору ряда. Если ряд с таким id отсуствует - он будет создан
30
+ #
31
+ # @param [Object] id идентфикатор строки
32
+ # @return [StHtmlTable::Row] класс со строкой (<tr>) таблицы
33
+ def get_row(id)
34
+ init_row(id) if @rows[id].nil?
35
+ @rows[id]
36
+ end
37
+
38
+ # Метод переводит таблицы в форматированный HTML
39
+ #
40
+ # @return [String] таблица в формате HTML
41
+ def to_html
42
+ out = Array.new
43
+ out << build_table_row
44
+ out << build_header_row
45
+ @rows.each do |row_id, row|
46
+ out << row.to_html
47
+ end
48
+ out << "</table>"
49
+ out.join("\n")
50
+ end
51
+
52
+
53
+
54
+ private
55
+
56
+
57
+
58
+ def init_header(header) # :nodoc:
59
+ @header = ::StHtmlTable::Row.new(self)
60
+ @header.id = :html_table_header
61
+ @header.add_header(header)
62
+ end
63
+
64
+ def build_header_row # :nodoc:
65
+ @header.to_html
66
+ end
67
+
68
+ def build_table_row # :nodoc:
69
+ out = Array.new
70
+ out << "table"
71
+ out << "cellpadding=\"#{@padding}px\""
72
+ out << "cellspacing=\"0\""
73
+ out << "style=\"border: 1px solid #eaeaea; border-collapse:collapse;\""
74
+ out << "width=\"#{@width}%\"" unless @width == 0
75
+ "<" + out.join(' ') + ">"
76
+ end
77
+
78
+ def init_row(row_id) # :nodoc:
79
+ @rows[row_id] = ::StHtmlTable::Row.new(self)
80
+ @rows[row_id].init_row
81
+ end
82
+
83
+ def init_table # :nodoc:
84
+ @rows = Hash.new
85
+ @header = Hash.new
86
+ end
87
+
88
+ end
89
+ end
@@ -0,0 +1,3 @@
1
+ module StHtmlTable
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,58 @@
1
+ require 'rspec'
2
+ require 'st_html_table'
3
+
4
+
5
+ describe 'Проверка методов StHtmlTable::Cell.*' do
6
+
7
+ it 'Test 1' do
8
+ cell = ::StHtmlTable::Cell.new(nil, nil)
9
+ cell.text = 'Content'
10
+ expect(cell.to_s).to eq 'Content'
11
+ expect(cell.to_html).to include 'Content'
12
+ expect(cell.to_html).to include '<td'
13
+ expect(cell.to_html).to include '/td>'
14
+ expect(cell.to_html).to_not include 'cols'
15
+ puts cell.to_html
16
+ end
17
+
18
+ it 'Test 2' do
19
+ cell = ::StHtmlTable::Cell.new(nil, nil)
20
+ cell.text = 'Content'
21
+ cell.cols = 2
22
+ expect(cell.to_s).to eq 'Content'
23
+ expect(cell.to_html).to include 'Content'
24
+ expect(cell.to_html).to include '<td'
25
+ expect(cell.to_html).to include 'cols'
26
+ expect(cell.to_html).to include '/td>'
27
+ puts cell.to_html
28
+ end
29
+
30
+ it 'Test 3' do
31
+ cell = ::StHtmlTable::Cell.new(nil, nil)
32
+ cell.text = 'Content'
33
+ cell.cols = 2
34
+ cell.td_style = 'class="cell_class_name"'
35
+ expect(cell.to_s).to eq 'Content'
36
+ expect(cell.to_html).to include 'Content'
37
+ expect(cell.to_html).to include '<td'
38
+ expect(cell.to_html).to include 'cols'
39
+ expect(cell.to_html).to include 'class'
40
+ expect(cell.to_html).to include '/td>'
41
+ puts cell.to_html
42
+ end
43
+
44
+ it 'Test 4' do
45
+ cell = ::StHtmlTable::Cell.new(nil, nil)
46
+ cell.text = 'Content <b>bold</b>'
47
+ cell.cols = 2
48
+ cell.td_style = 'class="cell_class_name"'
49
+ expect(cell.to_s).to eq 'Content bold'
50
+ expect(cell.to_html).to include 'Content <b>bold</b>'
51
+ expect(cell.to_html).to include '<td'
52
+ expect(cell.to_html).to include 'cols'
53
+ expect(cell.to_html).to include 'class'
54
+ expect(cell.to_html).to include '/td>'
55
+ puts cell.to_html
56
+ end
57
+
58
+ end
@@ -0,0 +1,39 @@
1
+ require 'rspec'
2
+ require 'st_html_table'
3
+
4
+
5
+ describe 'Проверка методов StHtmlTable::Cell.*' do
6
+
7
+ it 'Test 1' do
8
+ table = ::StHtmlTable::Table.new
9
+ table.create({id: 'id', url: 'URL', views: 'Views' }, padding: 3)
10
+
11
+ row = table.get_row(0)
12
+ row.type = :success
13
+ row.add(:id, 0, align: :right)
14
+ row.add(:url, "http://st-html-table.ru", align: :left, italic: true)
15
+ row.add(:views, 456, align: :center)
16
+
17
+ row = table.get_row(100)
18
+ row.type = :fail
19
+ row.add(:id, 100, align: :right)
20
+ row.add(:url, "http://big-url-of-st-html-table.ru", align: :left, italic: true)
21
+ row.add(:views, 6374637, align: :center)
22
+
23
+ row = table.get_row(200)
24
+ row.type = :neutral
25
+ row.add(:id, 200, align: :right)
26
+ row.add(:url, "http://big-st-html-table-200.ru", align: :left, italic: true)
27
+ row.add(:views, 63645, align: :center)
28
+
29
+ row = table.get_row(300)
30
+ row.type = :warn
31
+ row.add(:id, 300, align: :right)
32
+ row.add(:url, "http://big-st-html-table-300.ru", align: :left, italic: true)
33
+ row.add(:views, 343, align: :center)
34
+
35
+
36
+ puts table.to_html
37
+ end
38
+
39
+ end
data/test/test.html ADDED
@@ -0,0 +1,70 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head lang="en">
4
+ <meta charset="UTF-8">
5
+ <title></title>
6
+ </head>
7
+ <body>
8
+
9
+ <table cellpadding="3px" cellspacing="0" style="border: 1px solid #eaeaea; border-collapse:collapse;">
10
+ <tr style="color:#ffffff;background:#389bb9;" valign="center">
11
+ <th align="center" style='font-weight:bold;border: 1px solid #eaeaea;'>
12
+ id
13
+ </th>
14
+ <th align="center" style='font-weight:bold;border: 1px solid #eaeaea;'>
15
+ URL
16
+ </th>
17
+ <th align="center" style='font-weight:bold;border: 1px solid #eaeaea;'>
18
+ Views
19
+ </th>
20
+ </tr>
21
+ <tr bgcolor="#c4d7be">
22
+ <td align="right" style='border: 1px solid #eaeaea;'>
23
+ 0
24
+ </td>
25
+ <td align="left" style='font-style:italic;border: 1px solid #eaeaea;'>
26
+ http://st-html-table.ru
27
+ </td>
28
+ <td align="center" style='border: 1px solid #eaeaea;'>
29
+ 456
30
+ </td>
31
+ </tr>
32
+ <tr bgcolor="#efbcbe">
33
+ <td align="right" style='border: 1px solid #eaeaea;'>
34
+ 100
35
+ </td>
36
+ <td align="left" style='font-style:italic;border: 1px solid #eaeaea;'>
37
+ http://big-url-of-st-html-table.ru
38
+ </td>
39
+ <td align="center" style='border: 1px solid #eaeaea;'>
40
+ 6374637
41
+ </td>
42
+ </tr>
43
+ <tr bgcolor="#e6e6e6">
44
+ <td align="right" style='border: 1px solid #eaeaea;'>
45
+ 200
46
+ </td>
47
+ <td align="left" style='font-style:italic;border: 1px solid #eaeaea;'>
48
+ http://big-st-html-table-200.ru
49
+ </td>
50
+ <td align="center" style='border: 1px solid #eaeaea;'>
51
+ 63645
52
+ </td>
53
+ </tr>
54
+ <tr bgcolor="efe685">
55
+ <td align="right" style='border: 1px solid #eaeaea;'>
56
+ 300
57
+ </td>
58
+ <td align="left" style='font-style:italic;border: 1px solid #eaeaea;'>
59
+ http://big-st-html-table-300.ru
60
+ </td>
61
+ <td align="center" style='border: 1px solid #eaeaea;'>
62
+ 343
63
+ </td>
64
+ </tr>
65
+ </table>
66
+
67
+
68
+
69
+ </body>
70
+ </html>
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: st_html_table
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - StanZhuravlev
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-06-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.9'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.9'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: |-
42
+ Библиотека позволяет формировать красиво форматированные таблицы в формате HTML, например,
43
+ для передаче по электроннйо почты. Библиотека предназначена для использования в составе различных CLI-скриптов,
44
+ в частности, в составе библиотеки cli_application
45
+ email:
46
+ - stan@post-api.ru
47
+ executables: []
48
+ extensions: []
49
+ extra_rdoc_files: []
50
+ files:
51
+ - LICENSE.txt
52
+ - README.md
53
+ - lib/st_html_table.rb
54
+ - lib/st_html_table/cell.rb
55
+ - lib/st_html_table/row.rb
56
+ - lib/st_html_table/table.rb
57
+ - lib/st_html_table/version.rb
58
+ - test/cell_lib_spec.rb
59
+ - test/table_lib_spec.rb
60
+ - test/test.html
61
+ homepage: https://github.com/StanZhuravlev/st_html_table
62
+ licenses:
63
+ - MIT
64
+ metadata:
65
+ allowed_push_host: https://rubygems.org
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ - lib/st_html_table
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 2.2.1
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubyforge_project:
83
+ rubygems_version: 2.4.5
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: "Формирование таблиц в формате HTML"
87
+ test_files: []