vedeu 0.8.12 → 0.8.13

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 (112) hide show
  1. checksums.yaml +4 -4
  2. data/bin/vedeu +1 -1
  3. data/docs/dsl/by_method/profile.md +1 -1
  4. data/docs/dsl/by_method/view/repositories.md +4 -0
  5. data/integrations/342_streams.rb +1 -1
  6. data/integrations/dsl_app_001.rb +1 -0
  7. data/integrations/dsl_app_002.rb +1 -0
  8. data/integrations/dsl_app_003.rb +1 -0
  9. data/integrations/dsl_app_004.rb +1 -0
  10. data/integrations/dsl_app_005.rb +1 -0
  11. data/integrations/dsl_app_006.rb +1 -0
  12. data/integrations/dsl_app_007.rb +1 -0
  13. data/integrations/dsl_app_008.rb +1 -0
  14. data/integrations/dsl_app_009.rb +1 -0
  15. data/integrations/dsl_app_010.rb +1 -0
  16. data/integrations/dsl_app_011.rb +1 -0
  17. data/integrations/dsl_app_012.rb +1 -0
  18. data/integrations/dsl_app_013.rb +1 -0
  19. data/integrations/dsl_app_014.rb +1 -0
  20. data/integrations/dsl_app_015.rb +1 -0
  21. data/integrations/dsl_app_016.rb +1 -0
  22. data/integrations/dsl_app_017.rb +1 -0
  23. data/integrations/dsl_app_018.rb +1 -0
  24. data/integrations/dsl_app_019.rb +1 -0
  25. data/integrations/dsl_app_020.rb +1 -0
  26. data/integrations/dsl_app_021.rb +1 -0
  27. data/integrations/dsl_app_022.rb +1 -0
  28. data/integrations/dsl_app_border_001.rb +1 -0
  29. data/integrations/dsl_app_border_002.rb +1 -0
  30. data/integrations/dsl_app_border_003.rb +1 -0
  31. data/integrations/dsl_app_border_004.rb +1 -0
  32. data/integrations/dsl_app_border_005.rb +1 -0
  33. data/lib/vedeu/application/application_view.rb +3 -3
  34. data/lib/vedeu/borders/dsl.rb +2 -2
  35. data/lib/vedeu/borders/title.rb +1 -1
  36. data/lib/vedeu/buffers/view.rb +1 -11
  37. data/lib/vedeu/cells/empty.rb +2 -2
  38. data/lib/vedeu/coercers/alignment.rb +5 -5
  39. data/lib/vedeu/coercers/coercer.rb +4 -5
  40. data/lib/vedeu/coercers/colour_attributes.rb +1 -1
  41. data/lib/vedeu/coercers/horizontal_alignment.rb +3 -3
  42. data/lib/vedeu/coercers/position.rb +4 -9
  43. data/lib/vedeu/coercers/vertical_alignment.rb +3 -3
  44. data/lib/vedeu/colours/colour.rb +2 -1
  45. data/lib/vedeu/colours/translator.rb +2 -2
  46. data/lib/vedeu/common.rb +20 -1
  47. data/lib/vedeu/configuration/api.rb +8 -6
  48. data/lib/vedeu/configuration/configuration.rb +2 -2
  49. data/lib/vedeu/cursors/coordinate.rb +2 -2
  50. data/lib/vedeu/cursors/cursor.rb +3 -2
  51. data/lib/vedeu/dsl/border.rb +1 -1
  52. data/lib/vedeu/dsl/elements.rb +9 -9
  53. data/lib/vedeu/dsl/geometry.rb +3 -3
  54. data/lib/vedeu/dsl/helpers/wordwrap.rb +4 -4
  55. data/lib/vedeu/dsl/view.rb +9 -9
  56. data/lib/vedeu/dsl/views.rb +2 -2
  57. data/lib/vedeu/editor/document.rb +1 -1
  58. data/lib/vedeu/editor/item.rb +17 -15
  59. data/lib/vedeu/esc/colours.rb +21 -20
  60. data/lib/vedeu/geometries/area/area.rb +6 -2
  61. data/lib/vedeu/geometries/dsl/grid.rb +2 -2
  62. data/lib/vedeu/geometries/geometry.rb +34 -46
  63. data/lib/vedeu/geometries/move.rb +5 -4
  64. data/lib/vedeu/geometries/position.rb +1 -1
  65. data/lib/vedeu/groups/dsl.rb +2 -2
  66. data/lib/vedeu/groups/group.rb +1 -1
  67. data/lib/vedeu/groups/refresh.rb +2 -2
  68. data/lib/vedeu/input/capture.rb +2 -1
  69. data/lib/vedeu/input/dsl.rb +22 -16
  70. data/lib/vedeu/input/key.rb +1 -1
  71. data/lib/vedeu/input/mapper.rb +6 -6
  72. data/lib/vedeu/input/read.rb +2 -2
  73. data/lib/vedeu/interfaces/dsl.rb +2 -2
  74. data/lib/vedeu/logging/debug.rb +10 -10
  75. data/lib/vedeu/logging/timer.rb +7 -11
  76. data/lib/vedeu/menus/dsl.rb +2 -2
  77. data/lib/vedeu/models/focus.rb +3 -3
  78. data/lib/vedeu/models/page.rb +1 -1
  79. data/lib/vedeu/models/row.rb +1 -1
  80. data/lib/vedeu/presentation/style.rb +1 -1
  81. data/lib/vedeu/renderers/escape.rb +0 -6
  82. data/lib/vedeu/renderers/options.rb +3 -3
  83. data/lib/vedeu/renderers/text.rb +0 -6
  84. data/lib/vedeu/repositories/assemblage.rb +1 -1
  85. data/lib/vedeu/repositories/defaults.rb +2 -2
  86. data/lib/vedeu/repositories/repositories.rb +17 -1
  87. data/lib/vedeu/repositories/repository.rb +5 -5
  88. data/lib/vedeu/runtime/application.rb +3 -3
  89. data/lib/vedeu/runtime/main_loop.rb +2 -2
  90. data/lib/vedeu/runtime/router.rb +11 -11
  91. data/lib/vedeu/support/point.rb +18 -15
  92. data/lib/vedeu/templating/helpers.rb +1 -1
  93. data/lib/vedeu/templating/template.rb +4 -4
  94. data/lib/vedeu/terminal/terminal.rb +1 -1
  95. data/lib/vedeu/version.rb +1 -1
  96. data/lib/vedeu/views/chars.rb +3 -3
  97. data/lib/vedeu/views/line.rb +1 -1
  98. data/lib/vedeu/views/lines.rb +3 -3
  99. data/lib/vedeu/views/stream.rb +1 -1
  100. data/lib/vedeu/views/streams.rb +3 -3
  101. data/lib/vedeu/views/view.rb +2 -2
  102. data/test/lib/vedeu/common_test.rb +43 -0
  103. data/test/lib/vedeu/cursors/cursor_test.rb +1 -1
  104. data/test/lib/vedeu/esc/colours_test.rb +42 -0
  105. data/test/lib/vedeu/input/dsl_test.rb +8 -8
  106. data/test/lib/vedeu/logging/debug_test.rb +2 -2
  107. data/test/lib/vedeu/logging/timer_test.rb +4 -13
  108. data/test/lib/vedeu/renderers/escape_test.rb +24 -0
  109. data/test/lib/vedeu/repositories/repositories_test.rb +6 -0
  110. data/test/support/examples/material_colours_app.rb +30 -51
  111. data/vedeu.gemspec +2 -2
  112. metadata +9 -6
@@ -32,12 +32,12 @@ module Vedeu
32
32
  # @macro raise_missing_required
33
33
  # @return [Boolean]
34
34
  def registered?(key = nil, name = nil)
35
- fail Vedeu::Error::MissingRequired,
36
- 'Cannot check whether a key is registered to a keymap without ' \
37
- 'the key.' if absent?(key)
38
- fail Vedeu::Error::MissingRequired,
39
- 'Cannot check whether a key is registered to a keymap without ' \
40
- 'the keymap name.' if absent?(name)
35
+ raise Vedeu::Error::MissingRequired,
36
+ 'Cannot check whether a key is registered to a keymap ' \
37
+ 'without the key.' if absent?(key)
38
+ raise Vedeu::Error::MissingRequired,
39
+ 'Cannot check whether a key is registered to a keymap ' \
40
+ 'without the keymap name.' if absent?(name)
41
41
 
42
42
  new(key, name).registered?
43
43
  end
@@ -102,8 +102,8 @@ module Vedeu
102
102
  # @return [Symbol]
103
103
  def mode
104
104
  unless valid_mode?
105
- fail Vedeu::Error::InvalidSyntax,
106
- ':mode must be `:raw`, `:fake` or `:cooked`.'
105
+ raise Vedeu::Error::InvalidSyntax,
106
+ ':mode must be `:raw`, `:fake` or `:cooked`.'
107
107
  end
108
108
 
109
109
  options[:mode]
@@ -39,8 +39,8 @@ module Vedeu
39
39
  # @return [Vedeu::Interfaces::Interface]
40
40
  # @todo More documentation required.
41
41
  def interface(name, &block)
42
- fail Vedeu::Error::MissingRequired unless name
43
- fail Vedeu::Error::RequiresBlock unless block_given?
42
+ raise Vedeu::Error::MissingRequired unless name
43
+ raise Vedeu::Error::RequiresBlock unless block_given?
44
44
 
45
45
  attributes = { client: client(&block), name: name }
46
46
 
@@ -41,11 +41,11 @@ module Vedeu
41
41
  # @macro raise_requires_block
42
42
  # @return [void]
43
43
  # @yieldreturn [void] The section of the application to profile.
44
- def profile(filename = '/tmp/profile.html', &block)
45
- fail Vedeu::Error::RequiresBlock unless block_given?
46
-
44
+ def profile(filename = '/tmp/vedeu_profile', &block)
47
45
  Vedeu.requires_gem!('ruby-prof')
48
46
 
47
+ raise Vedeu::Error::RequiresBlock unless block_given?
48
+
49
49
  # ::RubyProf.measure_mode = ::RubyProf::WALL_TIME
50
50
  # ::RubyProf.measure_mode = ::RubyProf::PROCESS_TIME
51
51
  ::RubyProf.measure_mode = ::RubyProf::CPU_TIME
@@ -69,28 +69,28 @@ module Vedeu
69
69
  # ::RubyProf::CallTreePrinter.new(result).print(file)
70
70
 
71
71
  # Creates a flat report in text format
72
- # ::RubyProf::FlatPrinter
72
+ # ::RubyProf::FlatPrinter.new(result).print(file)
73
73
 
74
74
  # - same as above but more verbose
75
- # ::RubyProf::FlatPrinterWithLineNumbers
75
+ # ::RubyProf::FlatPrinterWithLineNumbers.new(result).print(file)
76
76
 
77
77
  # - Creates a call graph report in text format
78
- # ::RubyProf::GraphPrinter
78
+ # ::RubyProf::GraphPrinter.new(result).print(file)
79
79
 
80
80
  # - Creates a call graph report in HTML (separate files per
81
81
  # thread)
82
- # ::RubyProf::GraphHtmlPrinter
82
+ # ::RubyProf::GraphHtmlPrinter.new(result).print(file)
83
83
 
84
84
  # - Creates a call graph report in GraphViz's DOT format
85
85
  # which can be converted to an image
86
- # ::RubyProf::DotPrinter
86
+ # ::RubyProf::DotPrinter.new(result).print(file)
87
87
 
88
88
  # - Creates a call tree report compatible with KCachegrind.
89
- # ::RubyProf::CallTreePrinter
89
+ # ::RubyProf::CallTreePrinter.new(result).print(file)
90
90
 
91
91
  # - Uses the other printers to create several reports in one
92
92
  # profiling run
93
- # ::RubyProf::MultiPrinter
93
+ # ::RubyProf::MultiPrinter.new(result).print(file)
94
94
  end
95
95
 
96
96
  work
@@ -41,22 +41,18 @@ module Vedeu
41
41
  # @return [void|NilClass] The return value of the executed
42
42
  # block if given, or nil if debugging is disabled.
43
43
  def measure(&block)
44
- if block_given?
45
- if Vedeu.config.debug?
46
- work = yield
44
+ raise Vedeu::Error::RequiresBlock unless block_given?
47
45
 
48
- Vedeu.log(type: :timer,
49
- message: "#{message} took #{elapsed}ms.")
46
+ if Vedeu.config.debug?
47
+ work = yield
50
48
 
51
- work
49
+ Vedeu.log(type: :timer,
50
+ message: "#{message} took #{elapsed}ms.")
52
51
 
53
- else
54
- yield
55
-
56
- end
52
+ work
57
53
 
58
54
  else
59
- fail Vedeu::Error::RequiresBlock if Vedeu.config.debug?
55
+ yield
60
56
 
61
57
  end
62
58
  end
@@ -38,8 +38,8 @@ module Vedeu
38
38
  # @macro raise_missing_required
39
39
  # @return [API::Menu]
40
40
  def menu(name, &block)
41
- fail Vedeu::Error::MissingRequired unless name
42
- fail Vedeu::Error::RequiresBlock unless block_given?
41
+ raise Vedeu::Error::MissingRequired unless name
42
+ raise Vedeu::Error::RequiresBlock unless block_given?
43
43
 
44
44
  attributes = { client: client(&block), name: name }
45
45
 
@@ -209,9 +209,9 @@ module Vedeu
209
209
 
210
210
  # @raise [Vedeu::Error::ModelNotFound]
211
211
  def not_registered!(name)
212
- fail Vedeu::Error::ModelNotFound,
213
- "Cannot focus '#{name}' as this interface has not been " \
214
- 'registered.'
212
+ raise Vedeu::Error::ModelNotFound,
213
+ "Cannot focus '#{name}' as this interface has not been " \
214
+ 'registered.'
215
215
  end
216
216
 
217
217
  # Return the name of the interface in focus after triggering the
@@ -64,7 +64,7 @@ module Vedeu
64
64
  # @param other [Vedeu::Models::Page]
65
65
  # @return [Boolean]
66
66
  def eql?(other)
67
- self.class == other.class && rows == other.rows
67
+ self.class.equal?(other.class) && rows == other.rows
68
68
  end
69
69
  alias == eql?
70
70
 
@@ -63,7 +63,7 @@ module Vedeu
63
63
  # @param other [Vedeu::Models::Row]
64
64
  # @return [Boolean]
65
65
  def eql?(other)
66
- self.class == other.class && cells == other.cells
66
+ self.class.equal?(other.class) && cells == other.cells
67
67
  end
68
68
  alias == eql?
69
69
 
@@ -55,7 +55,7 @@ module Vedeu
55
55
  # @param other [void]
56
56
  # @return [Boolean]
57
57
  def eql?(other)
58
- self.class == other.class && value == other.value
58
+ self.class.equal?(other.class) && value == other.value
59
59
  end
60
60
  alias == eql?
61
61
 
@@ -50,12 +50,6 @@ module Vedeu
50
50
  empty
51
51
  end
52
52
 
53
- # @return [Boolean]
54
- def positionable?(char)
55
- char.respond_to?(:position) &&
56
- char.position.is_a?(Vedeu::Geometries::Position)
57
- end
58
-
59
53
  # @return [Array<Class>]
60
54
  def renderables
61
55
  [
@@ -53,7 +53,7 @@ module Vedeu
53
53
 
54
54
  # @macro raise_not_implemented
55
55
  def write
56
- fail Vedeu::Error::NotImplemented, 'Including classes implement this.'
56
+ raise Vedeu::Error::NotImplemented, 'Including classes implement this.'
57
57
  end
58
58
 
59
59
  private
@@ -81,7 +81,7 @@ module Vedeu
81
81
 
82
82
  # @macro raise_not_implemented
83
83
  def content
84
- fail Vedeu::Error::NotImplemented, 'Including classes implement this.'
84
+ raise Vedeu::Error::NotImplemented, 'Including classes implement this.'
85
85
  end
86
86
 
87
87
  # @macro defaults_method
@@ -90,7 +90,7 @@ module Vedeu
90
90
  compression: Vedeu.config.compression?,
91
91
  end_tag: '</td>',
92
92
  end_row_tag: '</tr>',
93
- filename: 'out',
93
+ filename: '/tmp/vedeu_out',
94
94
  output: '',
95
95
  start_tag: '<td',
96
96
  start_row_tag: '<tr>',
@@ -45,12 +45,6 @@ module Vedeu
45
45
  empty
46
46
  end
47
47
 
48
- # @return [Boolean]
49
- def positionable?(char)
50
- char.respond_to?(:position) &&
51
- char.position.is_a?(Vedeu::Geometries::Position)
52
- end
53
-
54
48
  # @return [Array<Class>]
55
49
  def renderables
56
50
  [
@@ -50,7 +50,7 @@ module Vedeu
50
50
  # @param other [void]
51
51
  # @return [Boolean]
52
52
  def eql?(other)
53
- self.class == other.class && collection == other.collection
53
+ self.class.equal?(other.class) && collection == other.collection
54
54
  end
55
55
  alias == eql?
56
56
 
@@ -41,8 +41,8 @@ module Vedeu
41
41
  # @macro raise_invalid_syntax
42
42
  # @return [Hash]
43
43
  def validate(attributes)
44
- fail Vedeu::Error::InvalidSyntax,
45
- 'Argument :attributes is not a Hash.' unless hash?(attributes)
44
+ raise Vedeu::Error::InvalidSyntax,
45
+ 'Argument :attributes is not a Hash.' unless hash?(attributes)
46
46
 
47
47
  attributes.keep_if { |key, _| defaults.key?(key) }
48
48
  end
@@ -38,11 +38,22 @@ module Vedeu
38
38
  end
39
39
  end
40
40
 
41
+ # Access all the repositories stored.
42
+ #
43
+ # @return [Array]
44
+ def repositories
45
+ self
46
+ end
47
+
41
48
  # Remove all stored models from the repository.
42
49
  #
43
50
  # @return [Boolean]
44
51
  def reset!
45
- all.map { |repository| repository.send(:reset) }
52
+ storage.map do |repository|
53
+ Vedeu.log(type: :red,
54
+ message: "Resetting: #{repository.name}")
55
+ repository.reset!
56
+ end
46
57
 
47
58
  true
48
59
  end
@@ -59,4 +70,9 @@ module Vedeu
59
70
 
60
71
  end # Repositories
61
72
 
73
+ # @!method repositories
74
+ # @see Vedeu::Repositories
75
+ def_delegators Vedeu::Repositories,
76
+ :repositories
77
+
62
78
  end # Vedeu
@@ -95,8 +95,8 @@ module Vedeu
95
95
  # found with this name.
96
96
  # @return [Hash<String => Object>]
97
97
  def find!(name)
98
- find(name) || fail(Vedeu::Error::ModelNotFound,
99
- "Cannot find model by name: '#{name}'")
98
+ find(name) || raise(Vedeu::Error::ModelNotFound,
99
+ "Cannot find model by name: '#{name}'")
100
100
  end
101
101
 
102
102
  # Find a model by name, registers the model by name when not
@@ -182,9 +182,9 @@ module Vedeu
182
182
  # @macro raise_missing_required
183
183
  # @return [Boolean]
184
184
  def valid_model?(model)
185
- fail Vedeu::Error::MissingRequired,
186
- "Cannot store model '#{model.class}' without a name " \
187
- 'attribute.' unless present?(model.name)
185
+ raise Vedeu::Error::MissingRequired,
186
+ "Cannot store model '#{model.class}' without a name " \
187
+ 'attribute.' unless present?(model.name)
188
188
  end
189
189
 
190
190
  end # Repository
@@ -127,9 +127,9 @@ module Vedeu
127
127
  # @param block [Proc]
128
128
  # @return [void]
129
129
  def run_once(&block)
130
- yield.tap do
131
- # Vedeu.debug(binding)
132
- end
130
+ # Vedeu.debug(binding)
131
+
132
+ yield
133
133
  end
134
134
 
135
135
  # :nocov:
@@ -25,7 +25,7 @@ module Vedeu
25
25
 
26
26
  Vedeu.trigger(:_drb_restart_)
27
27
 
28
- fail Vedeu::Error::ModeSwitch
28
+ raise Vedeu::Error::ModeSwitch
29
29
  end
30
30
 
31
31
  # Start the main loop.
@@ -64,7 +64,7 @@ module Vedeu
64
64
  # the running application.
65
65
  # @return [void]
66
66
  def safe_exit_point!
67
- fail Vedeu::Error::Interrupt if @started && !@loop
67
+ raise Vedeu::Error::Interrupt if @started && !@loop
68
68
  end
69
69
 
70
70
  # :nocov:
@@ -25,8 +25,8 @@ module Vedeu
25
25
  # @return [void]
26
26
  def add_controller(controller, klass)
27
27
  unless present?(controller)
28
- fail Vedeu::Error::MissingRequired,
29
- 'Cannot store controller without a name attribute.'
28
+ raise Vedeu::Error::MissingRequired,
29
+ 'Cannot store controller without a name attribute.'
30
30
  end
31
31
 
32
32
  Vedeu.log(type: :create,
@@ -68,9 +68,9 @@ module Vedeu
68
68
  storage
69
69
 
70
70
  else
71
- fail Vedeu::Error::MissingRequired,
72
- 'Cannot store action without a controller or name ' \
73
- 'attribute.'
71
+ raise Vedeu::Error::MissingRequired,
72
+ 'Cannot store action without a controller or name ' \
73
+ 'attribute.'
74
74
 
75
75
  end
76
76
  end
@@ -111,12 +111,12 @@ module Vedeu
111
111
  if registered?(controller)
112
112
  return true if storage[controller][:actions].include?(action)
113
113
 
114
- fail Vedeu::Error::ActionNotFound,
115
- "#{action} is not registered for #{controller}."
114
+ raise Vedeu::Error::ActionNotFound,
115
+ "#{action} is not registered for #{controller}."
116
116
 
117
117
  else
118
- fail Vedeu::Error::ControllerNotFound,
119
- "#{controller} is not registered."
118
+ raise Vedeu::Error::ControllerNotFound,
119
+ "#{controller} is not registered."
120
120
 
121
121
  end
122
122
  end
@@ -143,8 +143,8 @@ module Vedeu
143
143
  storage[controller][:klass]
144
144
 
145
145
  else
146
- fail Vedeu::Error::MissingRequired,
147
- "Cannot route to #{controller} as no class defined."
146
+ raise Vedeu::Error::MissingRequired,
147
+ "Cannot route to #{controller} as no class defined."
148
148
 
149
149
  end
150
150
  end
@@ -11,6 +11,12 @@ module Vedeu
11
11
  #
12
12
  class Point
13
13
 
14
+ include Vedeu::Common
15
+
16
+ # @!attribute [r] value
17
+ # @return [Fixnum]
18
+ attr_reader :value
19
+
14
20
  # @param (see #initialize)
15
21
  # @macro raise_invalid_syntax
16
22
  # @return (see #initialize)
@@ -31,14 +37,16 @@ module Vedeu
31
37
  def initialize(value: nil, min: 1, max: Float::INFINITY)
32
38
  @min = min
33
39
  @max = max
34
- @value = value
40
+ @value = value || @min
41
+
42
+ freeze
35
43
  end
36
44
 
37
45
  # @macro raise_invalid_syntax
38
46
  # @return [Vedeu::Point]
39
47
  def coerce
40
- fail Vedeu::Error::InvalidSyntax,
41
- "Expecting 'min' to be less than 'max'." if min > max
48
+ raise Vedeu::Error::InvalidSyntax,
49
+ "Expecting 'min' to be less than 'max'." if min > max
42
50
 
43
51
  if value < min
44
52
  Vedeu::Point.coerce(value: min, min: min, max: max)
@@ -54,12 +62,7 @@ module Vedeu
54
62
 
55
63
  # @return [Boolean]
56
64
  def valid?
57
- @value.is_a?(Fixnum) && @value >= min && @value <= max
58
- end
59
-
60
- # @return [Fixnum]
61
- def value
62
- @value ||= min
65
+ numeric?(value) && value >= min && value <= max
63
66
  end
64
67
 
65
68
  private
@@ -67,19 +70,19 @@ module Vedeu
67
70
  # @macro raise_invalid_syntax
68
71
  # @return [Fixnum]
69
72
  def min
70
- return @min if @min.is_a?(Fixnum)
73
+ return @min if numeric?(@min)
71
74
 
72
- fail Vedeu::Error::InvalidSyntax,
73
- "Expecting 'min' to be a Fixnum."
75
+ raise Vedeu::Error::InvalidSyntax,
76
+ "Expecting 'min' to be a Fixnum."
74
77
  end
75
78
 
76
79
  # @macro raise_invalid_syntax
77
80
  # @return [Fixnum]
78
81
  def max
79
- return @max if @max.is_a?(Fixnum) || @max == Float::INFINITY
82
+ return @max if numeric?(@max) || @max == Float::INFINITY
80
83
 
81
- fail Vedeu::Error::InvalidSyntax,
82
- "Expecting 'max' to be a Fixnum or Float::INFINITY."
84
+ raise Vedeu::Error::InvalidSyntax,
85
+ "Expecting 'max' to be a Fixnum or Float::INFINITY."
83
86
  end
84
87
 
85
88
  end # Point
@@ -51,7 +51,7 @@ module Vedeu
51
51
 
52
52
  # @see Vedeu::Templating::Helpers#colour
53
53
  def define_stream(attributes = {}, &block)
54
- fail Vedeu::Error::RequiresBlock unless block_given?
54
+ raise Vedeu::Error::RequiresBlock unless block_given?
55
55
 
56
56
  value = yield
57
57
 
@@ -52,12 +52,12 @@ module Vedeu
52
52
  # @macro raise_missing_required
53
53
  # @return [String]
54
54
  def path
55
- fail Vedeu::Error::MissingRequired,
56
- 'No path to template specified.' if @path.empty?
55
+ raise Vedeu::Error::MissingRequired,
56
+ 'No path to template specified.' if @path.empty?
57
57
 
58
58
  unless File.exist?(@path)
59
- fail Vedeu::Error::MissingRequired,
60
- "Template file cannot be found. (#{@path})"
59
+ raise Vedeu::Error::MissingRequired,
60
+ "Template file cannot be found. (#{@path})"
61
61
  end
62
62
 
63
63
  @path
@@ -28,7 +28,7 @@ module Vedeu
28
28
  # @macro raise_requires_block
29
29
  # @return [Array]
30
30
  def open(&block)
31
- fail Vedeu::Error::RequiresBlock unless block_given?
31
+ raise Vedeu::Error::RequiresBlock unless block_given?
32
32
 
33
33
  if raw_mode? || fake_mode?
34
34
  console.raw { initialize_screen(mode) { yield } }
data/lib/vedeu/version.rb CHANGED
@@ -3,6 +3,6 @@
3
3
  module Vedeu
4
4
 
5
5
  # The current version of Vedeu.
6
- VERSION = '0.8.12'.freeze
6
+ VERSION = '0.8.13'
7
7
 
8
8
  end
@@ -45,9 +45,9 @@ module Vedeu
45
45
  end
46
46
 
47
47
  else
48
- fail Vedeu::Error::InvalidSyntax,
49
- 'Cannot coerce for Vedeu::View::Chars, as collection is ' \
50
- 'unrecognised.'
48
+ raise Vedeu::Error::InvalidSyntax,
49
+ 'Cannot coerce for Vedeu::View::Chars, as collection is ' \
50
+ 'unrecognised.'
51
51
 
52
52
  end
53
53
  end
@@ -81,7 +81,7 @@ module Vedeu
81
81
  # @param other [Vedeu::Repositories::Collection]
82
82
  # @return [Boolean]
83
83
  def eql?(other)
84
- self.class == other.class && value == other.value
84
+ self.class.equal?(other.class) && value == other.value
85
85
  end
86
86
  alias == eql?
87
87
 
@@ -36,9 +36,9 @@ module Vedeu
36
36
  new([collection], parent, name)
37
37
 
38
38
  else
39
- fail Vedeu::Error::InvalidSyntax,
40
- 'Cannot coerce for Vedeu::View::Lines, as collection ' \
41
- 'unrecognised.'
39
+ raise Vedeu::Error::InvalidSyntax,
40
+ 'Cannot coerce for Vedeu::View::Lines, as collection ' \
41
+ 'unrecognised.'
42
42
 
43
43
  end
44
44
  end
@@ -85,7 +85,7 @@ module Vedeu
85
85
  # @param other [void]
86
86
  # @return [Boolean]
87
87
  def eql?(other)
88
- self.class == other.class && value == other.value
88
+ self.class.equal?(other.class) && value == other.value
89
89
  end
90
90
  alias == eql?
91
91
 
@@ -47,9 +47,9 @@ module Vedeu
47
47
  new([Vedeu::Views::Stream.new(value: collection)], parent, name)
48
48
 
49
49
  else
50
- fail Vedeu::Error::InvalidSyntax,
51
- 'Cannot coerce for Vedeu::View::Streams, as collection ' \
52
- "unrecognised. (#{collection.class.name})"
50
+ raise Vedeu::Error::InvalidSyntax,
51
+ 'Cannot coerce for Vedeu::View::Streams, as collection ' \
52
+ "unrecognised. (#{collection.class.name})"
53
53
 
54
54
  end
55
55
  end
@@ -129,8 +129,8 @@ module Vedeu
129
129
  buffer.add(self, refresh)
130
130
 
131
131
  else
132
- fail Vedeu::Error::MissingRequired,
133
- 'Cannot store a view without a name.'
132
+ raise Vedeu::Error::MissingRequired,
133
+ 'Cannot store a view without a name.'
134
134
 
135
135
  end
136
136
 
@@ -208,6 +208,8 @@ module Vedeu
208
208
 
209
209
  subject { instance.numeric?(_value) }
210
210
 
211
+ it { instance.must_respond_to(:fixnum?) }
212
+
211
213
  context 'when the value is numeric' do
212
214
  let(:_value) { 16 }
213
215
 
@@ -219,6 +221,31 @@ module Vedeu
219
221
  end
220
222
  end
221
223
 
224
+ describe '#positionable?' do
225
+ subject { instance.positionable?(_value) }
226
+
227
+ context 'when it does not respond to position' do
228
+ let(:_value) { '' }
229
+
230
+ it { subject.must_equal(false) }
231
+ end
232
+
233
+ context 'when it responds to position' do
234
+ let(:_value) { Vedeu::Cells::Empty.new(position: position) }
235
+ let(:position) { false }
236
+
237
+ context 'when the position is a Vedeu::Geometries::Position' do
238
+ let(:position) { Vedeu::Geometries::Position.new }
239
+
240
+ it { subject.must_equal(true) }
241
+ end
242
+
243
+ context 'when the position is not a Vedeu::Geometries::Position' do
244
+ it { subject.must_equal(false) }
245
+ end
246
+ end
247
+ end
248
+
222
249
  describe '#present?' do
223
250
  subject { instance.defined_value_test(_value) }
224
251
 
@@ -328,6 +355,22 @@ module Vedeu
328
355
  end
329
356
  end
330
357
 
358
+ describe '#symbol?' do
359
+ let(:_value) {}
360
+
361
+ subject { instance.symbol?(_value) }
362
+
363
+ context 'when the value is a Symbol' do
364
+ let(:_value) { :test }
365
+
366
+ it { subject.must_equal(true) }
367
+ end
368
+
369
+ context 'when the value is not a Symbol' do
370
+ it { subject.must_equal(false) }
371
+ end
372
+ end
373
+
331
374
  describe '#truthy?' do
332
375
  subject { instance.truthy?(_value) }
333
376