thinreports 0.9.1 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
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