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,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,108 @@
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
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/PerceivedComplexity
51
+ def final_shape(id)
52
+ shape = shapes[id]
52
53
 
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
54
+ # When shape was found in registry.
55
+ if shape
56
+ return nil unless shape.visible?
57
+
58
+ # In the case of TextBlock or ImageBlock.
59
+ if shape.internal.type_of?(:block)
60
+ blank_value?(shape.internal.real_value) ? nil : shape
61
+ else
62
+ shape
63
+ end
64
+ # When shape was not found in registry.
65
+ elsif format.has_shape?(id)
66
+ shape_format = find_format(id)
67
+ return nil unless shape_format.display?
68
+
69
+ case shape_format.type
70
+ # In the case of TextBlock.
71
+ when TextBlock::TYPE_NAME
72
+ return nil if !shape_format.has_reference? && blank_value?(shape_format.value)
73
+ init_item(shape_format)
74
+ # In the case of ImageBlock, Return the nil constantly.
75
+ when ImageBlock::TYPE_NAME
76
+ nil
77
+ else
78
+ init_item(shape_format)
79
+ end
80
+ end
58
81
  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
82
 
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)
83
+ # @param [Thinreports::Core::Shape::Basic::Format] format
84
+ def init_item(format)
85
+ @init_item_handler.call(format)
73
86
  end
74
- # In the case of other, Return the nil constantly.
75
- else
76
- nil
77
- end
78
- end
79
87
 
80
- # @param [Thinreports::Core::Shape::Basic::Format] format
81
- def init_item(format)
82
- @init_item_handler.call(format)
83
- end
88
+ # @param [String] type
89
+ # @param [Hash] limit
90
+ # @option limit [String] :only
91
+ # @option limit [String] :except
92
+ # @return [Booldan]
93
+ def valid_type?(type, limit = {})
94
+ return true if limit.empty?
84
95
 
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
96
+ if limit[:only]
97
+ type == limit[:only]
98
+ elsif limit[:except]
99
+ type != limit[:except]
100
+ else
101
+ raise ArgumentError
102
+ end
103
+ end
99
104
  end
100
105
  end
101
106
  end
102
-
103
107
  end
104
108
  end