proforma-html-renderer 1.0.0.pre.alpha

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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +8 -0
  3. data/.gitignore +5 -0
  4. data/.rubocop.yml +11 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +20 -0
  7. data/CHANGELOG.md +3 -0
  8. data/Gemfile +5 -0
  9. data/Gemfile.lock +111 -0
  10. data/Guardfile +16 -0
  11. data/LICENSE +7 -0
  12. data/README.md +141 -0
  13. data/Rakefile +8 -0
  14. data/bin/console +11 -0
  15. data/bin/render +34 -0
  16. data/bin/snapshot +23 -0
  17. data/lib/proforma/html_renderer/object_writer.rb +42 -0
  18. data/lib/proforma/html_renderer/proforma_writer.rb +51 -0
  19. data/lib/proforma/html_renderer/version.rb +14 -0
  20. data/lib/proforma/html_renderer/writer.rb +77 -0
  21. data/lib/proforma/html_renderer.rb +47 -0
  22. data/proforma-html-renderer.gemspec +34 -0
  23. data/spec/fixtures/aloha.txt.erb +1 -0
  24. data/spec/fixtures/snapshot/config.yml +103 -0
  25. data/spec/fixtures/snapshot/images/logo.png +0 -0
  26. data/spec/fixtures/snapshot/output/0.User List.html +1936 -0
  27. data/spec/proforma/html_renderer/object_writer_spec.rb +40 -0
  28. data/spec/proforma/html_renderer/proforma_writer_spec.rb +19 -0
  29. data/spec/proforma/html_renderer/writer_spec.rb +49 -0
  30. data/spec/proforma/html_renderer_spec.rb +33 -0
  31. data/spec/rendering_helper.rb +98 -0
  32. data/spec/spec_helper.rb +25 -0
  33. data/templates/banner.html.erb +33 -0
  34. data/templates/header.html.erb +3 -0
  35. data/templates/pane.html.erb +36 -0
  36. data/templates/prototype.html.erb +73 -0
  37. data/templates/separator.html.erb +1 -0
  38. data/templates/spacer.html.erb +1 -0
  39. data/templates/table.html.erb +42 -0
  40. data/templates/text.html.erb +3 -0
  41. metadata +222 -0
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright (c) 2019-present, Blue Marble Payroll, LLC
5
+ #
6
+ # This source code is licensed under the MIT license found in the
7
+ # LICENSE file in the root directory of this source tree.
8
+ #
9
+
10
+ require 'spec_helper'
11
+
12
+ describe Proforma::HtmlRenderer::ObjectWriter do
13
+ let(:string_name) { 'string.txt.erb' }
14
+
15
+ let(:string_template) { 'String Value: <%= object %>' }
16
+
17
+ let(:writer) do
18
+ Proforma::HtmlRenderer::Writer.new(
19
+ files: { string_name => string_template }
20
+ )
21
+ end
22
+
23
+ subject do
24
+ described_class.new(
25
+ names_by_class: {
26
+ String => 'string.txt.erb'
27
+ },
28
+ writer: writer
29
+ )
30
+ end
31
+
32
+ context 'when using cached files' do
33
+ it 'renders template for String object' do
34
+ object = 'ABC123'
35
+ expected = "String Value: #{object}"
36
+
37
+ expect(subject.render(object)).to eq(expected)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright (c) 2019-present, Blue Marble Payroll, LLC
5
+ #
6
+ # This source code is licensed under the MIT license found in the
7
+ # LICENSE file in the root directory of this source tree.
8
+ #
9
+
10
+ require 'spec_helper'
11
+
12
+ describe Proforma::HtmlRenderer::ProformaWriter do
13
+ it 'should provide a singleton instance' do
14
+ first_call = described_class.instance
15
+ second_call = described_class.instance
16
+
17
+ expect(first_call).to eq(second_call)
18
+ end
19
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright (c) 2019-present, Blue Marble Payroll, LLC
5
+ #
6
+ # This source code is licensed under the MIT license found in the
7
+ # LICENSE file in the root directory of this source tree.
8
+ #
9
+
10
+ require 'spec_helper'
11
+
12
+ describe Proforma::HtmlRenderer::Writer do
13
+ let(:intro_name) { 'example.txt.erb' }
14
+ let(:aloha_name) { 'aloha.txt.erb' }
15
+
16
+ let(:intro_template) { 'My name is <%= first_name %>' }
17
+
18
+ subject do
19
+ described_class.new(
20
+ directory: File.join(__dir__, '..', '..', 'fixtures'),
21
+ files: { intro_name => intro_template }
22
+ )
23
+ end
24
+
25
+ describe '#initialize with no arguments' do
26
+ it 'should set directory to this libraries template dir' do
27
+ actual = File.expand_path(described_class.new.send(:directory))
28
+ expected = File.expand_path(File.join(__dir__, '..', '..', '..', 'templates'))
29
+
30
+ expect(actual).to eq(expected)
31
+ end
32
+ end
33
+
34
+ context 'when using cached files' do
35
+ it 'renders ERB template' do
36
+ expected = 'My name is Earl'
37
+
38
+ expect(subject.render(intro_name, first_name: 'Earl')).to eq(expected)
39
+ end
40
+ end
41
+
42
+ context 'when not using cached files' do
43
+ it 'renders ERB template' do
44
+ expected = 'Aloha, Matty Cakes!'
45
+
46
+ expect(subject.render(aloha_name, full_name: 'Matty Cakes')).to eq(expected)
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright (c) 2019-present, Blue Marble Payroll, LLC
5
+ #
6
+ # This source code is licensed under the MIT license found in the
7
+ # LICENSE file in the root directory of this source tree.
8
+ #
9
+
10
+ require 'rendering_helper'
11
+ require 'spec_helper'
12
+
13
+ describe Proforma::HtmlRenderer do
14
+ specify 'snapshot has been un-modified' do
15
+ snapshot_dir = File.expand_path(File.join(__dir__, '..', 'fixtures', 'snapshot'))
16
+ rendering_helper = RenderingHelper.new(snapshot_dir)
17
+
18
+ actual_output = rendering_helper.render.map.with_index do |output, index|
19
+ [
20
+ rendering_helper.output_filename(output, index),
21
+ output.contents
22
+ ]
23
+ end.to_h
24
+
25
+ output_glob = File.join(snapshot_dir, 'output', '*')
26
+
27
+ expected_output = Dir[output_glob].map do |filename|
28
+ [File.basename(filename), File.open(filename, 'rb').read]
29
+ end.to_h
30
+
31
+ expect(actual_output).to eq(expected_output)
32
+ end
33
+ end
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright (c) 2019-present, Blue Marble Payroll, LLC
5
+ #
6
+ # This source code is licensed under the MIT license found in the
7
+ # LICENSE file in the root directory of this source tree.
8
+ #
9
+
10
+ require './lib/proforma/html_renderer'
11
+
12
+ # This class can render based on a conventional directory structure of input files.
13
+ class RenderingHelper
14
+ class << self
15
+ def folders(path)
16
+ Dir.entries(path).select do |entry|
17
+ File.directory?(File.join(path, entry)) && !%w[. ..].include?(entry)
18
+ end
19
+ end
20
+ end
21
+
22
+ attr_reader :path
23
+
24
+ def initialize(path)
25
+ @path = path
26
+ end
27
+
28
+ def render
29
+ images = images_hash(images_dir)
30
+ config = yaml_read(config_filename)
31
+ data = data_merge(config['data'], images)
32
+ template = config['template'] || {}
33
+ evaluator = config['evaluator'] || Proforma::HashEvaluator.new
34
+ renderer = config['renderer'] || Proforma::HtmlRenderer.new
35
+
36
+ Proforma.render(
37
+ data,
38
+ template,
39
+ evaluator: evaluator,
40
+ renderer: renderer
41
+ )
42
+ end
43
+
44
+ def render_and_save
45
+ output_dir = File.join(path, 'output')
46
+
47
+ FileUtils.mkdir_p(output_dir)
48
+
49
+ render.each_with_index do |output, index|
50
+ name = output_filename(output, index)
51
+ full_path = File.join(output_dir, name)
52
+
53
+ IO.write(full_path, output.contents)
54
+ end
55
+ end
56
+
57
+ def output_filename(output, index)
58
+ name_without_extension = [
59
+ index.to_s,
60
+ output.title.to_s
61
+ ].reject(&:empty?).join('.')
62
+
63
+ "#{name_without_extension}#{output.extension}"
64
+ end
65
+
66
+ private
67
+
68
+ def images_dir
69
+ File.join(path, 'images')
70
+ end
71
+
72
+ def config_filename
73
+ File.join(path, 'config.yml')
74
+ end
75
+
76
+ def yaml_read(file)
77
+ YAML.safe_load(File.open(file))
78
+ end
79
+
80
+ def data_merge(data, hash)
81
+ if data.is_a?(Array)
82
+ data.map do |record|
83
+ record.merge(hash)
84
+ end
85
+ elsif data.is_a?(Hash)
86
+ data.merge(hash)
87
+ end
88
+ end
89
+
90
+ def images_hash(path)
91
+ images_glob = File.join(path, '*')
92
+
93
+ Dir[images_glob].map do |image_filename|
94
+ key = File.basename(image_filename, File.extname(image_filename))
95
+ [key, File.open(image_filename, 'rb')]
96
+ end.to_h
97
+ end
98
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright (c) 2018-present, Blue Marble Payroll, LLC
5
+ #
6
+ # This source code is licensed under the MIT license found in the
7
+ # LICENSE file in the root directory of this source tree.
8
+ #
9
+
10
+ require 'fileutils'
11
+ require 'pry'
12
+ require 'pry-byebug'
13
+ require 'yaml'
14
+
15
+ unless ENV['DISABLE_SIMPLECOV'] == 'true'
16
+ require 'simplecov'
17
+ require 'simplecov-console'
18
+
19
+ SimpleCov.formatter = SimpleCov::Formatter::Console
20
+ SimpleCov.start do
21
+ add_filter %r{\A/spec/}
22
+ end
23
+ end
24
+
25
+ require './lib/proforma/html_renderer'
@@ -0,0 +1,33 @@
1
+ <%
2
+ def image_style
3
+ [].tap do |style|
4
+ style << "width: #{object.image_width}px" if object.image_width
5
+ style << "height: #{object.image_height}px" if object.image_height
6
+ end.join(';')
7
+ end
8
+
9
+ def image_cell_style
10
+ ['padding-right: 5px'].tap do |style|
11
+ style << "width: #{object.image_width}px" if object.image_width && object.image
12
+ end.join(';')
13
+ end
14
+ %>
15
+
16
+ <table class="banner">
17
+ <tbody>
18
+ <tr>
19
+ <% if object.image -%>
20
+ <td style="<%= image_cell_style -%>">
21
+ <img style="<%= image_style -%>" src="data:image/jpeg;charset=utf-8;base64,<%= Base64.encode64(object.image.read) -%>" />
22
+ </td>
23
+ <% end -%>
24
+ <td>
25
+ <% if !object.title.empty? -%>
26
+ <strong><%= object.title -%></strong>
27
+ <br>
28
+ <% end -%>
29
+ <%= object.details -%>
30
+ </td>
31
+ </tr>
32
+ </tbody>
33
+ </table>
@@ -0,0 +1,3 @@
1
+ <% unless !object.value.to_s.empty? -%>
2
+ <h1><%= object.value %></h1>
3
+ <% end -%>
@@ -0,0 +1,36 @@
1
+ <%
2
+ col_count = object.columns&.length || 0
3
+ row_count = object.columns&.map { |c| c.lines.length }&.max || 0
4
+
5
+ def label_cell_style(column)
6
+ return unless column
7
+
8
+ ["font-weight: #{options.bold_weight}"].tap do |styles|
9
+ styles << "width: #{column.label_width}%" if column.label_width
10
+ end.join(';')
11
+ end
12
+
13
+ def value_cell_style(column)
14
+ return unless column
15
+
16
+ [].tap do |styles|
17
+ styles << "text-align: #{column.align}" if !column.align.to_s.empty?
18
+ styles << "width: #{column.value_width}%" if column.value_width
19
+ end.join(';')
20
+ end
21
+ %>
22
+
23
+ <table class="pane">
24
+ <tbody>
25
+ <% (0...row_count).each do |row_index| -%>
26
+ <tr>
27
+ <% (0...col_count).each do |col_index| -%>
28
+ <% column = object.columns[col_index] -%>
29
+ <% line = column&.lines[row_index] -%>
30
+ <td style="<%= label_cell_style(column) -%>"><%= line&.label %></td>
31
+ <td style="<%= value_cell_style(column) -%>"><%= line&.value %></td>
32
+ <% end -%>
33
+ <tr>
34
+ <% end -%>
35
+ </tbody>
36
+ </table>
@@ -0,0 +1,73 @@
1
+ <!doctype html>
2
+
3
+ <html lang="en">
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <style>
7
+ * {
8
+ box-sizing: border-box;
9
+ font-family: <%= options.font_family %>;
10
+ font-size: <%= options.text_font_size %>px;
11
+ line-height: <%= options.text_font_size + options.line_height_increase %>px;
12
+ font-weight: normal;
13
+ margin: 0;
14
+ padding: 0;
15
+ }
16
+
17
+ strong {
18
+ font-weight: <%= options.bold_weight %>;
19
+ }
20
+
21
+ p, h1, table {
22
+ margin: 8px 0;
23
+ }
24
+
25
+ hr {
26
+ border-top: 1px solid black;
27
+ }
28
+
29
+ h1 {
30
+ font-size: <%= options.header_font_size %>px;
31
+ font-weight: <%= options.bold_weight %>;
32
+ }
33
+
34
+ body {
35
+ margin: 15px;
36
+ }
37
+
38
+ table {
39
+ border-collapse: collapse;
40
+ border-spacing: 0;
41
+ width: 100%;
42
+ }
43
+
44
+ td, th {
45
+ vertical-align: top;
46
+ text-align: left;
47
+ padding: 5px;
48
+ }
49
+
50
+ table.table th {
51
+ border-bottom: 1px solid black;
52
+ }
53
+
54
+ table.table tbody td {
55
+ border-bottom: 1px solid black;
56
+ }
57
+
58
+ table.table tfoot td, table.table th {
59
+ background-color: #D3D3D3;
60
+ font-weight: <%= options.bold_weight %>;
61
+ }
62
+
63
+ table.pane td, table.pane th {
64
+ padding: 5px 5px 5px 0;
65
+ }
66
+ </style>
67
+ </head>
68
+ <body>
69
+ <% object.children.each do |child| -%>
70
+ <%= ProformaWriter.render(child, options) %>
71
+ <% end -%>
72
+ </body>
73
+ </html>
@@ -0,0 +1 @@
1
+ <hr>
@@ -0,0 +1 @@
1
+ <br>
@@ -0,0 +1,42 @@
1
+ <%
2
+ def cell_style(cell)
3
+ [].tap do |styles|
4
+ styles << "text-align: #{cell.align}" if !cell.align.to_s.empty?
5
+ styles << "width: #{cell.width}%" if cell.width
6
+ end.join(';')
7
+ end
8
+ %>
9
+
10
+ <% if object.body.rows.any? -%>
11
+ <table class="table">
12
+ <thead>
13
+ <% object.header.rows.each do |row| -%>
14
+ <tr>
15
+ <% row.cells.each do |cell| -%>
16
+ <th style="<%= cell_style(cell) %>"><%= cell.text %></th>
17
+ <% end -%>
18
+ </tr>
19
+ <% end -%>
20
+ </thead>
21
+ <tbody>
22
+ <% object.body.rows.each do |row| -%>
23
+ <tr>
24
+ <% row.cells.each do |cell| -%>
25
+ <td style="<%= cell_style(cell) %>"><%= cell.text %></td>
26
+ <% end -%>
27
+ </tr>
28
+ <% end -%>
29
+ </tbody>
30
+ <tfoot>
31
+ <% object.footer.rows.each do |row| -%>
32
+ <tr>
33
+ <% row.cells.each do |cell| -%>
34
+ <td style="<%= cell_style(cell) %>"><%= cell.text %></td>
35
+ <% end -%>
36
+ </tr>
37
+ <% end -%>
38
+ </tfoot>
39
+ </table>
40
+ <% elsif !object.empty_message.to_s.empty? -%>
41
+ <p><%= object.empty_message %></p>
42
+ <% end -%>
@@ -0,0 +1,3 @@
1
+ <% if !object.value.to_s.empty? -%>
2
+ <p><%= object.value %></p>
3
+ <% end -%>
metadata ADDED
@@ -0,0 +1,222 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: proforma-html-renderer
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.pre.alpha
5
+ platform: ruby
6
+ authors:
7
+ - Matthew Ruggio
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-06-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: proforma
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: guard-rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.7'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4.7'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry-byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.8'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.8'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.63.1
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.63.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: simplecov
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.16.1
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.16.1
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov-console
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 0.4.2
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 0.4.2
139
+ description: " Proforma is a virtual document object model. This library allows
140
+ you to output HTML for a virtual Proforma document.\n"
141
+ email:
142
+ - mruggio@bluemarblepayroll.com
143
+ executables:
144
+ - console
145
+ - render
146
+ - snapshot
147
+ extensions: []
148
+ extra_rdoc_files: []
149
+ files:
150
+ - ".editorconfig"
151
+ - ".gitignore"
152
+ - ".rubocop.yml"
153
+ - ".ruby-version"
154
+ - ".travis.yml"
155
+ - CHANGELOG.md
156
+ - Gemfile
157
+ - Gemfile.lock
158
+ - Guardfile
159
+ - LICENSE
160
+ - README.md
161
+ - Rakefile
162
+ - bin/console
163
+ - bin/render
164
+ - bin/snapshot
165
+ - lib/proforma/html_renderer.rb
166
+ - lib/proforma/html_renderer/object_writer.rb
167
+ - lib/proforma/html_renderer/proforma_writer.rb
168
+ - lib/proforma/html_renderer/version.rb
169
+ - lib/proforma/html_renderer/writer.rb
170
+ - proforma-html-renderer.gemspec
171
+ - spec/fixtures/aloha.txt.erb
172
+ - spec/fixtures/snapshot/config.yml
173
+ - spec/fixtures/snapshot/images/logo.png
174
+ - spec/fixtures/snapshot/output/0.User List.html
175
+ - spec/proforma/html_renderer/object_writer_spec.rb
176
+ - spec/proforma/html_renderer/proforma_writer_spec.rb
177
+ - spec/proforma/html_renderer/writer_spec.rb
178
+ - spec/proforma/html_renderer_spec.rb
179
+ - spec/rendering_helper.rb
180
+ - spec/spec_helper.rb
181
+ - templates/banner.html.erb
182
+ - templates/header.html.erb
183
+ - templates/pane.html.erb
184
+ - templates/prototype.html.erb
185
+ - templates/separator.html.erb
186
+ - templates/spacer.html.erb
187
+ - templates/table.html.erb
188
+ - templates/text.html.erb
189
+ homepage: https://github.com/bluemarblepayroll/proforma-html-renderer
190
+ licenses:
191
+ - MIT
192
+ metadata: {}
193
+ post_install_message:
194
+ rdoc_options: []
195
+ require_paths:
196
+ - lib
197
+ required_ruby_version: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: 2.3.8
202
+ required_rubygems_version: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - ">"
205
+ - !ruby/object:Gem::Version
206
+ version: 1.3.1
207
+ requirements: []
208
+ rubygems_version: 3.0.1
209
+ signing_key:
210
+ specification_version: 4
211
+ summary: Proforma renderer plugin for generating HTML.
212
+ test_files:
213
+ - spec/fixtures/aloha.txt.erb
214
+ - spec/fixtures/snapshot/config.yml
215
+ - spec/fixtures/snapshot/images/logo.png
216
+ - spec/fixtures/snapshot/output/0.User List.html
217
+ - spec/proforma/html_renderer/object_writer_spec.rb
218
+ - spec/proforma/html_renderer/proforma_writer_spec.rb
219
+ - spec/proforma/html_renderer/writer_spec.rb
220
+ - spec/proforma/html_renderer_spec.rb
221
+ - spec/rendering_helper.rb
222
+ - spec/spec_helper.rb