vedeu 0.6.47 → 0.6.48

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/lib/vedeu/borders/border.rb +12 -0
  3. data/lib/vedeu/configuration/api.rb +3 -3
  4. data/lib/vedeu/editor/delete.rb +26 -9
  5. data/lib/vedeu/editor/document.rb +45 -50
  6. data/lib/vedeu/editor/line.rb +0 -2
  7. data/lib/vedeu/editor/lines.rb +0 -2
  8. data/lib/vedeu/events/event.rb +1 -1
  9. data/lib/vedeu/geometry/dimension.rb +4 -4
  10. data/lib/vedeu/geometry/geometry.rb +13 -0
  11. data/lib/vedeu/geometry/x_dimension.rb +2 -10
  12. data/lib/vedeu/geometry/y_dimension.rb +2 -10
  13. data/lib/vedeu/groups/group.rb +12 -0
  14. data/lib/vedeu/input/keymap.rb +12 -0
  15. data/lib/vedeu/interfaces/clear.rb +43 -36
  16. data/lib/vedeu/interfaces/interface.rb +13 -0
  17. data/lib/vedeu/logging/ips.rb +2 -2
  18. data/lib/vedeu/menus/menu.rb +12 -0
  19. data/lib/vedeu/models/views/composition.rb +13 -0
  20. data/lib/vedeu/models/views/html_char.rb +1 -1
  21. data/lib/vedeu/models/views/line.rb +13 -1
  22. data/lib/vedeu/models/views/stream.rb +12 -0
  23. data/lib/vedeu/models/views/view.rb +12 -0
  24. data/lib/vedeu/output/renderers/all.rb +2 -2
  25. data/lib/vedeu/output/renderers/html.rb +1 -1
  26. data/lib/vedeu/output/viewport.rb +1 -1
  27. data/lib/vedeu/repositories/model.rb +0 -32
  28. data/lib/vedeu/runtime/launcher.rb +1 -1
  29. data/lib/vedeu/templating/encoder.rb +1 -1
  30. data/lib/vedeu/version.rb +1 -1
  31. data/test/lib/vedeu/borders/border_test.rb +8 -0
  32. data/test/lib/vedeu/editor/delete_test.rb +2 -2
  33. data/test/lib/vedeu/editor/document_test.rb +19 -37
  34. data/test/lib/vedeu/geometry/geometry_test.rb +8 -0
  35. data/test/lib/vedeu/groups/group_test.rb +8 -0
  36. data/test/lib/vedeu/input/keymap_test.rb +8 -0
  37. data/test/lib/vedeu/interfaces/interface_test.rb +8 -0
  38. data/test/lib/vedeu/menus/menu_test.rb +8 -0
  39. data/test/lib/vedeu/models/views/composition_test.rb +7 -0
  40. data/test/lib/vedeu/models/views/line_test.rb +8 -0
  41. data/test/lib/vedeu/models/views/stream_test.rb +8 -0
  42. data/test/lib/vedeu/models/views/view_test.rb +8 -0
  43. data/test/lib/vedeu/repositories/model_test.rb +0 -8
  44. data/test/test_helper.rb +1 -1
  45. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9cde5fb2877e792b48f59abe6f024102949acc50
4
- data.tar.gz: eb2865895d814e117ddcba9b4f1c33126e6e337f
3
+ metadata.gz: 9759381f1db665ae94ab60090c238d752bbdc117
4
+ data.tar.gz: ac4f61ccd7ed1156dc851b590afe18d957ec2b97
5
5
  SHA512:
6
- metadata.gz: 5d248827101d024fed9e434ea22bcf19ebbf7e810a6d7b122b7f94c9379e6b97ca98866dcbc60af52ff4e511bbc100f438e3f6caf031a440466e2ac3fd67758b
7
- data.tar.gz: b87c4f2e854d3b7ecf0a2faca524fd9fef494b79502fe358a270ef264ee223f4f58523d39f930138c92207553068009286bca535a71e7f837efa2be6445a058c
6
+ metadata.gz: 20aa205043bf1c5563dd7814f26fc3edd2c26dc3b4edfd65ba85534a3e9294f38c682f1dcd662add1152d93ff3358544679c0bd8db784f54ba7aa59fff0ec1d0
7
+ data.tar.gz: d0ed14b86e102240df0609974d09dc6530c6e75cfc0dd86afa17b892ad19074427ac9b24459b9a3209c2d7792ff888b70732ee9a4edad8c92de8401575d93966
@@ -204,6 +204,18 @@ module Vedeu
204
204
  (enabled? && bottom?) ? yn - 1 : yn
205
205
  end
206
206
 
207
+ # Returns a DSL instance responsible for defining the DSL
208
+ # methods of this model.
209
+ #
210
+ # @param client [Object|NilClass] The client binding represents
211
+ # the client application object that is currently invoking a
212
+ # DSL method. It is required so that we can send messages to
213
+ # the client application object should we need to.
214
+ # @return [Vedeu::Borders::DSL] The DSL instance for this model.
215
+ def deputy(client = nil)
216
+ Vedeu::Borders::DSL.new(self, client)
217
+ end
218
+
207
219
  # Returns the width of the interface determined by whether a
208
220
  # left, right, both or neither borders are shown.
209
221
  #
@@ -557,10 +557,10 @@ module Vedeu
557
557
 
558
558
  private
559
559
 
560
- # @params attrs [Hash<Symbol => Vedeu::Colours::Background,
560
+ # @param attrs [Hash<Symbol => Vedeu::Colours::Background,
561
561
  # Vedeu::Colours::Foreground>]
562
- # @options attrs background [Vedeu::Colours::Background]
563
- # @options attrs foreground [Vedeu::Colours::Foreground]
562
+ # @option attrs background [Vedeu::Colours::Background]
563
+ # @option attrs foreground [Vedeu::Colours::Foreground]
564
564
  # @return [Hash<Symbol => Symbol>]
565
565
  def colour_attributes(attrs = {})
566
566
  {
@@ -26,15 +26,10 @@ module Vedeu
26
26
 
27
27
  # @return [Vedeu::Editor::Line|Vedeu::Editor::Lines]
28
28
  def delete
29
+ return collection if collection.empty? || negative_index?
29
30
  return collection.dup.tap { |c| c.slice!(index) } if index
30
-
31
- if collection.is_a?(Array)
32
- collection.dup.tap(&:pop)
33
-
34
- elsif collection.is_a?(String)
35
- collection.chop
36
-
37
- end
31
+ return collection.dup.tap(&:pop) if lines?
32
+ return collection.chop if line?
38
33
  end
39
34
 
40
35
  protected
@@ -53,11 +48,33 @@ module Vedeu
53
48
  def index
54
49
  return nil unless @index
55
50
 
56
- @index = 0 if @index < 0
57
51
  @index = size - 1 if @index > size
58
52
  @index
59
53
  end
60
54
 
55
+ # If true, we are dealing with a {Vedeu::Editor::Line} object.
56
+ #
57
+ # @return [Boolean]
58
+ def line?
59
+ collection.is_a?(String)
60
+ end
61
+
62
+ # If true, we are dealing with a {Vedeu::Editor::Lines}
63
+ # collection.
64
+ #
65
+ # @return [Boolean]
66
+ def lines?
67
+ collection.is_a?(Array)
68
+ end
69
+
70
+ # Returns a boolean indicating whether the index was given or
71
+ # negative.
72
+ #
73
+ # @return [Boolean]
74
+ def negative_index?
75
+ index && index < 0
76
+ end
77
+
61
78
  end # Delete
62
79
 
63
80
  end # Editor
@@ -49,15 +49,30 @@ module Vedeu
49
49
  end
50
50
  end
51
51
 
52
+ # Returns the document as a string with line breaks if there is
53
+ # more than one line.
54
+ #
55
+ # @return [String]
56
+ def execute
57
+ command = lines.map(&:to_s).join("\n".freeze)
58
+
59
+ reset!
60
+
61
+ Vedeu.trigger(:_clear_view_content_, name)
62
+
63
+ Vedeu.trigger(:_command_, command)
64
+
65
+ command
66
+ end
67
+
52
68
  # Deletes the character from the line where the cursor is
53
69
  # currently positioned.
54
70
  #
55
71
  # @return [Vedeu::Editor::Document]
56
72
  def delete_character
57
- if x - 1 < 0 && y == 0
58
- bol
73
+ return self if (x == 0 || x - 1 < 0) && y == 0
59
74
 
60
- elsif x - 1 < 0 && y > 0
75
+ if (x == 0 || x - 1 < 0) && y > 0
61
76
  delete_line
62
77
 
63
78
  return
@@ -80,25 +95,11 @@ module Vedeu
80
95
 
81
96
  up
82
97
 
83
- eol
84
-
85
- refresh
86
- end
87
-
88
- # Returns the document as a string with line breaks if there is
89
- # more than one line.
90
- #
91
- # @return [String]
92
- def execute
93
- command = lines.map(&:to_s).join("\n")
94
-
95
- reset!
96
-
97
- Vedeu.trigger(:_clear_view_content_, name)
98
+ cursor.x = line.size
98
99
 
99
- Vedeu.trigger(:_command_, command)
100
+ cursor.refresh
100
101
 
101
- command
102
+ refresh
102
103
  end
103
104
 
104
105
  # Inserts the given character in to the line where the cursor is
@@ -124,7 +125,7 @@ module Vedeu
124
125
 
125
126
  down
126
127
 
127
- bol
128
+ cursor.bol.refresh
128
129
 
129
130
  refresh
130
131
  end
@@ -178,6 +179,8 @@ module Vedeu
178
179
  return self if x - 1 < 0
179
180
 
180
181
  cursor.left.refresh
182
+
183
+ self
181
184
  end
182
185
 
183
186
  # Move the virtual cursor right.
@@ -187,6 +190,8 @@ module Vedeu
187
190
  return self if x + 1 > line.size
188
191
 
189
192
  cursor.right.refresh
193
+
194
+ self
190
195
  end
191
196
 
192
197
  # Move the virtual cursor up.
@@ -197,13 +202,9 @@ module Vedeu
197
202
 
198
203
  cursor.up.refresh
199
204
 
200
- if x > line(y).size
201
- eol
202
-
203
- else
204
- refresh
205
+ reposition_cursor_x!
205
206
 
206
- end
207
+ self
207
208
  end
208
209
 
209
210
  # Move the virtual cursor down.
@@ -214,33 +215,27 @@ module Vedeu
214
215
 
215
216
  cursor.down.refresh
216
217
 
217
- if x > line(y).size
218
- eol
219
-
220
- else
221
- refresh
218
+ reposition_cursor_x!
222
219
 
223
- end
220
+ self
224
221
  end
225
222
 
226
- # Move the virtual cursor to the beginning of the line.
227
- #
228
- # @return [Vedeu::Editor::Cursor]
229
- def bol
230
- cursor.bol.refresh
231
- end
223
+ private
232
224
 
233
- # Move the virtual cursor to the end of the line.
225
+ # Repositions the x coordinate of the virtual cursor to the end
226
+ # of the line if the x coordinate is beyond the end of the line.
227
+ #
228
+ # This is used when the cursor moves up or down, moving from a
229
+ # long line to a shorter line.
234
230
  #
235
231
  # @return [Vedeu::Editor::Cursor]
236
- def eol
237
- cursor.x = line.size
238
-
239
- cursor.refresh
232
+ def reposition_cursor_x!
233
+ if x > line.size
234
+ cursor.x = line.size
235
+ cursor.refresh
236
+ end
240
237
  end
241
238
 
242
- private
243
-
244
239
  # Returns the default options/attributes for this class.
245
240
  #
246
241
  # @return [Hash<Symbol => void|Symbol]
@@ -259,10 +254,10 @@ module Vedeu
259
254
  #
260
255
  # @return [Array<Vedeu::Views::Char>]
261
256
  def output
262
- Vedeu::Editor::Cropper.new(lines: lines,
263
- name: name,
264
- ox: ox,
265
- oy: oy).viewport
257
+ Vedeu::Editor::Cropper.new(lines: lines,
258
+ name: name,
259
+ ox: ox,
260
+ oy: oy).viewport
266
261
  end
267
262
 
268
263
  # Return a virtual cursor to track the cursor position within
@@ -66,8 +66,6 @@ module Vedeu
66
66
  # @param index [Fixnum|NilClass]
67
67
  # @return [String]
68
68
  def delete_character(index = nil)
69
- return self if line.empty? || (index && index < 0)
70
-
71
69
  Vedeu::Editor::Line.coerce(Vedeu::Editor::Delete
72
70
  .from(line, index, size))
73
71
  end
@@ -71,8 +71,6 @@ module Vedeu
71
71
  # @param index [Fixnum|NilClass]
72
72
  # @return [String]
73
73
  def delete_line(index = nil)
74
- return self if lines.empty? || (index && index < 0)
75
-
76
74
  Vedeu::Editor::Lines.coerce(Vedeu::Editor::Delete
77
75
  .from(lines, index, size))
78
76
  end
@@ -202,7 +202,7 @@ module Vedeu
202
202
  message << " for #{args.first.inspect}"
203
203
  end
204
204
 
205
- Vedeu.log(type: :event, message: message)
205
+ Vedeu.log(type: :event, message: message.freeze)
206
206
 
207
207
  closure.call(*args)
208
208
  end
@@ -74,10 +74,9 @@ module Vedeu
74
74
 
75
75
  private
76
76
 
77
- # @raise [Vedeu::Error::NotImplemented] Subclasses of this class
78
- # must implement this method.
77
+ # @return [Vedeu::Geometry::Alignment]
79
78
  def alignment
80
- fail Vedeu::Error::NotImplemented, 'Subclasses implement this.'.freeze
79
+ Vedeu::Geometry::Alignment.coerce(@alignment)
81
80
  end
82
81
 
83
82
  # Return the dimension.
@@ -243,9 +242,10 @@ module Vedeu
243
242
 
244
243
  # Returns the default options/attributes for this class.
245
244
  #
246
- # @return [Hash<Symbol => NilClass,Boolean,Symbol>]
245
+ # @return [Hash<Symbol => Boolean,Fixnum,NilClass,Symbol>]
247
246
  def defaults
248
247
  {
248
+ alignment: :none,
249
249
  d: nil,
250
250
  dn: nil,
251
251
  d_dn: nil,
@@ -121,6 +121,19 @@ module Vedeu
121
121
  }
122
122
  end
123
123
 
124
+ # Returns a DSL instance responsible for defining the DSL
125
+ # methods of this model.
126
+ #
127
+ # @param client [Object|NilClass] The client binding represents
128
+ # the client application object that is currently invoking a
129
+ # DSL method. It is required so that we can send messages to
130
+ # the client application object should we need to.
131
+ # @return [Vedeu::Geometry::DSL] The DSL instance for this
132
+ # model.
133
+ def deputy(client = nil)
134
+ Vedeu::Geometry::DSL.new(self, client)
135
+ end
136
+
124
137
  # An object is equal when its values are the same.
125
138
  #
126
139
  # @param other [Vedeu::Geometry::Geometry]
@@ -8,17 +8,9 @@ module Vedeu
8
8
 
9
9
  private
10
10
 
11
- # @return [Vedeu::Geometry::HorizontalAlignment]
12
- def alignment
13
- Vedeu::Geometry::Alignment.coerce(@alignment)
14
- end
15
-
16
- # @return [Hash<Symbol => NilClass,Boolean,Symbol>]
11
+ # @see Vedeu::Geometry::Dimension#defaults
17
12
  def defaults
18
- super.merge!(
19
- default: Vedeu.width,
20
- alignment: :none,
21
- )
13
+ super.merge!(default: Vedeu.width)
22
14
  end
23
15
 
24
16
  end # XDimension
@@ -8,17 +8,9 @@ module Vedeu
8
8
 
9
9
  private
10
10
 
11
- # @return [Vedeu::Geometry::VerticalAlignment]
12
- def alignment
13
- Vedeu::Geometry::Alignment.coerce(@alignment)
14
- end
15
-
16
- # @return [Hash<Symbol => NilClass,Boolean,Symbol>]
11
+ # @see Vedeu::Geometry::Dimension#defaults
17
12
  def defaults
18
- super.merge!(
19
- default: Vedeu.height,
20
- alignment: :none,
21
- )
13
+ super.merge!(default: Vedeu.height)
22
14
  end
23
15
 
24
16
  end # YDimension
@@ -72,6 +72,18 @@ module Vedeu
72
72
  interfaces.sort_by(&:zindex).map(&:name)
73
73
  end
74
74
 
75
+ # Returns a DSL instance responsible for defining the DSL
76
+ # methods of this model.
77
+ #
78
+ # @param client [Object|NilClass] The client binding represents
79
+ # the client application object that is currently invoking a
80
+ # DSL method. It is required so that we can send messages to
81
+ # the client application object should we need to.
82
+ # @return [Vedeu::Groups::DSL] The DSL instance for this model.
83
+ def deputy(client = nil)
84
+ Vedeu::Groups::DSL.new(self, client)
85
+ end
86
+
75
87
  # An object is equal when its values are the same.
76
88
  #
77
89
  # @param other [Vedeu::Groups::Group]
@@ -42,6 +42,18 @@ module Vedeu
42
42
  @keys = keys.add(key)
43
43
  end
44
44
 
45
+ # Returns a DSL instance responsible for defining the DSL
46
+ # methods of this model.
47
+ #
48
+ # @param client [Object|NilClass] The client binding represents
49
+ # the client application object that is currently invoking a
50
+ # DSL method. It is required so that we can send messages to
51
+ # the client application object should we need to.
52
+ # @return [Vedeu::Input::DSL] The DSL instance for this model.
53
+ def deputy(client = nil)
54
+ Vedeu::Input::DSL.new(self, client)
55
+ end
56
+
45
57
  # Returns the collection of keys defined for this keymap.
46
58
  #
47
59
  # @return [Vedeu::Input::Keys]
@@ -88,9 +88,14 @@ module Vedeu
88
88
  @border ||= Vedeu.borders.by_name(name)
89
89
  end
90
90
 
91
+ # @return [String] A string of blank characters.
92
+ def chars
93
+ @chars ||= (' ' * width).freeze
94
+ end
95
+
91
96
  # @return [Vedeu::Colours::Colour]
92
97
  def colour
93
- interface.colour
98
+ @colour ||= interface.colour
94
99
  end
95
100
 
96
101
  # @return [Boolean]
@@ -120,9 +125,13 @@ module Vedeu
120
125
 
121
126
  # @return [Fixnum]
122
127
  def height
123
- return border.height if content_only?
128
+ @height ||= if content_only?
129
+ border.height
130
+
131
+ else
132
+ geometry.height
124
133
 
125
- geometry.height
134
+ end
126
135
  end
127
136
 
128
137
  # Returns the interface by name.
@@ -140,21 +149,9 @@ module Vedeu
140
149
  # @return [String]
141
150
  def optimised_output
142
151
  Vedeu.timer("Optimised clearing #{clearing}: '#{name}'".freeze) do
143
- output = ''
144
-
145
- @y = y
146
- @x = x
147
- @colour = colour.to_s
148
- @chars = (' ' * width).freeze
149
-
150
- height.times do |iy|
151
- output << Vedeu::Geometry::Position.new(@y + iy, @x).to_s
152
- output << @colour
153
- output << @chars
154
- end
155
-
156
- output << Vedeu::Geometry::Position.new(@y, @x).to_s
157
- output
152
+ height.times.map do |iy|
153
+ Vedeu::Geometry::Position.new(y + iy, x).to_s + colour.to_s + chars
154
+ end.join + Vedeu::Geometry::Position.new(y, x).to_s
158
155
  end
159
156
  end
160
157
 
@@ -166,17 +163,11 @@ module Vedeu
166
163
  # @return [Array<Array<Vedeu::Views::Char>>]
167
164
  def output
168
165
  Vedeu.timer("Clearing #{clearing}: '#{name}'".freeze) do
169
- @y = y
170
- @x = x
171
- @width = width
172
- @height = height
173
- @colour = colour
174
-
175
- @clear ||= Array.new(@height) do |iy|
176
- Array.new(@width) do |ix|
166
+ @clear ||= Array.new(height) do |iy|
167
+ Array.new(width) do |ix|
177
168
  Vedeu::Views::Char.new(value: ' '.freeze,
178
- colour: @colour,
179
- position: [@y + iy, @x + ix])
169
+ colour: colour,
170
+ position: [y + iy, x + ix])
180
171
  end
181
172
  end
182
173
  end
@@ -184,30 +175,46 @@ module Vedeu
184
175
 
185
176
  # @return [String]
186
177
  def clearing
187
- return 'content'.freeze if content_only?
178
+ @clearing ||= if content_only?
179
+ 'content'.freeze
180
+
181
+ else
182
+ 'interface'.freeze
188
183
 
189
- 'interface'.freeze
184
+ end
190
185
  end
191
186
 
192
187
  # @return [Fixnum]
193
188
  def width
194
- return border.width if content_only?
189
+ @width ||= if content_only?
190
+ border.width
191
+
192
+ else
193
+ geometry.width
195
194
 
196
- geometry.width
195
+ end
197
196
  end
198
197
 
199
198
  # @return [Fixnum]
200
199
  def y
201
- return border.by if content_only?
200
+ @y ||= if content_only?
201
+ border.by
202
202
 
203
- geometry.y
203
+ else
204
+ geometry.y
205
+
206
+ end
204
207
  end
205
208
 
206
209
  # @return [Fixnum]
207
210
  def x
208
- return border.bx if content_only?
211
+ @x ||= if content_only?
212
+ border.bx
213
+
214
+ else
215
+ geometry.x
209
216
 
210
- geometry.x
217
+ end
211
218
  end
212
219
 
213
220
  end # Clear
@@ -72,6 +72,19 @@ module Vedeu
72
72
  end
73
73
  end
74
74
 
75
+ # Returns a DSL instance responsible for defining the DSL
76
+ # methods of this model.
77
+ #
78
+ # @param client [Object|NilClass] The client binding represents
79
+ # the client application object that is currently invoking a
80
+ # DSL method. It is required so that we can send messages to
81
+ # the client application object should we need to.
82
+ # @return [Vedeu::Interfaces::DSL] The DSL instance for this
83
+ # model.
84
+ def deputy(client = nil)
85
+ Vedeu::Interfaces::DSL.new(self, client)
86
+ end
87
+
75
88
  # Hide the named interface.
76
89
  #
77
90
  # Will hide the named interface. If the interface is currently
@@ -41,10 +41,10 @@ module Vedeu
41
41
  benchmark.run_comparison
42
42
  benchmark.full_report
43
43
 
44
- Vedeu.log(type: :debug, message: "IPS:\n#{$stdout.string}")
44
+ Vedeu.log(type: :debug, message: "IPS:\n#{$stdout.string}".freeze)
45
45
  $stdout = @old_stdout
46
46
 
47
- Vedeu.log(type: :debug, message: "Running: #{key}")
47
+ Vedeu.log(type: :debug, message: "Running: #{key}".freeze)
48
48
  samples[key].call
49
49
  end
50
50
 
@@ -56,6 +56,18 @@ module Vedeu
56
56
  @collection[@current]
57
57
  end
58
58
 
59
+ # Returns a DSL instance responsible for defining the DSL
60
+ # methods of this model.
61
+ #
62
+ # @param client [Object|NilClass] The client binding represents
63
+ # the client application object that is currently invoking a
64
+ # DSL method. It is required so that we can send messages to
65
+ # the client application object should we need to.
66
+ # @return [Vedeu::Menus::DSL] The DSL instance for this model.
67
+ def deputy(client = nil)
68
+ Vedeu::Menus::DSL.new(self, client)
69
+ end
70
+
59
71
  # Returns the item from the collection which shares the same
60
72
  # index as the value of {Vedeu::Menus::Menu#selected}.
61
73
  #
@@ -48,6 +48,19 @@ module Vedeu
48
48
  }
49
49
  end
50
50
 
51
+ # Returns a DSL instance responsible for defining the DSL
52
+ # methods of this model.
53
+ #
54
+ # @param client [Object|NilClass] The client binding represents
55
+ # the client application object that is currently invoking a
56
+ # DSL method. It is required so that we can send messages to
57
+ # the client application object should we need to.
58
+ # @return [Vedeu::DSL::Composition] The DSL instance for this
59
+ # model.
60
+ def deputy(client = nil)
61
+ Vedeu::DSL::Composition.new(self, client)
62
+ end
63
+
51
64
  # @return [Vedeu::Views::ViewCollection]
52
65
  def value
53
66
  collection.coerce(@value, self)
@@ -47,7 +47,7 @@ module Vedeu
47
47
  out = " style='"
48
48
  out << tag_style_background unless char.background.empty?
49
49
  out << tag_style_foreground unless char.foreground.empty?
50
- out << "'"
50
+ out << "'".freeze
51
51
  end
52
52
 
53
53
  # @return [String]
@@ -64,7 +64,19 @@ module Vedeu
64
64
  @chars ||= value.flat_map(&:chars)
65
65
  end
66
66
 
67
- # An object is equal when its values are the same.
67
+ # Returns a DSL instance responsible for defining the DSL
68
+ # methods of this model.
69
+ #
70
+ # @param client [Object|NilClass] The client binding represents
71
+ # the client application object that is currently invoking a
72
+ # DSL method. It is required so that we can send messages to
73
+ # the client application object should we need to.
74
+ # @return [Vedeu::DSL::Line] The DSL instance for this model.
75
+ def deputy(client = nil)
76
+ Vedeu::DSL::Line.new(self, client)
77
+ end
78
+
79
+ # An object is equal when its values are the same./
68
80
  #
69
81
  # @param other [Vedeu::Repositories::Collection]
70
82
  # @return [Boolean]
@@ -77,6 +77,18 @@ module Vedeu
77
77
  end
78
78
  end
79
79
 
80
+ # Returns a DSL instance responsible for defining the DSL
81
+ # methods of this model.
82
+ #
83
+ # @param client [Object|NilClass] The client binding represents
84
+ # the client application object that is currently invoking a
85
+ # DSL method. It is required so that we can send messages to
86
+ # the client application object should we need to.
87
+ # @return [Vedeu::DSL::Stream] The DSL instance for this model.
88
+ def deputy(client = nil)
89
+ Vedeu::DSL::Stream.new(self, client)
90
+ end
91
+
80
92
  # An object is equal when its values are the same.
81
93
  #
82
94
  # @param other [Vedeu::Views::Char]
@@ -76,6 +76,18 @@ module Vedeu
76
76
  end
77
77
  alias_method :<<, :add
78
78
 
79
+ # Returns a DSL instance responsible for defining the DSL
80
+ # methods of this model.
81
+ #
82
+ # @param client [Object|NilClass] The client binding represents
83
+ # the client application object that is currently invoking a
84
+ # DSL method. It is required so that we can send messages to
85
+ # the client application object should we need to.
86
+ # @return [Vedeu::DSL::View] The DSL instance for this model.
87
+ def deputy(client = nil)
88
+ Vedeu::DSL::View.new(self, client)
89
+ end
90
+
79
91
  # @return [Vedeu::Views::Lines]
80
92
  def value
81
93
  collection.coerce(@value, self)
@@ -19,7 +19,7 @@ module Vedeu
19
19
  def clear
20
20
  threads = storage.map do |renderer|
21
21
  Vedeu.log(type: :output,
22
- message: "Clearing via #{renderer.class.name}")
22
+ message: "Clearing via #{renderer.class.name}".freeze)
23
23
 
24
24
  Thread.new(renderer) do
25
25
  mutex.synchronize do
@@ -53,7 +53,7 @@ module Vedeu
53
53
  def render(output)
54
54
  threads = storage.map do |renderer|
55
55
  Vedeu.log(type: :output,
56
- message: "Rendering via #{renderer.class.name}")
56
+ message: "Rendering via #{renderer.class.name}".freeze)
57
57
 
58
58
  Thread.new(renderer) do
59
59
  mutex.synchronize do
@@ -59,7 +59,7 @@ module Vedeu
59
59
  out << "#{end_row_tag}\n"
60
60
  end
61
61
 
62
- out
62
+ out.freeze
63
63
  end
64
64
 
65
65
  private
@@ -51,7 +51,7 @@ module Vedeu
51
51
  #
52
52
  # @return [String]
53
53
  def to_s
54
- Array(render).map(&:to_s).join("\n")
54
+ Array(render).map(&:to_s).join("\n".freeze)
55
55
  end
56
56
  alias_method :to_str, :to_s
57
57
 
@@ -87,18 +87,6 @@ module Vedeu
87
87
  klass.send(:extend, ClassMethods)
88
88
  end
89
89
 
90
- # Returns a DSL instance responsible for defining the DSL
91
- # methods of this model.
92
- #
93
- # @param client [Object|NilClass] The client binding represents
94
- # the client application object that is currently invoking a
95
- # DSL method. It is required so that we can send messages to
96
- # the client application object should we need to.
97
- # @return [void] The DSL instance for this model.
98
- def deputy(client = nil)
99
- Object.const_get(dsl_class).new(self, client)
100
- end
101
-
102
90
  # @note If a block is given, store the model, return the model
103
91
  # after yielding.
104
92
  # @todo Perhaps some validation could be added here?
@@ -111,26 +99,6 @@ module Vedeu
111
99
  new_model
112
100
  end
113
101
 
114
- private
115
-
116
- # Returns the DSL class name responsible for this model.
117
- #
118
- # @return [String]
119
- def dsl_class
120
- case demodulize(self.class.name)
121
- when 'Border'.freeze then 'Vedeu::Borders::DSL'.freeze
122
- when 'Buffer'.freeze then 'Vedeu::Buffers::DSL'.freeze
123
- when 'Geometry'.freeze then 'Vedeu::Geometry::DSL'.freeze
124
- when 'Group'.freeze then 'Vedeu::Groups::DSL'.freeze
125
- when 'Interface'.freeze then 'Vedeu::Interfaces::DSL'.freeze
126
- when 'Keymap'.freeze then 'Vedeu::Input::DSL'.freeze
127
- when 'Menu'.freeze then 'Vedeu::Menus::DSL'.freeze
128
- # when 'ModelTestClass' then 'Vedeu::Repositories::ModelTestClass::DSL'
129
- else
130
- 'Vedeu::DSL::'.freeze + demodulize(self.class.name)
131
- end
132
- end
133
-
134
102
  end # Model
135
103
 
136
104
  end # Repositories
@@ -69,7 +69,7 @@ module Vedeu
69
69
  rescue StandardError => uncaught_exception
70
70
  output = if configuration.debug?
71
71
  uncaught_exception.message + "\n" +
72
- uncaught_exception.backtrace.join("\n")
72
+ uncaught_exception.backtrace.join("\n".freeze)
73
73
  else
74
74
  uncaught_exception.message
75
75
  end
@@ -41,7 +41,7 @@ module Vedeu
41
41
  #
42
42
  # @return [String]
43
43
  def wrap
44
- "{{#{encode64}}}"
44
+ "{{#{encode64}}}".freeze
45
45
  end
46
46
 
47
47
  # Encode the compressed, marshalled object or objects into a
@@ -1,6 +1,6 @@
1
1
  module Vedeu
2
2
 
3
3
  # The current version of Vedeu.
4
- VERSION = '0.6.47'.freeze
4
+ VERSION = '0.6.48'.freeze
5
5
 
6
6
  end
@@ -208,6 +208,14 @@ module Vedeu
208
208
  end
209
209
  end
210
210
 
211
+ describe '#deputy' do
212
+ subject { instance.deputy }
213
+
214
+ it 'returns the DSL instance' do
215
+ subject.must_be_instance_of(Vedeu::Borders::DSL)
216
+ end
217
+ end
218
+
211
219
  describe '#width' do
212
220
  let(:geometry) {
213
221
  Vedeu::Geometry::Geometry.new(name: _name, width: 8)
@@ -40,7 +40,7 @@ module Vedeu
40
40
  context 'when the index < 0' do
41
41
  let(:index) { -3 }
42
42
 
43
- it { subject.must_equal('ome text') }
43
+ it { subject.must_equal('Some text') }
44
44
  end
45
45
  end
46
46
 
@@ -67,7 +67,7 @@ module Vedeu
67
67
  context 'when the index < 0' do
68
68
  let(:index) { -3 }
69
69
 
70
- it { subject.must_equal([:helium, :lithium, :beryllium]) }
70
+ it { subject.must_equal([:hydrogen, :helium, :lithium, :beryllium]) }
71
71
  end
72
72
  end
73
73
 
@@ -75,6 +75,14 @@ module Vedeu
75
75
  }
76
76
  end
77
77
 
78
+ describe '#execute' do
79
+ subject { instance.execute }
80
+
81
+ it { subject.must_be_instance_of(String) }
82
+
83
+ it { subject.must_equal("Hydrogen\nHelium\nLithium") }
84
+ end
85
+
78
86
  describe '#delete_character' do
79
87
  subject { instance.delete_character }
80
88
 
@@ -99,20 +107,6 @@ module Vedeu
99
107
  it { subject.must_be_instance_of(Vedeu::Editor::Document) }
100
108
  end
101
109
 
102
- describe '#down' do
103
- subject { instance.down }
104
-
105
- it { subject.must_be_instance_of(Vedeu::Editor::Document) }
106
- end
107
-
108
- describe '#execute' do
109
- subject { instance.execute }
110
-
111
- it { subject.must_be_instance_of(String) }
112
-
113
- it { subject.must_equal("Hydrogen\nHelium\nLithium") }
114
- end
115
-
116
110
  describe '#insert_character' do
117
111
  it { instance.must_respond_to(:insert_character) }
118
112
 
@@ -131,18 +125,6 @@ module Vedeu
131
125
  it { subject.must_be_instance_of(Vedeu::Editor::Document) }
132
126
  end
133
127
 
134
- describe '#left' do
135
- subject { instance.left }
136
-
137
- context 'when moving goes out of bounds' do
138
- it { subject.must_be_instance_of(Vedeu::Editor::Document) }
139
- end
140
-
141
- # context 'when moving does not go out of bounds' do
142
- # it { subject.must_be_instance_of(Vedeu::Editor::Cursor) }
143
- # end
144
- end
145
-
146
128
  describe '#line' do
147
129
  subject { instance.line }
148
130
 
@@ -179,28 +161,28 @@ module Vedeu
179
161
  it { instance.must_respond_to(:refresh) }
180
162
  end
181
163
 
182
- describe '#right' do
183
- subject { instance.right }
164
+ describe '#down' do
165
+ subject { instance.down }
184
166
 
185
- it { subject.must_be_instance_of(Vedeu::Editor::Cursor) }
167
+ it { subject.must_be_instance_of(Vedeu::Editor::Document) }
186
168
  end
187
169
 
188
- describe '#up' do
189
- subject { instance.up }
170
+ describe '#left' do
171
+ subject { instance.left }
190
172
 
191
173
  it { subject.must_be_instance_of(Vedeu::Editor::Document) }
192
174
  end
193
175
 
194
- describe '#bol' do
195
- subject { instance.bol }
176
+ describe '#right' do
177
+ subject { instance.right }
196
178
 
197
- it { subject.must_be_instance_of(Vedeu::Editor::Cursor) }
179
+ it { subject.must_be_instance_of(Vedeu::Editor::Document) }
198
180
  end
199
181
 
200
- describe '#eol' do
201
- subject { instance.eol }
182
+ describe '#up' do
183
+ subject { instance.up }
202
184
 
203
- it { subject.must_be_instance_of(Vedeu::Editor::Cursor) }
185
+ it { subject.must_be_instance_of(Vedeu::Editor::Document) }
204
186
  end
205
187
 
206
188
  end # Editor
@@ -92,6 +92,14 @@ module Vedeu
92
92
  # it { skip }
93
93
  end
94
94
 
95
+ describe '#deputy' do
96
+ subject { instance.deputy }
97
+
98
+ it 'returns the DSL instance' do
99
+ subject.must_be_instance_of(Vedeu::Geometry::DSL)
100
+ end
101
+ end
102
+
95
103
  describe '#eql?' do
96
104
  let(:other) { instance }
97
105
 
@@ -92,6 +92,14 @@ module Vedeu
92
92
  it { subject.must_equal(['a', 'b', 'c']) }
93
93
  end
94
94
 
95
+ describe '#deputy' do
96
+ subject { instance.deputy }
97
+
98
+ it 'returns the DSL instance' do
99
+ subject.must_be_instance_of(Vedeu::Groups::DSL)
100
+ end
101
+ end
102
+
95
103
  describe '#hide' do
96
104
  subject { instance.hide }
97
105
 
@@ -51,6 +51,14 @@ module Vedeu
51
51
  end
52
52
  end
53
53
 
54
+ describe '#deputy' do
55
+ subject { instance.deputy }
56
+
57
+ it 'returns the DSL instance' do
58
+ subject.must_be_instance_of(Vedeu::Input::DSL)
59
+ end
60
+ end
61
+
54
62
  describe '#key_defined?' do
55
63
  let(:input) { 'a' }
56
64
 
@@ -80,6 +80,14 @@ module Vedeu
80
80
  }
81
81
  end
82
82
 
83
+ describe '#deputy' do
84
+ subject { instance.deputy }
85
+
86
+ it 'returns the DSL instance' do
87
+ subject.must_be_instance_of(Vedeu::Interfaces::DSL)
88
+ end
89
+ end
90
+
83
91
  describe '#hide' do
84
92
  before { Vedeu.stubs(:trigger) }
85
93
 
@@ -52,6 +52,14 @@ module Vedeu
52
52
  end
53
53
  end
54
54
 
55
+ describe '#deputy' do
56
+ subject { instance.deputy }
57
+
58
+ it 'returns the DSL instance' do
59
+ subject.must_be_instance_of(Vedeu::Menus::DSL)
60
+ end
61
+ end
62
+
55
63
  describe '#selected' do
56
64
  subject { instance.selected }
57
65
 
@@ -61,6 +61,13 @@ module Vedeu
61
61
  it { subject.must_be_instance_of(Vedeu::Views::ViewCollection) }
62
62
  end
63
63
 
64
+ describe '#deputy' do
65
+ subject { instance.deputy }
66
+
67
+ it 'returns the DSL instance' do
68
+ subject.must_be_instance_of(Vedeu::DSL::Composition)
69
+ end
70
+ end
64
71
 
65
72
  end # Composition
66
73
 
@@ -100,6 +100,14 @@ module Vedeu
100
100
  end
101
101
  end
102
102
 
103
+ describe '#deputy' do
104
+ subject { instance.deputy }
105
+
106
+ it 'returns the DSL instance' do
107
+ subject.must_be_instance_of(Vedeu::DSL::Line)
108
+ end
109
+ end
110
+
103
111
  describe '#eql?' do
104
112
  let(:other) { instance }
105
113
 
@@ -91,6 +91,14 @@ module Vedeu
91
91
  end
92
92
  end
93
93
 
94
+ describe '#deputy' do
95
+ subject { instance.deputy }
96
+
97
+ it 'returns the DSL instance' do
98
+ subject.must_be_instance_of(Vedeu::DSL::Stream)
99
+ end
100
+ end
101
+
94
102
  describe '#eql?' do
95
103
  let(:other) { described.new(attributes) }
96
104
 
@@ -54,6 +54,14 @@ module Vedeu
54
54
  # it { skip }
55
55
  end
56
56
 
57
+ describe '#deputy' do
58
+ subject { instance.deputy }
59
+
60
+ it 'returns the DSL instance' do
61
+ subject.must_be_instance_of(Vedeu::DSL::View)
62
+ end
63
+ end
64
+
57
65
  describe '#value' do
58
66
  subject { instance.value }
59
67
 
@@ -49,14 +49,6 @@ module Vedeu
49
49
  # it { skip }
50
50
  end
51
51
 
52
- describe '#deputy' do
53
- subject { instance.deputy }
54
-
55
- # it 'returns the DSL instance' do
56
- # subject.must_be_instance_of(Vedeu::Repositories::ModelTestClass::DSL)
57
- # end
58
- end
59
-
60
52
  describe '#store' do
61
53
  subject { instance.store }
62
54
 
@@ -47,7 +47,7 @@ end
47
47
  module VedeuMiniTestPlugin
48
48
  # def before_setup
49
49
  # # Vedeu::Repositories.reset!
50
- # # Vedeu.log(type: :debug, message: "#{self.class}")
50
+ # # Vedeu.log(type: :debug, message: "#{self.class}".freeze)
51
51
  #
52
52
  # super
53
53
  # end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vedeu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.47
4
+ version: 0.6.48
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gavin Laking
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-04 00:00:00.000000000 Z
11
+ date: 2015-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: guard