thinreports 0.9.1 → 0.10.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.
Files changed (179) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +41 -0
  3. data/.travis.yml +4 -6
  4. data/CHANGELOG.md +21 -2
  5. data/Gemfile +2 -4
  6. data/README.md +4 -5
  7. data/Rakefile +7 -8
  8. data/examples/character_spacing/character_spacing.rb +1 -1
  9. data/examples/dynamic_image/dynamic_image.rb +3 -3
  10. data/examples/dynamic_style/dynamic_style.rb +1 -1
  11. data/examples/eudc/eudc.rb +1 -1
  12. data/examples/helper.rb +2 -2
  13. data/examples/hidden_shapes/hidden_shapes.rb +1 -1
  14. data/examples/list_events/list_events.rb +1 -1
  15. data/examples/list_manual_generation/list_manual_generation.rb +1 -1
  16. data/examples/list_page_number/list_page_number.rb +1 -1
  17. data/examples/page_number/page_number.rb +1 -1
  18. data/examples/palleted_png/palleted_png.rb +1 -3
  19. data/examples/password_setting/password_setting.rb +1 -1
  20. data/examples/report_callbacks/report_callbacks.rb +1 -1
  21. data/examples/single_line_tblock/single_line_tblock.rb +1 -1
  22. data/examples/tblock_overflow/tblock_overflow.rb +1 -1
  23. data/examples/tblock_styles/tblock_styles.rb +1 -1
  24. data/examples/text_align/text_align.rb +1 -1
  25. data/examples/typeB_page_size/typeB_page_size.rb +1 -1
  26. data/examples/word_wrap/word_wrap.rb +1 -1
  27. data/lib/thinreports.rb +16 -15
  28. data/lib/thinreports/config.rb +2 -24
  29. data/lib/thinreports/core/errors.rb +6 -17
  30. data/lib/thinreports/core/format/base.rb +62 -61
  31. data/lib/thinreports/core/shape.rb +13 -14
  32. data/lib/thinreports/core/shape/base.rb +3 -12
  33. data/lib/thinreports/core/shape/base/interface.rb +35 -32
  34. data/lib/thinreports/core/shape/base/internal.rb +45 -43
  35. data/lib/thinreports/core/shape/basic.rb +12 -12
  36. data/lib/thinreports/core/shape/basic/block_format.rb +8 -6
  37. data/lib/thinreports/core/shape/basic/block_interface.rb +24 -22
  38. data/lib/thinreports/core/shape/basic/block_internal.rb +28 -26
  39. data/lib/thinreports/core/shape/basic/format.rb +11 -9
  40. data/lib/thinreports/core/shape/basic/interface.rb +79 -77
  41. data/lib/thinreports/core/shape/basic/internal.rb +17 -14
  42. data/lib/thinreports/core/shape/image_block.rb +9 -9
  43. data/lib/thinreports/core/shape/image_block/format.rb +7 -5
  44. data/lib/thinreports/core/shape/image_block/interface.rb +15 -13
  45. data/lib/thinreports/core/shape/image_block/internal.rb +10 -8
  46. data/lib/thinreports/core/shape/list.rb +13 -13
  47. data/lib/thinreports/core/shape/list/format.rb +83 -77
  48. data/lib/thinreports/core/shape/list/manager.rb +182 -176
  49. data/lib/thinreports/core/shape/list/page.rb +94 -93
  50. data/lib/thinreports/core/shape/list/page_state.rb +42 -40
  51. data/lib/thinreports/core/shape/list/section_format.rb +28 -26
  52. data/lib/thinreports/core/shape/list/section_interface.rb +42 -40
  53. data/lib/thinreports/core/shape/list/section_internal.rb +21 -19
  54. data/lib/thinreports/core/shape/manager.rb +4 -13
  55. data/lib/thinreports/core/shape/manager/format.rb +21 -19
  56. data/lib/thinreports/core/shape/manager/internal.rb +88 -84
  57. data/lib/thinreports/core/shape/manager/target.rb +93 -95
  58. data/lib/thinreports/core/shape/page_number.rb +9 -9
  59. data/lib/thinreports/core/shape/page_number/format.rb +20 -18
  60. data/lib/thinreports/core/shape/page_number/interface.rb +20 -18
  61. data/lib/thinreports/core/shape/page_number/internal.rb +47 -44
  62. data/lib/thinreports/core/shape/style.rb +5 -14
  63. data/lib/thinreports/core/shape/style/base.rb +121 -120
  64. data/lib/thinreports/core/shape/style/basic.rb +12 -10
  65. data/lib/thinreports/core/shape/style/graphic.rb +35 -33
  66. data/lib/thinreports/core/shape/style/text.rb +113 -107
  67. data/lib/thinreports/core/shape/text.rb +9 -9
  68. data/lib/thinreports/core/shape/text/format.rb +10 -9
  69. data/lib/thinreports/core/shape/text/interface.rb +13 -11
  70. data/lib/thinreports/core/shape/text/internal.rb +14 -12
  71. data/lib/thinreports/core/shape/text_block.rb +10 -10
  72. data/lib/thinreports/core/shape/text_block/format.rb +35 -33
  73. data/lib/thinreports/core/shape/text_block/formatter.rb +26 -24
  74. data/lib/thinreports/core/shape/text_block/formatter/basic.rb +25 -25
  75. data/lib/thinreports/core/shape/text_block/formatter/datetime.rb +15 -12
  76. data/lib/thinreports/core/shape/text_block/formatter/number.rb +45 -39
  77. data/lib/thinreports/core/shape/text_block/formatter/padding.rb +17 -14
  78. data/lib/thinreports/core/shape/text_block/interface.rb +25 -23
  79. data/lib/thinreports/core/shape/text_block/internal.rb +68 -68
  80. data/lib/thinreports/core/utils.rb +4 -3
  81. data/lib/thinreports/generator/pdf.rb +24 -25
  82. data/lib/thinreports/generator/pdf/document.rb +109 -110
  83. data/lib/thinreports/generator/pdf/document/draw_shape.rb +58 -51
  84. data/lib/thinreports/generator/pdf/document/draw_template_items.rb +51 -47
  85. data/lib/thinreports/generator/pdf/document/font.rb +62 -59
  86. data/lib/thinreports/generator/pdf/document/graphics.rb +32 -33
  87. data/lib/thinreports/generator/pdf/document/graphics/attributes.rb +122 -121
  88. data/lib/thinreports/generator/pdf/document/graphics/basic.rb +113 -114
  89. data/lib/thinreports/generator/pdf/document/graphics/image.rb +58 -150
  90. data/lib/thinreports/generator/pdf/document/graphics/text.rb +152 -137
  91. data/lib/thinreports/generator/pdf/document/page.rb +63 -64
  92. data/lib/thinreports/generator/pdf/document/parse_color.rb +37 -37
  93. data/lib/thinreports/generator/pdf/drawer/base.rb +41 -41
  94. data/lib/thinreports/generator/pdf/drawer/list.rb +48 -45
  95. data/lib/thinreports/generator/pdf/drawer/list_section.rb +42 -40
  96. data/lib/thinreports/generator/pdf/drawer/page.rb +101 -96
  97. data/lib/thinreports/generator/pdf/prawn_ext.rb +4 -30
  98. data/lib/thinreports/generator/pdf/prawn_ext/calc_image_dimensions.rb +34 -0
  99. data/lib/thinreports/generator/pdf/prawn_ext/width_of.rb +29 -0
  100. data/lib/thinreports/layout.rb +5 -7
  101. data/lib/thinreports/layout/base.rb +5 -7
  102. data/lib/thinreports/layout/format.rb +18 -13
  103. data/lib/thinreports/layout/legacy_schema.rb +18 -10
  104. data/lib/thinreports/layout/version.rb +22 -25
  105. data/lib/thinreports/report.rb +4 -6
  106. data/lib/thinreports/report/base.rb +24 -51
  107. data/lib/thinreports/report/internal.rb +9 -11
  108. data/lib/thinreports/report/page.rb +5 -6
  109. data/lib/thinreports/version.rb +2 -2
  110. data/test/schema_helper.rb +4 -3
  111. data/test/test_helper.rb +9 -3
  112. data/test/unit/core/format/test_base.rb +1 -1
  113. data/test/unit/core/shape/base/test_internal.rb +1 -1
  114. data/test/unit/core/shape/basic/test_block_format.rb +1 -1
  115. data/test/unit/core/shape/basic/test_block_interface.rb +1 -1
  116. data/test/unit/core/shape/basic/test_block_internal.rb +1 -1
  117. data/test/unit/core/shape/basic/test_format.rb +1 -1
  118. data/test/unit/core/shape/basic/test_interface.rb +1 -1
  119. data/test/unit/core/shape/basic/test_internal.rb +1 -1
  120. data/test/unit/core/shape/image_block/test_interface.rb +1 -1
  121. data/test/unit/core/shape/image_block/test_internal.rb +1 -1
  122. data/test/unit/core/shape/list/test_format.rb +1 -1
  123. data/test/unit/core/shape/list/test_manager.rb +4 -4
  124. data/test/unit/core/shape/list/test_page.rb +1 -1
  125. data/test/unit/core/shape/list/test_page_state.rb +1 -1
  126. data/test/unit/core/shape/list/test_section_format.rb +1 -1
  127. data/test/unit/core/shape/list/test_section_interface.rb +2 -2
  128. data/test/unit/core/shape/list/test_section_internal.rb +1 -1
  129. data/test/unit/core/shape/manager/test_format.rb +2 -2
  130. data/test/unit/core/shape/manager/test_internal.rb +3 -3
  131. data/test/unit/core/shape/manager/test_target.rb +1 -1
  132. data/test/unit/core/shape/page_number/test_format.rb +1 -1
  133. data/test/unit/core/shape/page_number/test_interface.rb +1 -1
  134. data/test/unit/core/shape/page_number/test_internal.rb +1 -1
  135. data/test/unit/core/shape/styles/test_base.rb +1 -1
  136. data/test/unit/core/shape/styles/test_basic.rb +1 -1
  137. data/test/unit/core/shape/styles/test_graphic.rb +1 -1
  138. data/test/unit/core/shape/styles/test_text.rb +1 -1
  139. data/test/unit/core/shape/text/test_format.rb +1 -1
  140. data/test/unit/core/shape/text/test_internal.rb +1 -1
  141. data/test/unit/core/shape/text_block/formatter/test_basic.rb +1 -1
  142. data/test/unit/core/shape/text_block/formatter/test_datetime.rb +1 -1
  143. data/test/unit/core/shape/text_block/formatter/test_number.rb +1 -1
  144. data/test/unit/core/shape/text_block/formatter/test_padding.rb +2 -2
  145. data/test/unit/core/shape/text_block/test_format.rb +1 -1
  146. data/test/unit/core/shape/text_block/test_formatter.rb +1 -1
  147. data/test/unit/core/shape/text_block/test_interface.rb +1 -1
  148. data/test/unit/core/shape/text_block/test_internal.rb +3 -3
  149. data/test/unit/core/test_shape.rb +1 -1
  150. data/test/unit/core/test_utils.rb +2 -2
  151. data/test/unit/generator/pdf/document/graphics/test_attributes.rb +1 -1
  152. data/test/unit/generator/pdf/document/graphics/test_basic.rb +2 -1
  153. data/test/unit/generator/pdf/document/graphics/test_image.rb +27 -131
  154. data/test/unit/generator/pdf/document/graphics/test_text.rb +1 -1
  155. data/test/unit/generator/pdf/document/test_font.rb +2 -2
  156. data/test/unit/generator/pdf/document/test_graphics.rb +1 -1
  157. data/test/unit/generator/pdf/document/test_page.rb +7 -7
  158. data/test/unit/generator/pdf/document/test_parse_color.rb +1 -1
  159. data/test/unit/generator/pdf/prawn_ext/test_calc_image_dimensions.rb +41 -0
  160. data/test/unit/generator/pdf/prawn_ext/test_width_of.rb +22 -0
  161. data/test/unit/generator/pdf/test_document.rb +8 -6
  162. data/test/unit/generator/test_pdf.rb +12 -10
  163. data/test/unit/layout/test_base.rb +1 -1
  164. data/test/unit/layout/test_format.rb +2 -2
  165. data/test/unit/layout/test_legacy_schema.rb +4 -4
  166. data/test/unit/layout/test_version.rb +11 -80
  167. data/test/unit/report/test_base.rb +45 -59
  168. data/test/unit/report/test_internal.rb +1 -1
  169. data/test/unit/test_config.rb +1 -16
  170. data/test/unit/test_layout.rb +1 -1
  171. data/test/unit/test_report.rb +1 -1
  172. data/thinreports.gemspec +11 -14
  173. metadata +42 -103
  174. data/lib/thinreports/generator.rb +0 -29
  175. data/lib/thinreports/generator/base.rb +0 -40
  176. data/lib/thinreports/generator/configuration.rb +0 -31
  177. data/lib/thinreports/report/events.rb +0 -32
  178. data/test/unit/generator/test_base.rb +0 -40
  179. data/test/unit/generator/test_configuration.rb +0 -21
@@ -1,10 +1,11 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  require 'json'
4
4
  require 'rexml/document'
5
5
 
6
6
  module Thinreports
7
7
  module Layout
8
+ # rubocop:disable Metrics/ClassLength
8
9
  class LegacySchema
9
10
  include Utils
10
11
 
@@ -13,9 +14,10 @@ module Thinreports
13
14
  @legacy_svg = legacy_schema['svg'].dup
14
15
  @legacy_item_schemas = extract_legacy_item_schemas(legacy_svg)
15
16
 
16
- normalize_svg!(@legacy_svg)
17
+ @legacy_svg = cleanup_svg(@legacy_svg)
17
18
  end
18
19
 
20
+ # rubocop:disable Metrics/AbcSize
19
21
  def upgrade
20
22
  config = legacy_schema['config']
21
23
  page_config = config['page']
@@ -28,7 +30,12 @@ module Thinreports
28
30
  'width' => page_config['width'].to_f,
29
31
  'height' => page_config['height'].to_f,
30
32
  'orientation' => page_config['orientation'],
31
- 'margin' => page_config.values_at('margin-top', 'margin-right', 'margin-bottom', 'margin-left').map(&:to_f)
33
+ 'margin' => page_config.values_at(
34
+ 'margin-top',
35
+ 'margin-right',
36
+ 'margin-bottom',
37
+ 'margin-left'
38
+ ).map(&:to_f)
32
39
  },
33
40
  'items' => item_schemas
34
41
  }
@@ -41,6 +48,7 @@ module Thinreports
41
48
  build_item_schemas_from_svg(svg.elements['/svg/g'])
42
49
  end
43
50
 
51
+ # rubocop:disable Metrics/CyclomaticComplexity
44
52
  def build_item_schemas_from_svg(svg_elements)
45
53
  return [] unless svg_elements
46
54
 
@@ -78,7 +86,7 @@ module Thinreports
78
86
  'display' => display(attributes['x-display']),
79
87
  'texts' => texts,
80
88
  'style' => {
81
- 'font-family' => [ attributes['font-family'] ],
89
+ 'font-family' => [attributes['font-family']],
82
90
  'font-size' => attributes['font-size'].to_f,
83
91
  'color' => attributes['fill'],
84
92
  'font-style' => font_style(attributes),
@@ -144,7 +152,7 @@ module Thinreports
144
152
  end
145
153
 
146
154
  def image_item_schema(attributes)
147
- _, image_type, image_data = attributes['xlink:href'].match(%r|^data:(image/[a-z]+?);base64,(.+)|).to_a
155
+ _, image_type, image_data = attributes['xlink:href'].match(%r{^data:(image/[a-z]+?);base64,(.+)}).to_a
148
156
 
149
157
  {
150
158
  'id' => attributes['x-id'],
@@ -173,7 +181,7 @@ module Thinreports
173
181
  'target' => attributes['x-target'],
174
182
  'display' => display(attributes['x-display']),
175
183
  'style' => {
176
- 'font-family' => [ attributes['font-family'] ],
184
+ 'font-family' => [attributes['font-family']],
177
185
  'font-size' => attributes['font-size'].to_f,
178
186
  'color' => attributes['fill'],
179
187
  'font-style' => font_style(attributes),
@@ -235,7 +243,7 @@ module Thinreports
235
243
  'format' => text_format,
236
244
  'reference-id' => attributes['x-ref-id'],
237
245
  'style' => {
238
- 'font-family' => [ attributes['font-family'] ],
246
+ 'font-family' => [attributes['font-family']],
239
247
  'font-size' => attributes['font-size'].to_f,
240
248
  'color' => attributes['fill'],
241
249
  'font-style' => font_style(attributes),
@@ -368,9 +376,9 @@ module Thinreports
368
376
  items
369
377
  end
370
378
 
371
- def normalize_svg!(svg)
372
- svg.gsub!(/<!--SHAPE.*?SHAPE-->/, '')
373
- svg.gsub!(/<!--LAYOUT(.*?)LAYOUT-->/) { $1 }
379
+ def cleanup_svg(svg)
380
+ cleaned_svg = svg.gsub(/<!--SHAPE.*?SHAPE-->/, '')
381
+ cleaned_svg.gsub(/<!--LAYOUT(.*?)LAYOUT-->/) { $1 }
374
382
  end
375
383
  end
376
384
  end
@@ -1,42 +1,39 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Thinreports
4
4
  module Layout
5
+ class Version
6
+ COMPATIBLE_RULES = ['>= 0.8.0', '< 1.0.0'].freeze
7
+ NEW_SCHEMA_FROM = '0.9.0'.freeze
5
8
 
6
- module Version
7
- REQUIRED_RULES = ['>= 0.8.0', '< 1.0.0']
9
+ class << self
10
+ def compatible_rules
11
+ COMPATIBLE_RULES
12
+ end
13
+ end
8
14
 
9
- # @param [String] version
10
- # @return [Boolean]
11
- def self.compatible?(version)
12
- compare(version, *REQUIRED_RULES)
15
+ def initialize(schema_version)
16
+ @schema_version = normalize_version(schema_version)
13
17
  end
14
18
 
15
- # @param [String] base
16
- # @param [Array<String>] rules
17
- # @return [Boolean]
18
- def self.compare(base, *rules)
19
- rules.all? do |rule|
19
+ def compatible?
20
+ self.class.compatible_rules.all? do |rule|
20
21
  op, ver = rule.split(' ')
21
- comparable_version(base).send(op.to_sym, comparable_version(ver))
22
+ schema_version.send(op.to_sym, normalize_version(ver))
22
23
  end
23
24
  end
24
25
 
25
- # @return [String]
26
- def self.inspect_required_rules
27
- '(' + REQUIRED_RULES.join(' and ') + ')'
26
+ def legacy?
27
+ @schema_version < normalize_version(NEW_SCHEMA_FROM)
28
28
  end
29
29
 
30
- # @param [String] version
31
- # @return [String]
32
- def self.comparable_version(version)
33
- if version =~ /pre/
34
- version.sub(/pre(\d*)$/) { $1 == '' ? '1' : $1 }
35
- else
36
- "#{version}.99"
37
- end
30
+ private
31
+
32
+ attr_reader :schema_version
33
+
34
+ def normalize_version(version)
35
+ Gem::Version.create(version)
38
36
  end
39
37
  end
40
-
41
38
  end
42
39
  end
@@ -1,7 +1,6 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Thinreports
4
-
5
4
  module Report
6
5
  # @see Thinreports::Report::Base#initialize
7
6
  def self.new(*args)
@@ -18,9 +17,8 @@ module Thinreports
18
17
  Base.generate(*args, &block)
19
18
  end
20
19
  end
21
-
22
20
  end
23
21
 
24
- require 'thinreports/report/base'
25
- require 'thinreports/report/internal'
26
- require 'thinreports/report/page'
22
+ require_relative 'report/base'
23
+ require_relative 'report/internal'
24
+ require_relative 'report/page'
@@ -1,8 +1,7 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Thinreports
4
4
  module Report
5
-
6
5
  class Base
7
6
  extend Forwardable
8
7
  include Utils
@@ -14,9 +13,8 @@ module Thinreports
14
13
  # @yieldparam [Thinreports::Report::Base] report
15
14
  # @return [Thinreports::Report::Base]
16
15
  def create(options = {}, &block)
17
- unless block_given?
18
- raise ArgumentError, '#create requires a block'
19
- end
16
+ raise ArgumentError, '#create requires a block' unless block_given?
17
+
20
18
  report = new(options)
21
19
  call_block_in(report, &block)
22
20
  report.finalize
@@ -24,43 +22,28 @@ module Thinreports
24
22
  report
25
23
  end
26
24
 
27
- # @overload generate(type, options = {}, &block)
28
- # @param [Symbol] type
29
- # @param [Hash] options
30
- # @option options [Hash] :report ({}) Options for Report.
31
- # @option options [Hash] :generator ({}) Options for Generator.
32
- # @overload generate(options = {}, &block)
33
- # @param [Hash] options
34
- # @option options [Hash] :report ({}) Options for Report.
35
- # @option options [Hash] :generator ({}) Options for Generator.
25
+ # @param layout (see #initialize)
26
+ # @param filename (see #generate)
27
+ # @param security (see #generate)
28
+ # @param [Hash] report ({}) DEPRECATED. Options for Report.
29
+ # @param [Hash] generator ({}) DEPRECATED. Options for Generator.
36
30
  # @yield (see .create)
37
31
  # @yieldparam (see .create)
38
32
  # @return [String]
39
- def generate(*args, &block)
33
+ def generate(layout: nil, filename: nil, security: nil, report: {}, generator: {}, &block)
40
34
  raise ArgumentError, '#generate requires a block' unless block_given?
41
35
 
42
- report_opts, generator_opts = extract_options!(args)
36
+ if report.any? || generator.any?
37
+ warn '[DEPRECATION] :report and :generator argument has been deprecated. ' \
38
+ 'Use :layout and :filename, :security argument instead.'
39
+ end
43
40
 
44
- report = create(report_opts, &block)
45
- report.generate(*args.push(generator_opts))
46
- end
41
+ layout ||= report[:layout]
42
+ filename ||= generator[:filename]
43
+ security ||= generator[:security]
47
44
 
48
- # @param [Array] args
49
- # @return [Array<Hash>]
50
- def extract_options!(args)
51
- if args.last.is_a?(::Hash)
52
- options = args.pop
53
-
54
- generator = options.delete(:generator) || {}
55
- report = options.delete(:report) || {}
56
-
57
- if options.key?(:layout)
58
- report[:layout] = options.delete(:layout)
59
- end
60
- [report, generator.merge(options)]
61
- else
62
- [{}, {}]
63
- end
45
+ report = create(layout: layout, &block)
46
+ report.generate(filename: filename, security: security)
64
47
  end
65
48
  end
66
49
 
@@ -150,7 +133,7 @@ module Thinreports
150
133
  def add_blank_page(options = {})
151
134
  internal.add_page(Report::BlankPage.new(options[:count]))
152
135
  end
153
- alias_method :blank_page, :add_blank_page
136
+ alias blank_page add_blank_page
154
137
 
155
138
  # @param [Symbol, nil] id
156
139
  # @return [Thinreports::Layout::Base]
@@ -163,24 +146,15 @@ module Thinreports
163
146
  end
164
147
  end
165
148
 
166
- # @overload generate(options = {})
167
- # @param [Hash] options ({})
168
- # @return [String]
169
- # @overload generate(type, options = {})
170
- # This way has been DEPRECATED. Use instead #generate(options = {}).
171
- # @param [Symbol] type
172
- # @return [String]
149
+ # @param [String] filename
150
+ # @param [Hash] security (see http://prawnpdf.org/api-docs/2.0/Prawn/Document/Security.html#encrypt_document-instance_method)
151
+ # @return [String]
173
152
  # @example Generate PDF data
174
153
  # report.generate # => "%PDF-1.4...."
175
154
  # @example Create a PDF file
176
155
  # report.generate(filename: 'foo.pdf')
177
- def generate(*args)
178
- options = args.last.is_a?(::Hash) ? args.pop : {}
179
- type = args.first || Thinreports.config.generator.default
180
- filename = options.delete(:filename)
181
- generator = Thinreports::Generator.new(type, self, options)
182
-
183
- generator.generate(filename)
156
+ def generate(filename: nil, security: nil)
157
+ Thinreports::Generator::PDF.new(self, security: security).generate(filename)
184
158
  end
185
159
 
186
160
  # @see Thinreports::Core::Shape::Manager::Target#list
@@ -191,6 +165,5 @@ module Thinreports
191
165
 
192
166
  def_delegators :internal, :finalize, :finalized?
193
167
  end
194
-
195
168
  end
196
169
  end
@@ -1,8 +1,7 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Thinreports
4
4
  module Report
5
-
6
5
  class Internal
7
6
  attr_reader :pages
8
7
  attr_reader :page
@@ -19,9 +18,9 @@ module Thinreports
19
18
  @default_layout = options[:layout] ? init_layout(options[:layout]) : nil
20
19
 
21
20
  @layout_registry = {}
22
- @finalized = false
23
- @pages = []
24
- @page = nil
21
+ @finalized = false
22
+ @pages = []
23
+ @page = nil
25
24
  @page_count = 0
26
25
 
27
26
  @page_create_handler = nil
@@ -52,10 +51,10 @@ module Thinreports
52
51
  end
53
52
 
54
53
  def finalize
55
- unless finalized?
56
- finalize_current_page
57
- @finalized = true
58
- end
54
+ return if finalized?
55
+
56
+ finalize_current_page
57
+ @finalized = true
59
58
  end
60
59
 
61
60
  def finalized?
@@ -79,7 +78,7 @@ module Thinreports
79
78
  layout
80
79
  end
81
80
 
82
- private
81
+ private
83
82
 
84
83
  def insert_page(new_page)
85
84
  @pages << new_page
@@ -102,6 +101,5 @@ module Thinreports
102
101
  Thinreports::Layout.new(filename, id: id)
103
102
  end
104
103
  end
105
-
106
104
  end
107
105
  end
@@ -1,8 +1,7 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Thinreports
4
4
  module Report
5
-
6
5
  class BlankPage
7
6
  # @example
8
7
  # 3.times do
@@ -51,8 +50,8 @@ module Thinreports
51
50
  def initialize(report, layout, options = {})
52
51
  super(options.key?(:count) ? options[:count] : true)
53
52
 
54
- @report = report
55
- @layout = layout
53
+ @report = report
54
+ @layout = layout
56
55
  @finalized = false
57
56
 
58
57
  initialize_manager(layout.format) do |f|
@@ -65,6 +64,7 @@ module Thinreports
65
64
  false
66
65
  end
67
66
 
67
+ # rubocop:disable Metrics/AbcSize
68
68
  def copy
69
69
  new_page = self.class.new(report, layout, count: count?)
70
70
 
@@ -86,7 +86,7 @@ module Thinreports
86
86
 
87
87
  # For list shapes.
88
88
  if at == :create
89
- manager.lists.values.each {|list| list.manager.finalize }
89
+ manager.lists.values.each { |list| list.manager.finalize }
90
90
  end
91
91
 
92
92
  @finalized = true
@@ -96,6 +96,5 @@ module Thinreports
96
96
  @finalized
97
97
  end
98
98
  end
99
-
100
99
  end
101
100
  end
@@ -1,5 +1,5 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Thinreports
4
- VERSION = '0.9.1'
4
+ VERSION = '0.10.0'.freeze
5
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Thinreports
2
4
  module SchemaHelper
3
5
  BASIC_SCHEMA_JSON = <<-EOF
@@ -108,12 +110,11 @@ EOF
108
110
  EOF
109
111
 
110
112
  def layout_file(options = {})
111
- # FIXME: '0.9.0' -> Thinreports::VERSION
112
- version = options[:version] || '0.9.0'
113
+ schema_version = options[:version] || Thinreports::VERSION
113
114
  schema_json = options[:schema] || BASIC_SCHEMA_JSON
114
115
 
115
116
  Tempfile.open %w( test-thinreports-layout .tlf ) do |file|
116
- file.puts (schema_json % { version: version })
117
+ file.puts (schema_json % { version: schema_version })
117
118
  file
118
119
  end
119
120
  end
@@ -1,14 +1,13 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
- gem 'minitest' # for 1.9.3
4
3
  require 'minitest/autorun'
5
4
  require 'minitest/spec'
6
5
  require 'minitest/unit'
7
6
  require 'mocha/mini_test'
7
+ require 'pdf/inspector'
8
8
 
9
9
  require 'digest/sha1'
10
10
  require 'pathname'
11
- require 'chunky_png'
12
11
  require 'thinreports'
13
12
 
14
13
  require 'schema_helper'
@@ -35,6 +34,13 @@ module Thinreports::TestHelper
35
34
  ROOT.join('tmp')
36
35
  end
37
36
 
37
+ def analyze_pdf_images(pdf_data)
38
+ analyzer = PDF::Inspector::XObject.analyze(pdf_data)
39
+ analyzer.page_xobjects
40
+ .reduce(:merge).values
41
+ .select { |o| o.hash[:Subtype] == :Image }
42
+ end
43
+
38
44
  def teardown
39
45
  super
40
46
  FileUtils.rm Dir.glob(temp_path.join('*'))