vedeu 0.8.2 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (134) hide show
  1. checksums.yaml +4 -4
  2. data/examples/views/_interfaces.rb +127 -0
  3. data/examples/views/empty_template.rb +10 -0
  4. data/examples/views/expected/vedeu_full_screen.html +140 -0
  5. data/examples/views/expected/vedeu_full_screen.json +96050 -0
  6. data/examples/views/expected/vedeu_full_screen.out +1 -0
  7. data/examples/views/expected/vedeu_full_screen.txt +50 -0
  8. data/examples/views/expected/vedeu_line.html +140 -0
  9. data/examples/views/expected/vedeu_line.json +96050 -0
  10. data/examples/views/expected/vedeu_line.out +1 -0
  11. data/examples/views/expected/vedeu_line.txt +58 -0
  12. data/examples/views/expected/vedeu_lines.html +140 -0
  13. data/examples/views/expected/vedeu_lines.json +96050 -0
  14. data/examples/views/expected/{lines.out → vedeu_lines.out} +1 -1
  15. data/examples/views/expected/vedeu_lines_alignment.html +80 -0
  16. data/examples/views/expected/vedeu_lines_alignment.json +46370 -0
  17. data/examples/views/expected/vedeu_lines_alignment.out +1 -0
  18. data/examples/views/full_screen.rb +10 -0
  19. data/examples/views/line.rb +11 -106
  20. data/examples/views/lines.rb +8 -127
  21. data/examples/views/lines_alignment.rb +17 -125
  22. data/examples/views/runner.sh +65 -19
  23. data/lib/vedeu/borders/border.rb +6 -6
  24. data/lib/vedeu/borders/refresh.rb +4 -6
  25. data/lib/vedeu/buffers/buffer.rb +1 -1
  26. data/lib/vedeu/buffers/terminal.rb +4 -4
  27. data/lib/vedeu/buffers/view.rb +2 -2
  28. data/lib/vedeu/cells/all.rb +2 -2
  29. data/lib/vedeu/cells/border.rb +5 -0
  30. data/lib/vedeu/cells/borders/all.rb +2 -8
  31. data/lib/vedeu/cells/borders/edges/all.rb +6 -0
  32. data/lib/vedeu/cells/borders/{bottom_horizontal.rb → edges/bottom_horizontal.rb} +0 -0
  33. data/lib/vedeu/cells/borders/{left_vertical.rb → edges/left_vertical.rb} +0 -0
  34. data/lib/vedeu/cells/borders/{right_vertical.rb → edges/right_vertical.rb} +0 -0
  35. data/lib/vedeu/cells/borders/{top_horizontal.rb → edges/top_horizontal.rb} +0 -0
  36. data/lib/vedeu/cells/borders/horizontal.rb +5 -0
  37. data/lib/vedeu/cells/borders/vertical.rb +5 -0
  38. data/lib/vedeu/cells/borders/vertices/all.rb +6 -0
  39. data/lib/vedeu/cells/borders/{bottom_left.rb → vertices/bottom_left.rb} +5 -0
  40. data/lib/vedeu/cells/borders/{bottom_right.rb → vertices/bottom_right.rb} +5 -0
  41. data/lib/vedeu/cells/borders/{top_left.rb → vertices/top_left.rb} +5 -0
  42. data/lib/vedeu/cells/borders/{top_right.rb → vertices/top_right.rb} +5 -0
  43. data/lib/vedeu/cells/char.rb +16 -0
  44. data/lib/vedeu/cells/clear.rb +5 -0
  45. data/lib/vedeu/cells/cursor.rb +70 -0
  46. data/lib/vedeu/cells/empty.rb +24 -14
  47. data/lib/vedeu/cells/escape.rb +8 -7
  48. data/lib/vedeu/cells/support/all.rb +3 -0
  49. data/lib/vedeu/cells/support/html.rb +98 -0
  50. data/lib/vedeu/colours/background.rb +21 -1
  51. data/lib/vedeu/colours/colour.rb +10 -2
  52. data/lib/vedeu/colours/foreground.rb +21 -1
  53. data/lib/vedeu/colours/translator.rb +17 -24
  54. data/lib/vedeu/colours/validator.rb +9 -9
  55. data/lib/vedeu/configuration/api.rb +1 -1
  56. data/lib/vedeu/cursors/cursor.rb +5 -5
  57. data/lib/vedeu/dsl/elements.rb +22 -79
  58. data/lib/vedeu/dsl/string/text.rb +3 -3
  59. data/lib/vedeu/editor/cropper.rb +2 -2
  60. data/lib/vedeu/editor/cursor.rb +1 -1
  61. data/lib/vedeu/editor/document.rb +1 -1
  62. data/lib/vedeu/geometries/area/dimension.rb +1 -1
  63. data/lib/vedeu/geometries/position.rb +5 -2
  64. data/lib/vedeu/interfaces/clear.rb +5 -5
  65. data/lib/vedeu/models/row.rb +4 -3
  66. data/lib/vedeu/output/compressor.rb +7 -7
  67. data/lib/vedeu/output/output.rb +8 -13
  68. data/lib/vedeu/output/viewport.rb +1 -1
  69. data/lib/vedeu/presentation/background.rb +2 -2
  70. data/lib/vedeu/presentation/colour.rb +0 -4
  71. data/lib/vedeu/presentation/foreground.rb +2 -2
  72. data/lib/vedeu/presentation/style.rb +1 -1
  73. data/lib/vedeu/presentation/styles.rb +0 -3
  74. data/lib/vedeu/renderers/file.rb +10 -68
  75. data/lib/vedeu/renderers/html.rb +28 -96
  76. data/lib/vedeu/renderers/json.rb +15 -31
  77. data/lib/vedeu/renderers/options.rb +160 -14
  78. data/lib/vedeu/renderers/templates/html_renderer.vedeu +1 -0
  79. data/lib/vedeu/renderers/terminal.rb +16 -17
  80. data/lib/vedeu/renderers/text.rb +32 -41
  81. data/lib/vedeu/version.rb +1 -1
  82. data/lib/vedeu/views/all.rb +0 -2
  83. data/lib/vedeu/views/chars.rb +6 -3
  84. data/lib/vedeu/views/stream.rb +3 -2
  85. data/test/lib/vedeu/borders/caption_test.rb +17 -17
  86. data/test/lib/vedeu/borders/title_test.rb +12 -12
  87. data/test/lib/vedeu/cells/border_test.rb +6 -0
  88. data/test/lib/vedeu/cells/borders/{bottom_horizontal_test.rb → edges/bottom_horizontal_test.rb} +0 -0
  89. data/test/lib/vedeu/cells/borders/{left_vertical_test.rb → edges/left_vertical_test.rb} +0 -0
  90. data/test/lib/vedeu/cells/borders/{right_vertical_test.rb → edges/right_vertical_test.rb} +0 -0
  91. data/test/lib/vedeu/cells/borders/{top_horizontal_test.rb → edges/top_horizontal_test.rb} +0 -0
  92. data/test/lib/vedeu/cells/borders/horizontal_test.rb +6 -0
  93. data/test/lib/vedeu/cells/borders/vertical_test.rb +6 -0
  94. data/test/lib/vedeu/cells/borders/{bottom_left_test.rb → vertices/bottom_left_test.rb} +6 -0
  95. data/test/lib/vedeu/cells/borders/{bottom_right_test.rb → vertices/bottom_right_test.rb} +6 -0
  96. data/test/lib/vedeu/cells/borders/{top_left_test.rb → vertices/top_left_test.rb} +6 -0
  97. data/test/lib/vedeu/cells/borders/{top_right_test.rb → vertices/top_right_test.rb} +6 -0
  98. data/test/lib/vedeu/cells/char_test.rb +18 -0
  99. data/test/lib/vedeu/cells/clear_test.rb +6 -0
  100. data/test/lib/vedeu/cells/cursor_test.rb +113 -0
  101. data/test/lib/vedeu/cells/empty_test.rb +100 -7
  102. data/test/lib/vedeu/cells/escape_test.rb +29 -13
  103. data/test/lib/vedeu/cells/support/html_test.rb +100 -0
  104. data/test/lib/vedeu/colours/background_test.rb +35 -3
  105. data/test/lib/vedeu/colours/colour_test.rb +66 -0
  106. data/test/lib/vedeu/colours/foreground_test.rb +35 -3
  107. data/test/lib/vedeu/colours/translator_test.rb +0 -34
  108. data/test/lib/vedeu/colours/validator_test.rb +84 -6
  109. data/test/lib/vedeu/cursors/cursor_test.rb +4 -4
  110. data/test/lib/vedeu/cursors/refresh_test.rb +4 -1
  111. data/test/lib/vedeu/dsl/string/text_test.rb +36 -36
  112. data/test/lib/vedeu/editor/cropper_test.rb +15 -15
  113. data/test/lib/vedeu/geometries/position_test.rb +14 -1
  114. data/test/lib/vedeu/models/page_test.rb +10 -10
  115. data/test/lib/vedeu/models/row_test.rb +7 -7
  116. data/test/lib/vedeu/output/compressor_test.rb +63 -50
  117. data/test/lib/vedeu/renderers/file_test.rb +64 -35
  118. data/test/lib/vedeu/renderers/html_test.rb +15 -12
  119. data/test/lib/vedeu/renderers/json_test.rb +79 -56
  120. data/test/lib/vedeu/renderers/options_test.rb +74 -26
  121. data/test/lib/vedeu/renderers/terminal_test.rb +34 -4
  122. data/test/lib/vedeu/renderers/text_test.rb +35 -3
  123. data/test/lib/vedeu/views/chars_test.rb +6 -0
  124. metadata +50 -41
  125. data/examples/views/expected/line.out +0 -1
  126. data/examples/views/expected/lines_alignment.out +0 -1
  127. data/lib/vedeu/cells/html.rb +0 -21
  128. data/lib/vedeu/cells/json.rb +0 -21
  129. data/lib/vedeu/views/char.rb +0 -180
  130. data/lib/vedeu/views/html_char.rb +0 -133
  131. data/test/lib/vedeu/cells/html_test.rb +0 -15
  132. data/test/lib/vedeu/cells/json_test.rb +0 -15
  133. data/test/lib/vedeu/views/char_test.rb +0 -283
  134. data/test/lib/vedeu/views/html_char_test.rb +0 -125
@@ -24,8 +24,8 @@ module Vedeu
24
24
  @background ||= if colour && present?(colour.background)
25
25
  colour.background
26
26
 
27
- elsif self.is_a?(Vedeu::Views::Char) && name
28
- interface.colour.background
27
+ elsif named_colour?
28
+ named_colour.background
29
29
 
30
30
  elsif parent && present?(parent.background)
31
31
  parent.background
@@ -25,10 +25,6 @@ module Vedeu
25
25
  elsif named_colour?
26
26
  Vedeu::Colours::Colour.coerce(named_colour)
27
27
 
28
- elsif self.is_a?(Vedeu::Views::Char) && name
29
- # Currently used by Vedeu::Output::Viewport
30
- Vedeu::Colours::Colour.coerce(interface.colour)
31
-
32
28
  else
33
29
  Vedeu::Colours::Colour.new
34
30
 
@@ -24,8 +24,8 @@ module Vedeu
24
24
  @foreground ||= if colour && present?(colour.foreground)
25
25
  colour.foreground
26
26
 
27
- elsif self.is_a?(Vedeu::Views::Char) && name
28
- interface.colour.foreground
27
+ elsif named_colour?
28
+ named_colour.foreground
29
29
 
30
30
  elsif parent && present?(parent.foreground)
31
31
  parent.foreground
@@ -68,7 +68,7 @@ module Vedeu
68
68
 
69
69
  # An object is equal when its values are the same.
70
70
  #
71
- # @param other [Vedeu::Views::Char]
71
+ # @param other [void]
72
72
  # @return [Boolean]
73
73
  def eql?(other)
74
74
  self.class == other.class && value == other.value
@@ -20,9 +20,6 @@ module Vedeu
20
20
  @_style ||= if @style
21
21
  Vedeu::Presentation::Style.coerce(@style)
22
22
 
23
- elsif self.is_a?(Vedeu::Views::Char) && name
24
- Vedeu::Presentation::Style.coerce(interface.style)
25
-
26
23
  elsif parent && present?(parent.style)
27
24
  Vedeu::Presentation::Style.coerce(parent.style)
28
25
 
@@ -10,90 +10,32 @@ module Vedeu
10
10
 
11
11
  include Vedeu::Renderers::Options
12
12
 
13
- # Returns a new instance of Vedeu::Renderers::File.
14
- #
15
- # @param options [Hash]
16
- # @option options filename [String] Provide a filename for the
17
- # output. Defaults to 'out'.
18
- # @option options timestamp [Boolean] Append a timestamp to the
19
- # filename.
20
- # @option options write_file [Boolean] Whether to write the file
21
- # to the given filename.
22
- # @return [Vedeu::Renderers::File]
23
- def initialize(options = {})
24
- @options = options || {}
13
+ # @return [String]
14
+ def clear
15
+ render('')
25
16
  end
26
17
 
27
18
  # Render the output (either content or clearing) to a file.
28
19
  #
29
- # @param output [Vedeu::Models::Page]
30
- # @param opts [Hash]
31
20
  # @return [String]
32
- def render(output = '', opts = {})
33
- @options = options.merge!(opts)
21
+ def write
22
+ data = content
34
23
 
35
- ::File.write(filename, out(output)) if write_file?
24
+ ::File.write(filename, data)
36
25
 
37
- out(output)
26
+ data
38
27
  end
39
- alias_method :clear, :render
40
28
 
41
29
  private
42
30
 
43
- # Compresses the output depending on configuration.
44
- #
45
- # @param output [Vedeu::Models::Page]
46
- # @return [String]
47
- def out(output)
48
- if compress?
49
- Vedeu::Output::Compressor.render(output, options)
50
-
51
- else
52
- output
53
-
54
- end
55
- end
56
-
57
- # Return the filename given in the options, (or use the
58
- # default), and append a timestamp if the :timestamp option was
59
- # set to true.
60
- #
61
31
  # @return [String]
62
- def filename
63
- options[:filename] + timestamp
32
+ def content
33
+ output
64
34
  end
65
35
 
66
- # Return a timestamp for use as part of the filename if the
67
- # :timestamp option was set to true, otherwise an empty string.
68
- #
69
- # @return [Float]
70
- def timestamp
71
- if options[:timestamp]
72
- "_#{Vedeu.clock_time}"
73
-
74
- else
75
- ''
76
-
77
- end
78
- end
79
-
80
- # Returns a boolean indicating whether a file should be written.
81
- #
82
36
  # @return [Boolean]
83
37
  def write_file?
84
- options[:write_file]
85
- end
86
-
87
- # Returns the default options/attributes for this class.
88
- #
89
- # @return [Hash]
90
- def defaults
91
- {
92
- compression: Vedeu.config.compression?,
93
- filename: 'out',
94
- timestamp: false,
95
- write_file: true,
96
- }
38
+ true
97
39
  end
98
40
 
99
41
  end # File
@@ -9,120 +9,52 @@ module Vedeu
9
9
  #
10
10
  class HTML < Vedeu::Renderers::File
11
11
 
12
- # Returns a new instance of Vedeu::Renderers::HTML.
13
- #
14
- # @param options [Hash]
15
- # @option options content [String] Defaults to an empty string.
16
- # @option options end_tag [String] Defaults to '</td>'.
17
- # @option options end_row_tag [String] Defaults to '</tr>'.
18
- # @option options filename [String] Provide a filename for the
19
- # output. Defaults to 'out'.
20
- # @option options start_tag [String] Defaults to '<td' (note the
21
- # end of the tag is missing, this is so that inline styles can
22
- # be added later).
23
- # @option options start_row_tag [String] Defaults to '<tr>'.
24
- # @option options template [String]
25
- # @option options timestamp [Boolean] Append a timestamp to the
26
- # filename.
27
- # @option options write_file [Boolean] Whether to write the file
28
- # to the given filename.
29
- # @return [Vedeu::Renderers::HTML]
30
- def initialize(options = {})
31
- @options = options || {}
32
- @output = nil
33
- end
12
+ include Vedeu::Renderers::Options
34
13
 
35
- # Render a cleared output.
36
- #
37
14
  # @return [String]
38
- def clear
39
- @output = Vedeu::Cells::Escape.new
40
-
41
- ''
15
+ def html_body
16
+ if valid?
17
+ output.inject([]) do |acc, line|
18
+ acc << "#{start_row_tag}\n"
19
+ line.each do |char|
20
+ acc << char.to_html(options)
21
+ end
22
+ acc << "#{end_row_tag}\n"
23
+ end.join
24
+
25
+ else
26
+ ''
27
+
28
+ end
42
29
  end
43
30
 
44
- # @param output [Vedeu::Models::Page]
31
+ private
32
+
45
33
  # @return [String]
46
- def render(output)
47
- @output = output
34
+ def content
35
+ if valid?
36
+ Vedeu::Templating::Template.parse(self, template)
48
37
 
49
- super(Vedeu::Templating::Template.parse(self, template)) unless escape?
50
- end
38
+ else
39
+ ''
51
40
 
52
- # @return [String]
53
- def html_body
54
- return '' if output.is_a?(Vedeu::Cells::Escape)
55
-
56
- output.inject([]) do |acc, line|
57
- acc << "#{start_row_tag}\n"
58
- line.each do |char|
59
- acc << char.to_html(options)
60
- end
61
- acc << "#{end_row_tag}\n"
62
- end.join
41
+ end
63
42
  end
64
43
 
65
- private
66
-
67
44
  # Returns a boolean indicating whether the output is a
68
45
  # {Vedeu::Cells::Escape}. If it is, it won't be rendered in
69
46
  # HTML.
70
47
  #
71
48
  # @return [Boolean]
72
49
  def escape?
73
- output.is_a?(Vedeu::Cells::Escape)
74
- end
75
-
76
- # @return [Array<Array<Vedeu::Views::Char>>]
77
- def output
78
- @output || options[:output]
79
- end
80
-
81
- # @return [String]
82
- def end_tag
83
- options[:end_tag]
50
+ output.is_a?(Vedeu::Cells::Escape) || output.is_a?(Vedeu::Cells::Cursor)
84
51
  end
85
52
 
86
- # @return [String]
87
- def end_row_tag
88
- options[:end_row_tag]
89
- end
90
-
91
- # @return [String]
92
- def start_tag
93
- options[:start_tag]
94
- end
95
-
96
- # @return [String]
97
- def start_row_tag
98
- options[:start_row_tag]
99
- end
100
-
101
- # @return [String]
102
- def template
103
- options[:template]
104
- end
105
-
106
- # The default values for a new instance of this class.
107
- #
108
- # @return [Hash<Symbol => void>]
109
- def defaults
110
- {
111
- content: '',
112
- end_tag: '</td>',
113
- end_row_tag: '</tr>',
114
- filename: 'out',
115
- start_tag: '<td',
116
- start_row_tag: '<tr>',
117
- template: default_template,
118
- timestamp: false,
119
- write_file: true,
120
- }
121
- end
53
+ # @return [Boolean]
54
+ def valid?
55
+ return false if string?(output) || escape?
122
56
 
123
- # @return [String]
124
- def default_template
125
- ::File.dirname(__FILE__) + '/../templates/html_renderer.vedeu'
57
+ true
126
58
  end
127
59
 
128
60
  end # HTML
@@ -8,49 +8,33 @@ module Vedeu
8
8
  #
9
9
  class JSON < Vedeu::Renderers::File
10
10
 
11
- # Returns a new instance of Vedeu::Renderers::JSON.
12
- #
13
- # @param options [Hash]
14
- # @return [Vedeu::Renderers::JSON]
15
- def initialize(options = {})
16
- @options = options || {}
17
- end
11
+ include Vedeu::Renderers::Options
18
12
 
19
13
  # Render a cleared output.
20
14
  #
21
- # @return [String]
15
+ # @return [void]
22
16
  def clear
23
- json = parse({})
24
-
25
- super(json, { compression: false })
26
-
27
- json
17
+ render({})
28
18
  end
29
19
 
30
- # @param output [Vedeu::Models::Page]
31
- # @return [String]
32
- def render(output)
33
- json = parse(output)
34
-
35
- super(json, { compression: false })
20
+ private
36
21
 
37
- json
22
+ # @return [Array]
23
+ def as_hash
24
+ output.content.map(&:to_h)
38
25
  end
39
26
 
40
- private
41
-
42
- # @param output [Vedeu::Models::Page]
43
27
  # @return [String]
44
- def parse(output)
45
- ::JSON.pretty_generate(as_hash(output))
46
- end
28
+ def content
29
+ if hash?(output)
30
+ ::JSON.pretty_generate(output)
47
31
 
48
- # @param output [Vedeu::Models::Page]
49
- # @return [Array]
50
- def as_hash(output)
51
- return output if output.is_a?(Hash)
32
+ else
33
+ Vedeu.log(type: :render,
34
+ message: "#{self.class.name}#content: #{output.class.name}")
52
35
 
53
- output.content.map(&:to_hash)
36
+ ::JSON.pretty_generate(as_hash)
37
+ end
54
38
  end
55
39
 
56
40
  end # JSON
@@ -8,38 +8,184 @@ module Vedeu
8
8
  #
9
9
  module Options
10
10
 
11
- # :nocov:
11
+ include Vedeu::Common
12
12
 
13
- # @!attribute [w] options
13
+ # @!attribute [rw] options
14
14
  # @return [Hash<Symbol => void>]
15
- attr_writer :options
15
+ attr_accessor :options
16
+
17
+ # Returns a new instance of the class including this module.
18
+ #
19
+ # @param opts [Hash]
20
+ # @return [void]
21
+ def initialize(opts = {})
22
+ @options = defaults.merge!(opts || {})
23
+ end
24
+
25
+ # @return [void]
26
+ def clear
27
+ render('')
28
+ end
29
+
30
+ # @param output [Vedeu::Models::Page]
31
+ # @param opts [Hash]
32
+ # @return [void]
33
+ def render(output = '')
34
+ options.merge!(output: output)
35
+
36
+ write
37
+ end
38
+
39
+ # @raise [Vedeu::Error::NotImplemented] Subclasses of this class
40
+ # must implement this method.
41
+ # @return [Vedeu::Error::NotImplemented]
42
+ def write
43
+ fail Vedeu::Error::NotImplemented, 'Including classes implement this.'
44
+ end
45
+
46
+ private
16
47
 
17
48
  # Returns a boolean indicating whether the content should be
18
49
  # compressed if compression is available.
19
50
  #
20
51
  # @return [Boolean]
21
- def compress?
22
- options[:compression] || Vedeu.config.compression? || false
52
+ def compression?
53
+ boolean(options[:compression])
23
54
  end
24
55
 
25
- private
26
-
27
- # Combines the options provided at instantiation with the
28
- # default values.
56
+ # Compresses the output depending on configuration.
29
57
  #
30
- # @return [Hash<Symbol => void>]
31
- def options
32
- defaults.merge!(@options)
58
+ # @return [String]
59
+ def compression
60
+ if compression?
61
+ Vedeu::Output::Compressor.render(output, options)
62
+
63
+ else
64
+ output
65
+
66
+ end
67
+ end
68
+
69
+ # @return [void]
70
+ def content
71
+ fail Vedeu::Error::NotImplemented, 'Including classes implement this.'
33
72
  end
34
73
 
35
74
  # The default values for a new instance of this class.
36
75
  #
76
+ # @param options [Hash]
77
+ # @option options content [String] Defaults to an empty string.
78
+ # @option options end_tag [String] Defaults to '</td>'.
79
+ # @option options end_row_tag [String] Defaults to '</tr>'.
80
+ # @option options filename [String] Provide a filename for the
81
+ # output. Defaults to 'out'.
82
+ # @option options start_tag [String] Defaults to '<td' (note the
83
+ # end of the tag is missing, this is so that inline styles can
84
+ # be added later).
85
+ # @option options start_row_tag [String] Defaults to '<tr>'.
86
+ # @option options template [String]
87
+ # @option options timestamp [Boolean] Append a timestamp to the
88
+ # filename.
89
+ # @option options write_file [Boolean] Whether to write the file
90
+ # to the given filename.
91
+ #
37
92
  # @return [Hash<Symbol => void>]
38
93
  def defaults
39
- {}
94
+ {
95
+ compression: Vedeu.config.compression?,
96
+ end_tag: '</td>',
97
+ end_row_tag: '</tr>',
98
+ filename: 'out',
99
+ output: '',
100
+ start_tag: '<td',
101
+ start_row_tag: '<tr>',
102
+ template: default_template,
103
+ timestamp: false,
104
+ write_file: false,
105
+ }
106
+ end
107
+
108
+ # @return [String]
109
+ def default_template
110
+ ::File.dirname(__FILE__) + '/./templates/html_renderer.vedeu'
111
+ end
112
+
113
+ # @return [String]
114
+ def end_tag
115
+ options[:end_tag]
40
116
  end
41
117
 
42
- # :nocov:
118
+ # @return [String]
119
+ def end_row_tag
120
+ options[:end_row_tag]
121
+ end
122
+
123
+ # Return the filename given in the options, (or use the
124
+ # default), and append a timestamp if the :timestamp option was
125
+ # set to true.
126
+ #
127
+ # @return [String]
128
+ def filename
129
+ options[:filename] + timestamp
130
+ end
131
+
132
+ # @return [String]
133
+ def start_tag
134
+ options[:start_tag]
135
+ end
136
+
137
+ # @return [String]
138
+ def start_row_tag
139
+ options[:start_row_tag]
140
+ end
141
+
142
+ # @return [void]
143
+ def output
144
+ options[:output]
145
+ end
146
+
147
+ # @return [Boolean]
148
+ def output?
149
+ present?(output)
150
+ end
151
+
152
+ # @return [String]
153
+ def template
154
+ options[:template]
155
+ end
156
+
157
+ # @return [Boolean]
158
+ def timestamp?
159
+ boolean(options[:timestamp])
160
+ end
161
+
162
+ # Return a timestamp for use as part of the filename if the
163
+ # :timestamp option was set to true, otherwise an empty string.
164
+ #
165
+ # @return [String]
166
+ def timestamp
167
+ return "_#{Vedeu.clock_time}" if timestamp?
168
+
169
+ ''
170
+ end
171
+
172
+ # Returns a boolean indicating whether a file should be written.
173
+ #
174
+ # @return [Boolean]
175
+ def write_file?
176
+ boolean(options[:write_file])
177
+ end
178
+
179
+ # Render the output (either content or clearing) to a file.
180
+ #
181
+ # @return [String]
182
+ def write_file
183
+ data = content
184
+
185
+ ::File.write(filename, data)
186
+
187
+ data
188
+ end
43
189
 
44
190
  end # Options
45
191