thinreports 0.9.1 → 0.11.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 (213) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/test.yml +39 -0
  3. data/.gitignore +1 -0
  4. data/CHANGELOG.md +59 -2
  5. data/Dockerfile +12 -0
  6. data/Gemfile +7 -4
  7. data/README.md +44 -22
  8. data/Rakefile +14 -31
  9. data/lib/thinreports.rb +16 -15
  10. data/lib/thinreports/config.rb +2 -24
  11. data/lib/thinreports/core/errors.rb +6 -17
  12. data/lib/thinreports/core/format/base.rb +62 -61
  13. data/lib/thinreports/core/shape.rb +10 -12
  14. data/lib/thinreports/core/shape/base.rb +3 -12
  15. data/lib/thinreports/core/shape/base/interface.rb +34 -32
  16. data/lib/thinreports/core/shape/base/internal.rb +45 -43
  17. data/lib/thinreports/core/shape/basic.rb +12 -12
  18. data/lib/thinreports/core/shape/basic/block_format.rb +8 -6
  19. data/lib/thinreports/core/shape/basic/block_interface.rb +24 -22
  20. data/lib/thinreports/core/shape/basic/block_internal.rb +28 -26
  21. data/lib/thinreports/core/shape/basic/format.rb +11 -9
  22. data/lib/thinreports/core/shape/basic/interface.rb +79 -77
  23. data/lib/thinreports/core/shape/basic/internal.rb +17 -14
  24. data/lib/thinreports/core/shape/image_block.rb +9 -9
  25. data/lib/thinreports/core/shape/image_block/format.rb +7 -5
  26. data/lib/thinreports/core/shape/image_block/interface.rb +15 -13
  27. data/lib/thinreports/core/shape/image_block/internal.rb +10 -8
  28. data/lib/thinreports/core/shape/list.rb +13 -13
  29. data/lib/thinreports/core/shape/list/format.rb +83 -77
  30. data/lib/thinreports/core/shape/list/manager.rb +179 -176
  31. data/lib/thinreports/core/shape/list/page.rb +91 -93
  32. data/lib/thinreports/core/shape/list/page_state.rb +42 -40
  33. data/lib/thinreports/core/shape/list/section_format.rb +28 -26
  34. data/lib/thinreports/core/shape/list/section_interface.rb +42 -40
  35. data/lib/thinreports/core/shape/list/section_internal.rb +21 -19
  36. data/lib/thinreports/core/shape/manager.rb +4 -13
  37. data/lib/thinreports/core/shape/manager/format.rb +21 -19
  38. data/lib/thinreports/core/shape/manager/internal.rb +87 -84
  39. data/lib/thinreports/core/shape/manager/target.rb +93 -95
  40. data/lib/thinreports/core/shape/page_number.rb +9 -9
  41. data/lib/thinreports/core/shape/page_number/format.rb +20 -18
  42. data/lib/thinreports/core/shape/page_number/interface.rb +20 -18
  43. data/lib/thinreports/core/shape/page_number/internal.rb +46 -44
  44. data/lib/thinreports/core/shape/style.rb +5 -14
  45. data/lib/thinreports/core/shape/style/base.rb +121 -120
  46. data/lib/thinreports/core/shape/style/basic.rb +12 -10
  47. data/lib/thinreports/core/shape/style/graphic.rb +35 -33
  48. data/lib/thinreports/core/shape/style/text.rb +113 -107
  49. data/lib/thinreports/core/shape/text.rb +9 -9
  50. data/lib/thinreports/core/shape/text/format.rb +10 -9
  51. data/lib/thinreports/core/shape/text/interface.rb +13 -11
  52. data/lib/thinreports/core/shape/text/internal.rb +14 -12
  53. data/lib/thinreports/core/shape/text_block.rb +10 -10
  54. data/lib/thinreports/core/shape/text_block/format.rb +35 -33
  55. data/lib/thinreports/core/shape/text_block/formatter.rb +26 -24
  56. data/lib/thinreports/core/shape/text_block/formatter/basic.rb +25 -25
  57. data/lib/thinreports/core/shape/text_block/formatter/datetime.rb +15 -12
  58. data/lib/thinreports/core/shape/text_block/formatter/number.rb +52 -34
  59. data/lib/thinreports/core/shape/text_block/formatter/padding.rb +17 -14
  60. data/lib/thinreports/core/shape/text_block/interface.rb +25 -23
  61. data/lib/thinreports/core/shape/text_block/internal.rb +66 -68
  62. data/lib/thinreports/core/utils.rb +7 -3
  63. data/lib/thinreports/generator/pdf.rb +24 -25
  64. data/lib/thinreports/generator/pdf/document.rb +109 -110
  65. data/lib/thinreports/generator/pdf/document/draw_shape.rb +57 -51
  66. data/lib/thinreports/generator/pdf/document/draw_template_items.rb +50 -47
  67. data/lib/thinreports/generator/pdf/document/font.rb +67 -58
  68. data/lib/thinreports/generator/pdf/document/graphics.rb +32 -33
  69. data/lib/thinreports/generator/pdf/document/graphics/attributes.rb +121 -121
  70. data/lib/thinreports/generator/pdf/document/graphics/basic.rb +112 -114
  71. data/lib/thinreports/generator/pdf/document/graphics/image.rb +58 -150
  72. data/lib/thinreports/generator/pdf/document/graphics/text.rb +149 -137
  73. data/lib/thinreports/generator/pdf/document/page.rb +60 -64
  74. data/lib/thinreports/generator/pdf/document/parse_color.rb +37 -37
  75. data/lib/thinreports/generator/pdf/drawer/base.rb +41 -41
  76. data/lib/thinreports/generator/pdf/drawer/list.rb +56 -54
  77. data/lib/thinreports/generator/pdf/drawer/list_section.rb +42 -40
  78. data/lib/thinreports/generator/pdf/drawer/page.rb +101 -96
  79. data/lib/thinreports/generator/pdf/prawn_ext.rb +4 -30
  80. data/lib/thinreports/generator/pdf/prawn_ext/calc_image_dimensions.rb +32 -0
  81. data/lib/thinreports/generator/pdf/prawn_ext/width_of.rb +35 -0
  82. data/lib/thinreports/layout.rb +5 -7
  83. data/lib/thinreports/layout/base.rb +5 -9
  84. data/lib/thinreports/layout/format.rb +17 -13
  85. data/lib/thinreports/layout/legacy_schema.rb +17 -13
  86. data/lib/thinreports/layout/version.rb +22 -25
  87. data/lib/thinreports/report.rb +4 -6
  88. data/lib/thinreports/report/base.rb +24 -51
  89. data/lib/thinreports/report/internal.rb +13 -15
  90. data/lib/thinreports/report/page.rb +5 -11
  91. data/lib/thinreports/version.rb +2 -2
  92. data/thinreports.gemspec +10 -19
  93. metadata +13 -288
  94. data/.travis.yml +0 -19
  95. data/examples/character_spacing/character_spacing.rb +0 -8
  96. data/examples/character_spacing/character_spacing.tlf +0 -293
  97. data/examples/dynamic_image/dynamic_image.rb +0 -31
  98. data/examples/dynamic_image/dynamic_image.tlf +0 -661
  99. data/examples/dynamic_image/img200x100.png +0 -0
  100. data/examples/dynamic_image/img50x50.png +0 -0
  101. data/examples/dynamic_style/dynamic_style.rb +0 -150
  102. data/examples/dynamic_style/dynamic_style.tlf +0 -1835
  103. data/examples/dynamic_style/dynamic_style_in_list.tlf +0 -344
  104. data/examples/dynamic_style/image.png +0 -0
  105. data/examples/eudc/eudc.rb +0 -20
  106. data/examples/eudc/eudc.tlf +0 -180
  107. data/examples/eudc/eudc.ttf +0 -0
  108. data/examples/helper.rb +0 -50
  109. data/examples/hidden_shapes/hidden_shapes.rb +0 -9
  110. data/examples/hidden_shapes/hidden_shapes.tlf +0 -449
  111. data/examples/list_events/list_events.rb +0 -32
  112. data/examples/list_events/list_events.tlf +0 -361
  113. data/examples/list_manual_generation/list_manual_generation.rb +0 -22
  114. data/examples/list_manual_generation/list_manual_generation.tlf +0 -132
  115. data/examples/list_page_number/list_page_number.rb +0 -17
  116. data/examples/list_page_number/list_page_number.tlf +0 -254
  117. data/examples/page_number/page_number.rb +0 -33
  118. data/examples/page_number/page_number.tlf +0 -215
  119. data/examples/palleted_png/palleted_png.png +0 -0
  120. data/examples/palleted_png/palleted_png.rb +0 -11
  121. data/examples/palleted_png/palleted_png.tlf +0 -47
  122. data/examples/password_setting/password_setting.rb +0 -10
  123. data/examples/password_setting/password_setting.tlf +0 -45
  124. data/examples/report_callbacks/report_callbacks.rb +0 -14
  125. data/examples/report_callbacks/report_callbacks.tlf +0 -147
  126. data/examples/single_line_tblock/single_line_tblock.rb +0 -13
  127. data/examples/single_line_tblock/single_line_tblock.tlf +0 -170
  128. data/examples/tblock_overflow/tblock_overflow.rb +0 -20
  129. data/examples/tblock_overflow/tblock_overflow.tlf +0 -538
  130. data/examples/tblock_styles/font_size.tlf +0 -383
  131. data/examples/tblock_styles/tblock_styles.rb +0 -43
  132. data/examples/tblock_styles/tblock_styles.tlf +0 -889
  133. data/examples/text_align/text_align.rb +0 -8
  134. data/examples/text_align/text_align.tlf +0 -241
  135. data/examples/typeB_page_size/B4_ISO.tlf +0 -45
  136. data/examples/typeB_page_size/B4_JIS.tlf +0 -45
  137. data/examples/typeB_page_size/typeB_page_size.rb +0 -17
  138. data/examples/word_wrap/word_wrap.rb +0 -26
  139. data/examples/word_wrap/word_wrap.tlf +0 -297
  140. data/lib/thinreports/generator.rb +0 -29
  141. data/lib/thinreports/generator/base.rb +0 -40
  142. data/lib/thinreports/generator/configuration.rb +0 -31
  143. data/lib/thinreports/report/events.rb +0 -32
  144. data/test/data/font.ttf +0 -0
  145. data/test/data/image_normal.jpg +0 -0
  146. data/test/data/image_normal.png +0 -0
  147. data/test/data/image_normal_jpg_noext +0 -0
  148. data/test/data/image_normal_png_noext +0 -0
  149. data/test/data/image_pallete_based.png +0 -0
  150. data/test/data/legacy_layout/all-items.tlf +0 -1
  151. data/test/schema_helper.rb +0 -121
  152. data/test/test_helper.rb +0 -42
  153. data/test/tmp/.gitkeep +0 -0
  154. data/test/unit/core/format/test_base.rb +0 -152
  155. data/test/unit/core/shape/base/test_internal.rb +0 -87
  156. data/test/unit/core/shape/basic/test_block_format.rb +0 -23
  157. data/test/unit/core/shape/basic/test_block_interface.rb +0 -29
  158. data/test/unit/core/shape/basic/test_block_internal.rb +0 -55
  159. data/test/unit/core/shape/basic/test_format.rb +0 -37
  160. data/test/unit/core/shape/basic/test_interface.rb +0 -108
  161. data/test/unit/core/shape/basic/test_internal.rb +0 -55
  162. data/test/unit/core/shape/image_block/test_interface.rb +0 -24
  163. data/test/unit/core/shape/image_block/test_internal.rb +0 -31
  164. data/test/unit/core/shape/list/test_format.rb +0 -111
  165. data/test/unit/core/shape/list/test_manager.rb +0 -67
  166. data/test/unit/core/shape/list/test_page.rb +0 -82
  167. data/test/unit/core/shape/list/test_page_state.rb +0 -31
  168. data/test/unit/core/shape/list/test_section_format.rb +0 -36
  169. data/test/unit/core/shape/list/test_section_interface.rb +0 -75
  170. data/test/unit/core/shape/list/test_section_internal.rb +0 -50
  171. data/test/unit/core/shape/manager/test_format.rb +0 -38
  172. data/test/unit/core/shape/manager/test_internal.rb +0 -132
  173. data/test/unit/core/shape/manager/test_target.rb +0 -140
  174. data/test/unit/core/shape/page_number/test_format.rb +0 -55
  175. data/test/unit/core/shape/page_number/test_interface.rb +0 -33
  176. data/test/unit/core/shape/page_number/test_internal.rb +0 -81
  177. data/test/unit/core/shape/styles/test_base.rb +0 -191
  178. data/test/unit/core/shape/styles/test_basic.rb +0 -24
  179. data/test/unit/core/shape/styles/test_graphic.rb +0 -50
  180. data/test/unit/core/shape/styles/test_text.rb +0 -97
  181. data/test/unit/core/shape/text/test_format.rb +0 -44
  182. data/test/unit/core/shape/text/test_internal.rb +0 -20
  183. data/test/unit/core/shape/text_block/formatter/test_basic.rb +0 -24
  184. data/test/unit/core/shape/text_block/formatter/test_datetime.rb +0 -49
  185. data/test/unit/core/shape/text_block/formatter/test_number.rb +0 -76
  186. data/test/unit/core/shape/text_block/formatter/test_padding.rb +0 -77
  187. data/test/unit/core/shape/text_block/test_format.rb +0 -169
  188. data/test/unit/core/shape/text_block/test_formatter.rb +0 -28
  189. data/test/unit/core/shape/text_block/test_interface.rb +0 -63
  190. data/test/unit/core/shape/text_block/test_internal.rb +0 -128
  191. data/test/unit/core/test_shape.rb +0 -52
  192. data/test/unit/core/test_utils.rb +0 -68
  193. data/test/unit/generator/pdf/document/graphics/test_attributes.rb +0 -135
  194. data/test/unit/generator/pdf/document/graphics/test_basic.rb +0 -45
  195. data/test/unit/generator/pdf/document/graphics/test_image.rb +0 -150
  196. data/test/unit/generator/pdf/document/graphics/test_text.rb +0 -171
  197. data/test/unit/generator/pdf/document/test_font.rb +0 -84
  198. data/test/unit/generator/pdf/document/test_graphics.rb +0 -42
  199. data/test/unit/generator/pdf/document/test_page.rb +0 -122
  200. data/test/unit/generator/pdf/document/test_parse_color.rb +0 -30
  201. data/test/unit/generator/pdf/test_document.rb +0 -20
  202. data/test/unit/generator/test_base.rb +0 -40
  203. data/test/unit/generator/test_configuration.rb +0 -21
  204. data/test/unit/generator/test_pdf.rb +0 -24
  205. data/test/unit/layout/test_base.rb +0 -41
  206. data/test/unit/layout/test_format.rb +0 -100
  207. data/test/unit/layout/test_legacy_schema.rb +0 -574
  208. data/test/unit/layout/test_version.rb +0 -95
  209. data/test/unit/report/test_base.rb +0 -262
  210. data/test/unit/report/test_internal.rb +0 -206
  211. data/test/unit/test_config.rb +0 -51
  212. data/test/unit/test_layout.rb +0 -12
  213. data/test/unit/test_report.rb +0 -18
@@ -1,46 +1,48 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Thinreports
4
- module Core::Shape
5
-
6
- class List::PageState < Basic::Internal
7
- attr_reader :rows
8
-
9
- attr_accessor :height
10
- attr_accessor :header
11
- attr_accessor :no
12
- attr_accessor :manager
13
-
14
- def initialize(*args)
15
- super(*args)
16
-
17
- @rows = []
18
- @height = 0
19
- @finalized = false
20
-
21
- @header = nil
22
- end
23
-
24
- def style
25
- @style ||= Style::Basic.new(format)
26
- end
27
-
28
- def finalized?
29
- @finalized
30
- end
31
-
32
- def finalized!
33
- @finalized = true
34
- end
35
-
36
- def type_of?(type_name)
37
- type_name == List::TYPE_NAME
4
+ module Core
5
+ module Shape
6
+ module List
7
+ class PageState < Basic::Internal
8
+ attr_reader :rows
9
+
10
+ attr_accessor :height
11
+ attr_accessor :header
12
+ attr_accessor :no
13
+ attr_accessor :manager
14
+
15
+ def initialize(*args)
16
+ super(*args)
17
+
18
+ @rows = []
19
+ @height = 0
20
+ @finalized = false
21
+
22
+ @header = nil
23
+ end
24
+
25
+ def style
26
+ @style ||= Style::Basic.new(format)
27
+ end
28
+
29
+ def finalized?
30
+ @finalized
31
+ end
32
+
33
+ def finalized!
34
+ @finalized = true
35
+ end
36
+
37
+ def type_of?(type_name)
38
+ type_name == List::TYPE_NAME
39
+ end
40
+ end
41
+
42
+ # Alias to List::PageState.
43
+ # @see Thinreports::Core::Shape::List::PageState
44
+ List::Internal = List::PageState
38
45
  end
39
46
  end
40
-
41
- # Alias to List::PageState.
42
- # @see Thinreports::Core::Shape::List::PageState
43
- List::Internal = List::PageState
44
-
45
47
  end
46
48
  end
@@ -1,33 +1,35 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Thinreports
4
- module Core::Shape
5
-
6
- class List::SectionFormat < Manager::Format
7
- config_reader :height
8
- config_reader relative_left: %w( translate x ),
9
- relative_top: %w( translate y )
10
- config_reader :style
11
-
12
- # For compatible 0.8.x format API
13
- config_checker true, display: %w( enabled )
14
-
15
- def initialize(*)
16
- super
17
- initialize_items(attributes['items'])
18
- end
19
-
20
- private
21
-
22
- def initialize_items(item_schemas)
23
- item_schemas.each do |item_schema|
24
- id, type = item_schema.values_at 'id', 'type'
25
- next if id.empty?
26
-
27
- self.shapes[id.to_sym] = Core::Shape::Format(type).new(item_schema)
4
+ module Core
5
+ module Shape
6
+ module List
7
+ class SectionFormat < Shape::Manager::Format
8
+ config_reader :height
9
+ config_reader relative_left: %w[translate x],
10
+ relative_top: %w[translate y]
11
+ config_reader :style
12
+
13
+ # For compatible 0.8.x format API
14
+ config_checker true, display: %w[enabled]
15
+
16
+ def initialize(*)
17
+ super
18
+ initialize_items(attributes['items'])
19
+ end
20
+
21
+ private
22
+
23
+ def initialize_items(item_schemas)
24
+ item_schemas.each do |item_schema|
25
+ id, type = item_schema.values_at 'id', 'type'
26
+ next if id.empty?
27
+
28
+ shapes[id.to_sym] = Core::Shape::Format(type).new(item_schema)
29
+ end
30
+ end
28
31
  end
29
32
  end
30
33
  end
31
-
32
34
  end
33
35
  end
@@ -1,47 +1,49 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Thinreports
4
- module Core::Shape
5
-
6
- class List::SectionInterface < Base::Interface
7
- include Core::Shape::Manager::Target
8
-
9
- undef_method :list
10
- internal_delegators :height
11
-
12
- # @param [Thinreports::Core::Shape::List::Page] parent
13
- # @param [Thinreports::Core::Shape::List::SectionFormat] format
14
- # @param [Symbol] section_name
15
- def initialize(parent, format, section_name)
16
- super(parent, format)
17
- internal.section_name = section_name
18
-
19
- initialize_manager(format) do |f|
20
- Core::Shape::Interface(self, f)
21
- end
22
- end
23
-
24
- # @param [Thinreports::Core::Shape::List::Page] parent
25
- # @return [Thinreports::Core::Shape::List::SectionInterface]
26
- def copy(parent)
27
- new_sec = super
28
- new_sec.internal.section_name = internal.section_name
29
-
30
- manager.shapes.each do |id, shape|
31
- new_sec.manager.shapes[id] = shape.copy(new_sec)
4
+ module Core
5
+ module Shape
6
+ module List
7
+ class SectionInterface < Base::Interface
8
+ include Core::Shape::Manager::Target
9
+
10
+ undef_method :list
11
+ internal_delegators :height
12
+
13
+ # @param [Thinreports::Core::Shape::List::Page] parent
14
+ # @param [Thinreports::Core::Shape::List::SectionFormat] format
15
+ # @param [Symbol] section_name
16
+ def initialize(parent, format, section_name)
17
+ super(parent, format)
18
+ internal.section_name = section_name
19
+
20
+ initialize_manager(format) do |f|
21
+ Core::Shape::Interface(self, f)
22
+ end
23
+ end
24
+
25
+ # @param [Thinreports::Core::Shape::List::Page] parent
26
+ # @return [Thinreports::Core::Shape::List::SectionInterface]
27
+ def copy(parent)
28
+ new_sec = super
29
+ new_sec.internal.section_name = internal.section_name
30
+
31
+ manager.shapes.each do |id, shape|
32
+ new_sec.manager.shapes[id] = shape.copy(new_sec)
33
+ end
34
+ new_sec
35
+ end
36
+
37
+ private
38
+
39
+ # @param parent (see #initialize)
40
+ # @param format (see #initialize)
41
+ # @return [Thinreports::Core::Shape::List::SectionInternal]
42
+ def init_internal(parent, format)
43
+ List::SectionInternal.new(parent, format)
44
+ end
32
45
  end
33
- new_sec
34
- end
35
-
36
- private
37
-
38
- # @param parent (see #initialize)
39
- # @param format (see #initialize)
40
- # @return [Thinreports::Core::Shape::List::SectionInternal]
41
- def init_internal(parent, format)
42
- List::SectionInternal.new(parent, format)
43
46
  end
44
47
  end
45
-
46
48
  end
47
49
  end
@@ -1,29 +1,31 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Thinreports
4
- module Core::Shape
4
+ module Core
5
+ module Shape
6
+ module List
7
+ class SectionInternal < Base::Internal
8
+ format_delegators :height,
9
+ :relative_left
5
10
 
6
- class List::SectionInternal < Base::Internal
7
- format_delegators :height,
8
- :relative_left
11
+ # @return [Symbol]
12
+ attr_accessor :section_name
9
13
 
10
- # @return [Symbol]
11
- attr_accessor :section_name
14
+ def style
15
+ @style ||= Style::Base.new(format)
16
+ end
12
17
 
13
- def style
14
- @style ||= Style::Base.new(format)
15
- end
16
-
17
- # @param [Numeric] ry
18
- def move_top_to(ry)
19
- states[:relative_top] = ry
20
- end
18
+ # @param [Numeric] ry
19
+ def move_top_to(ry)
20
+ states[:relative_top] = ry
21
+ end
21
22
 
22
- # @return [Float]
23
- def relative_top
24
- states[:relative_top] || 0
23
+ # @return [Float]
24
+ def relative_top
25
+ states[:relative_top] || 0
26
+ end
27
+ end
25
28
  end
26
29
  end
27
-
28
30
  end
29
31
  end
@@ -1,14 +1,5 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
- module Thinreports
4
- module Core::Shape
5
-
6
- module Manager
7
- end
8
-
9
- end
10
- end
11
-
12
- require 'thinreports/core/shape/manager/format'
13
- require 'thinreports/core/shape/manager/target'
14
- require 'thinreports/core/shape/manager/internal'
3
+ require_relative 'manager/format'
4
+ require_relative 'manager/target'
5
+ require_relative 'manager/internal'
@@ -1,29 +1,31 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Thinreports
4
- module Core::Shape
4
+ module Core
5
+ module Shape
6
+ module Manager
7
+ class Format < Core::Format::Base
8
+ # @return [Symbol, Integer]
9
+ attr_reader :identifier
5
10
 
6
- class Manager::Format < Core::Format::Base
7
- # @return [Symbol, Integer]
8
- attr_reader :identifier
11
+ def initialize(config, id = nil, &block)
12
+ super(config, &block)
13
+ @identifier = id || object_id
14
+ end
9
15
 
10
- def initialize(config, id = nil, &block)
11
- super(config, &block)
12
- @identifier = id || self.object_id
13
- end
16
+ def find_shape(id)
17
+ shapes[id]
18
+ end
14
19
 
15
- def find_shape(id)
16
- shapes[id]
17
- end
20
+ def has_shape?(id)
21
+ shapes.key?(id)
22
+ end
18
23
 
19
- def has_shape?(id)
20
- shapes.key?(id)
21
- end
22
-
23
- def shapes
24
- @shapes ||= {}
24
+ def shapes
25
+ @shapes ||= {}
26
+ end
27
+ end
25
28
  end
26
29
  end
27
-
28
30
  end
29
31
  end
@@ -1,104 +1,107 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Thinreports
4
- module Core::Shape
4
+ module Core
5
+ module Shape
6
+ module Manager
7
+ class Internal
8
+ include Utils
5
9
 
6
- class Manager::Internal
7
- include Utils
10
+ attr_reader :format
11
+ attr_reader :shapes
12
+ attr_reader :lists
8
13
 
9
- attr_reader :format
10
- attr_reader :shapes
11
- attr_reader :lists
14
+ # @param [Thinreports::Core::Manager::Format] format
15
+ # @param [Proc] init_item_handler
16
+ def initialize(format, init_item_handler)
17
+ @format = format
18
+ @shapes = {}
19
+ @lists = {}
20
+ @init_item_handler = init_item_handler
21
+ end
12
22
 
13
- # @param [Thinreports::Core::Manager::Format] format
14
- # @param [Proc] init_item_handler
15
- def initialize(format, init_item_handler)
16
- @format = format
17
- @shapes = {}
18
- @lists = {}
19
- @init_item_handler = init_item_handler
20
- end
23
+ # @param [String, Symbol] id
24
+ # @return [Thinreports::Core::Shape::Basic::Format]
25
+ def find_format(id)
26
+ format.find_shape(id.to_sym)
27
+ end
21
28
 
22
- # @param [String, Symbol] id
23
- # @return [Thinreports::Core::Shape::Basic::Format]
24
- def find_format(id)
25
- format.find_shape(id.to_sym)
26
- end
29
+ # @param [String, Symbol] id
30
+ # @param limit (see #valid_type?)
31
+ def find_item(id, limit = {})
32
+ id = id.to_sym
27
33
 
28
- # @param [String, Symbol] id
29
- # @param limit (see #valid_type?)
30
- def find_item(id, limit = {})
31
- id = id.to_sym
32
- case
33
- when shape = shapes[id]
34
- return nil unless valid_type?(shape.type, limit)
35
- shape
36
- when sformat = find_format(id)
37
- return nil unless valid_type?(sformat.type, limit)
38
- shapes[id] = init_item(sformat)
39
- else
40
- return nil
41
- end
42
- end
34
+ if shapes.key?(id)
35
+ shape = shapes[id]
36
+ valid_type?(shape.type, limit) ? shape : nil
37
+ elsif find_format(id)
38
+ shape_format = find_format(id)
39
+ return nil unless valid_type?(shape_format.type, limit)
43
40
 
44
- # @param [String, Symbol] id
45
- # @return [Thinreports::Core::Shape::Base::Interface, nil]
46
- def final_shape(id)
47
- shape = shapes[id]
41
+ shape = init_item(shape_format)
42
+ shapes[id] = shape
43
+
44
+ shape
45
+ end
46
+ end
48
47
 
49
- # When shape was found in registry.
50
- if shape
51
- return nil unless shape.visible?
48
+ # @param [String, Symbol] id
49
+ # @return [Thinreports::Core::Shape::Base::Interface, nil]
50
+ def final_shape(id)
51
+ shape = shapes[id]
52
52
 
53
- # In the case of TextBlock or ImageBlock.
54
- if shape.internal.type_of?(:block)
55
- blank_value?(shape.internal.real_value) ? nil : shape
56
- else
57
- shape
53
+ # When shape was found in registry.
54
+ if shape
55
+ return nil unless shape.visible?
56
+
57
+ # In the case of TextBlock or ImageBlock.
58
+ if shape.internal.type_of?(:block)
59
+ blank_value?(shape.internal.real_value) ? nil : shape
60
+ else
61
+ shape
62
+ end
63
+ # When shape was not found in registry.
64
+ elsif format.has_shape?(id)
65
+ shape_format = find_format(id)
66
+ return nil unless shape_format.display?
67
+
68
+ case shape_format.type
69
+ # In the case of TextBlock.
70
+ when TextBlock::TYPE_NAME
71
+ return nil if !shape_format.has_reference? && blank_value?(shape_format.value)
72
+ init_item(shape_format)
73
+ # In the case of ImageBlock, Return the nil constantly.
74
+ when ImageBlock::TYPE_NAME
75
+ nil
76
+ else
77
+ init_item(shape_format)
78
+ end
79
+ end
58
80
  end
59
- # When shape was not found in registry.
60
- elsif format.has_shape?(id)
61
- shape_format = find_format(id)
62
- return nil unless shape_format.display?
63
81
 
64
- case shape_format.type
65
- # In the case of TextBlock.
66
- when TextBlock::TYPE_NAME
67
- shape_format.has_reference? || !blank_value?(shape_format.value) ? init_item(shape_format) : nil
68
- # In the case of ImageBlock, Return the nil constantly.
69
- when ImageBlock::TYPE_NAME
70
- nil
71
- else
72
- init_item(shape_format)
82
+ # @param [Thinreports::Core::Shape::Basic::Format] format
83
+ def init_item(format)
84
+ @init_item_handler.call(format)
73
85
  end
74
- # In the case of other, Return the nil constantly.
75
- else
76
- nil
77
- end
78
- end
79
86
 
80
- # @param [Thinreports::Core::Shape::Basic::Format] format
81
- def init_item(format)
82
- @init_item_handler.call(format)
83
- end
87
+ # @param [String] type
88
+ # @param [Hash] limit
89
+ # @option limit [String] :only
90
+ # @option limit [String] :except
91
+ # @return [Booldan]
92
+ def valid_type?(type, limit = {})
93
+ return true if limit.empty?
84
94
 
85
- # @param [String] type
86
- # @param [Hash] limit
87
- # @option limit [String] :only
88
- # @option limit [String] :except
89
- # @return [Booldan]
90
- def valid_type?(type, limit = {})
91
- return true if limit.empty?
92
- case
93
- when only = limit[:only]
94
- type == only
95
- when except = limit[:except]
96
- type != except
97
- else
98
- raise ArgumentError
95
+ if limit[:only]
96
+ type == limit[:only]
97
+ elsif limit[:except]
98
+ type != limit[:except]
99
+ else
100
+ raise ArgumentError
101
+ end
102
+ end
99
103
  end
100
104
  end
101
105
  end
102
-
103
106
  end
104
107
  end