vedeu 0.4.37 → 0.4.38
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/examples/borders_app.rb +3 -0
- data/examples/material_colours_app.rb +1 -1
- data/lib/vedeu/bindings.rb +12 -0
- data/lib/vedeu/cursor/all.rb +1 -0
- data/lib/vedeu/cursor/cursor.rb +8 -8
- data/lib/vedeu/cursor/reposition.rb +95 -0
- data/lib/vedeu/generator/application.rb +18 -16
- data/lib/vedeu/generator/helpers.rb +26 -1
- data/lib/vedeu/generator/templates/application/{application.rb → application.erb} +1 -1
- data/lib/vedeu/generator/templates/application/bin/name +1 -1
- data/lib/vedeu/generator/view.rb +1 -1
- data/lib/vedeu/models/focus.rb +40 -5
- data/lib/vedeu/output/colour.rb +0 -1
- data/lib/vedeu/support/all.rb +0 -1
- data/lib/vedeu/support/log.rb +8 -5
- data/lib/vedeu/support/timer.rb +10 -2
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/bindings_test.rb +2 -0
- data/test/lib/vedeu/bootstrap_test.rb +4 -1
- data/test/lib/vedeu/cursor/cursor_test.rb +16 -0
- data/test/lib/vedeu/cursor/reposition_test.rb +47 -0
- data/test/lib/vedeu/generator/application_test.rb +2 -22
- data/test/lib/vedeu/generator/helpers_test.rb +39 -8
- data/test/lib/vedeu/generator/view_test.rb +2 -2
- data/test/lib/vedeu/models/focus_test.rb +60 -3
- data/test/lib/vedeu/output/colour_test.rb +12 -0
- data/test/lib/vedeu/support/log_test.rb +6 -22
- data/vedeu.gemspec +1 -1
- metadata +8 -8
- data/lib/vedeu/support/colour_coercer.rb +0 -97
- data/test/lib/vedeu/support/colour_coercer_test.rb +0 -85
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eba167b2296986a617d87379d671da43b1fdfde5
|
4
|
+
data.tar.gz: f680e8ca3c7fc1cf653a331b06f6b254069f1549
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 62dfe9eec435c85f18d7b0556ae6d1f0549d4d442144a13dd816c80370b046e03566b0bc2f972a2e6f556832c9e4eb9cb807103f38cb25e77e9a09b4ca0cbbeb
|
7
|
+
data.tar.gz: aa1b63928e5bd9eed88413945780f5ba202a7f211d9abb96c71432d02cebaf8362c0617a69078af61d900a0c82868793531540824106560c6a063f60da02f6f8
|
data/examples/borders_app.rb
CHANGED
@@ -74,7 +74,7 @@ class VedeuMaterialColoursApp
|
|
74
74
|
key('k') { Vedeu.trigger(:_view_up_, 'other_interface') }
|
75
75
|
key('l') { Vedeu.trigger(:_view_right_, 'other_interface') }
|
76
76
|
|
77
|
-
key('t')
|
77
|
+
key('t') do
|
78
78
|
Vedeu.trigger(:_toggle_interface_, 'main_interface')
|
79
79
|
Vedeu.trigger(:_toggle_interface_, 'other_interface')
|
80
80
|
end
|
data/lib/vedeu/bindings.rb
CHANGED
@@ -125,6 +125,18 @@ module Vedeu
|
|
125
125
|
Vedeu::Position.new(cursor.y, cursor.x) if cursor
|
126
126
|
end
|
127
127
|
|
128
|
+
# Move the cursor to a relative position inside the interface.
|
129
|
+
#
|
130
|
+
# @todo
|
131
|
+
# - The content of the interface needs to be a consideration.
|
132
|
+
# - If the screen size changes, what should happen to the cursor.
|
133
|
+
# - How do we represent cursors which are deliberately positioned outside
|
134
|
+
# of the viewable area?
|
135
|
+
#
|
136
|
+
Vedeu.bind(:_cursor_reposition_) do |name, y, x|
|
137
|
+
Vedeu::Reposition.to(Vedeu::Cursor, name, y, x)
|
138
|
+
end
|
139
|
+
|
128
140
|
# @see {Vedeu::Move}
|
129
141
|
Vedeu.bind(:_cursor_reset_) { |name| Vedeu.trigger(:_cursor_origin_, name) }
|
130
142
|
|
data/lib/vedeu/cursor/all.rb
CHANGED
data/lib/vedeu/cursor/cursor.rb
CHANGED
@@ -16,13 +16,13 @@ module Vedeu
|
|
16
16
|
# @return [String]
|
17
17
|
attr_reader :name
|
18
18
|
|
19
|
-
# @!attribute [
|
19
|
+
# @!attribute [rw] ox
|
20
20
|
# @return [Fixnum]
|
21
|
-
|
21
|
+
attr_accessor :ox
|
22
22
|
|
23
|
-
# @!attribute [
|
23
|
+
# @!attribute [rw] oy
|
24
24
|
# @return [Fixnum]
|
25
|
-
|
25
|
+
attr_accessor :oy
|
26
26
|
|
27
27
|
# @!attribute [r] state
|
28
28
|
# @return [Boolean|Symbol]
|
@@ -33,13 +33,13 @@ module Vedeu
|
|
33
33
|
attr_reader :visible
|
34
34
|
alias_method :visible?, :visible
|
35
35
|
|
36
|
-
# @!attribute [
|
36
|
+
# @!attribute [rw] x
|
37
37
|
# @return [Fixnum]
|
38
|
-
|
38
|
+
attr_accessor :x
|
39
39
|
|
40
|
-
# @!attribute [
|
40
|
+
# @!attribute [rw] y
|
41
41
|
# @return [Fixnum]
|
42
|
-
|
42
|
+
attr_accessor :y
|
43
43
|
|
44
44
|
# Returns a new instance of Vedeu::Cursor.
|
45
45
|
#
|
@@ -0,0 +1,95 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
class Reposition
|
5
|
+
|
6
|
+
# @return [Vedeu::Cursor]
|
7
|
+
# @see Vedeu::Reposition.new
|
8
|
+
def self.to(entity, name, y, x)
|
9
|
+
new(entity, name, y, x).to
|
10
|
+
end
|
11
|
+
|
12
|
+
# @param entity []
|
13
|
+
# @param name [String]]
|
14
|
+
# @param y [Fixnum]
|
15
|
+
# @param x [Fixnum]
|
16
|
+
# @return [Vedeu::Reposition]
|
17
|
+
def initialize(entity, name, y, x)
|
18
|
+
@entity = entity
|
19
|
+
@name = name
|
20
|
+
@y = y
|
21
|
+
@x = x
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [Vedeu::Cursor]
|
25
|
+
def to
|
26
|
+
result = @entity.new(name: name,
|
27
|
+
y: y_position,
|
28
|
+
x: x_position,
|
29
|
+
oy: y,
|
30
|
+
ox: x).store
|
31
|
+
|
32
|
+
Vedeu.trigger(:_clear_, name)
|
33
|
+
Vedeu.trigger(:_refresh_, name)
|
34
|
+
Vedeu.trigger(:_refresh_cursor_, name)
|
35
|
+
|
36
|
+
result
|
37
|
+
end
|
38
|
+
|
39
|
+
protected
|
40
|
+
|
41
|
+
# @!attribute [r] entity
|
42
|
+
# @return [String]
|
43
|
+
attr_reader :entity
|
44
|
+
|
45
|
+
# @!attribute [r] name
|
46
|
+
# @return [String]
|
47
|
+
attr_reader :name
|
48
|
+
|
49
|
+
# @!attribute [r] x
|
50
|
+
# @return [Fixnum]
|
51
|
+
attr_reader :x
|
52
|
+
|
53
|
+
# @!attribute [r] y
|
54
|
+
# @return [Fixnum]
|
55
|
+
attr_reader :y
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
# @return [Coordinate]
|
60
|
+
def coordinate
|
61
|
+
@coordinate ||= Vedeu::Coordinate.new(name)
|
62
|
+
end
|
63
|
+
|
64
|
+
# @return [Vedeu::Cursor]
|
65
|
+
def entity
|
66
|
+
@_entity ||= @entity.new
|
67
|
+
end
|
68
|
+
|
69
|
+
# @return [Vedeu::Cursor]
|
70
|
+
def model
|
71
|
+
@model ||= repository.by_name(name)
|
72
|
+
end
|
73
|
+
|
74
|
+
# @return [Vedeu::Cursors]
|
75
|
+
def repository
|
76
|
+
entity.repository
|
77
|
+
end
|
78
|
+
|
79
|
+
# Returns the cursors x position based on the desired x position.
|
80
|
+
#
|
81
|
+
# @return [Fixnum]
|
82
|
+
def x_position
|
83
|
+
coordinate.x_position(x)
|
84
|
+
end
|
85
|
+
|
86
|
+
# Returns the cursors y position based on the desired y position.
|
87
|
+
#
|
88
|
+
# @return [Fixnum]
|
89
|
+
def y_position
|
90
|
+
coordinate.y_position(y)
|
91
|
+
end
|
92
|
+
|
93
|
+
end # Reposition
|
94
|
+
|
95
|
+
end # Vedeu
|
@@ -23,6 +23,7 @@ module Vedeu
|
|
23
23
|
make_directory_structure
|
24
24
|
|
25
25
|
copy_gemfile
|
26
|
+
copy_application_bootstrapper
|
26
27
|
copy_application_controller
|
27
28
|
copy_application_helper
|
28
29
|
copy_global_keymap
|
@@ -37,9 +38,11 @@ module Vedeu
|
|
37
38
|
|
38
39
|
# @return [void]
|
39
40
|
def make_directory_structure
|
40
|
-
directories.each
|
41
|
-
|
42
|
-
|
41
|
+
directories.each { |directory| make_directory(name + directory) }
|
42
|
+
end
|
43
|
+
|
44
|
+
def copy_application_bootstrapper
|
45
|
+
make_file(source + '/application.erb', "#{name}/application.rb")
|
43
46
|
end
|
44
47
|
|
45
48
|
# @return [void]
|
@@ -49,21 +52,20 @@ module Vedeu
|
|
49
52
|
end
|
50
53
|
|
51
54
|
# @return [void]
|
52
|
-
def
|
53
|
-
|
54
|
-
name + '/app/helpers/application_helper.rb')
|
55
|
+
def copy_application_executable
|
56
|
+
copy_file(source + '/bin/name', "#{name}/bin/#{name}")
|
55
57
|
end
|
56
58
|
|
57
59
|
# @return [void]
|
58
|
-
def
|
59
|
-
|
60
|
-
|
60
|
+
def copy_application_helper
|
61
|
+
make_file(source + '/app/helpers/application_helper.erb',
|
62
|
+
name + '/app/helpers/application_helper.rb')
|
61
63
|
end
|
62
64
|
|
63
65
|
# @return [void]
|
64
66
|
def copy_configuration
|
65
|
-
|
66
|
-
|
67
|
+
copy_file(source + '/config/configuration.rb',
|
68
|
+
"#{name}/config/configuration.rb")
|
67
69
|
end
|
68
70
|
|
69
71
|
# @return [void]
|
@@ -74,7 +76,7 @@ module Vedeu
|
|
74
76
|
|
75
77
|
# @return [void]
|
76
78
|
def copy_gemfile
|
77
|
-
|
79
|
+
copy_file(source + '/Gemfile', "#{name}/Gemfile")
|
78
80
|
end
|
79
81
|
|
80
82
|
# @return [void]
|
@@ -84,14 +86,14 @@ module Vedeu
|
|
84
86
|
|
85
87
|
# @return [void]
|
86
88
|
def copy_global_keymap
|
87
|
-
|
88
|
-
|
89
|
+
copy_file(source + '/app/models/keymaps/_global_.rb',
|
90
|
+
"#{name}/app/models/keymaps/_global_.rb")
|
89
91
|
end
|
90
92
|
|
91
93
|
# @return [void]
|
92
94
|
def copy_system_keymap
|
93
|
-
|
94
|
-
|
95
|
+
copy_file(source + '/app/models/keymaps/_system_.rb',
|
96
|
+
"#{name}/app/models/keymaps/_system_.rb")
|
95
97
|
end
|
96
98
|
|
97
99
|
# @return [Array<String>]
|
@@ -20,15 +20,40 @@ module Vedeu
|
|
20
20
|
name
|
21
21
|
end
|
22
22
|
|
23
|
+
# @param destination [String]
|
24
|
+
# @return [void]
|
25
|
+
def make_directory(destination)
|
26
|
+
Vedeu.log_stdout(type: :create, message: "#{destination}")
|
27
|
+
|
28
|
+
FileUtils.mkdir_p(destination)
|
29
|
+
end
|
30
|
+
|
31
|
+
# @param source [String]
|
32
|
+
# @param destination [String]
|
33
|
+
# @return [void]
|
34
|
+
def copy_file(source, destination)
|
35
|
+
Vedeu.log_stdout(type: :create, message: "#{destination}")
|
36
|
+
|
37
|
+
FileUtils.cp(source, destination)
|
38
|
+
end
|
39
|
+
|
23
40
|
# @param source [String]
|
24
41
|
# @param destination [String]
|
25
42
|
# @return [void]
|
26
43
|
def make_file(source, destination)
|
27
|
-
Vedeu.log_stdout(type: :create, message: "
|
44
|
+
Vedeu.log_stdout(type: :create, message: "#{destination}")
|
28
45
|
|
29
46
|
File.write(destination, parse(source))
|
30
47
|
end
|
31
48
|
|
49
|
+
# @param destination [String]
|
50
|
+
# @return [void]
|
51
|
+
def touch_file(destination)
|
52
|
+
Vedeu.log_stdout(type: :create, message: "#{destination}")
|
53
|
+
|
54
|
+
FileUtils.touch(destination)
|
55
|
+
end
|
56
|
+
|
32
57
|
# @return [String]
|
33
58
|
def name
|
34
59
|
@_name ||= @name.downcase
|
data/lib/vedeu/generator/view.rb
CHANGED
data/lib/vedeu/models/focus.rb
CHANGED
@@ -95,8 +95,23 @@ module Vedeu
|
|
95
95
|
|
96
96
|
update
|
97
97
|
end
|
98
|
-
alias_method :next,
|
99
|
-
|
98
|
+
alias_method :next, :next_item
|
99
|
+
|
100
|
+
# Put the next visible interface relative to the current interfaces in
|
101
|
+
# focus.
|
102
|
+
#
|
103
|
+
# @return [String]
|
104
|
+
def next_visible_item
|
105
|
+
return update unless visible_items?
|
106
|
+
|
107
|
+
loop do
|
108
|
+
storage.rotate!
|
109
|
+
break if Vedeu.interfaces.by_name(current).visible?
|
110
|
+
end
|
111
|
+
|
112
|
+
update
|
113
|
+
end
|
114
|
+
alias_method :focus_next, :next_visible_item
|
100
115
|
|
101
116
|
# Put the previous interface relative to the current interface in focus.
|
102
117
|
#
|
@@ -109,9 +124,24 @@ module Vedeu
|
|
109
124
|
|
110
125
|
update
|
111
126
|
end
|
112
|
-
alias_method :prev,
|
113
|
-
alias_method :previous,
|
114
|
-
|
127
|
+
alias_method :prev, :prev_item
|
128
|
+
alias_method :previous, :prev_item
|
129
|
+
|
130
|
+
# Put the previous visible interface relative to the current interfaces in
|
131
|
+
# focus.
|
132
|
+
#
|
133
|
+
# @return [String]
|
134
|
+
def prev_visible_item
|
135
|
+
return update unless visible_items?
|
136
|
+
|
137
|
+
loop do
|
138
|
+
storage.rotate!(-1)
|
139
|
+
break if Vedeu.interfaces.by_name(current).visible?
|
140
|
+
end
|
141
|
+
|
142
|
+
update
|
143
|
+
end
|
144
|
+
alias_method :focus_previous, :prev_visible_item
|
115
145
|
|
116
146
|
# Refresh the interface in focus.
|
117
147
|
#
|
@@ -176,6 +206,11 @@ module Vedeu
|
|
176
206
|
[]
|
177
207
|
end
|
178
208
|
|
209
|
+
# @return [Boolean]
|
210
|
+
def visible_items?
|
211
|
+
storage.any? { |name| Vedeu.interfaces.by_name(name).visible? }
|
212
|
+
end
|
213
|
+
|
179
214
|
end # Focus
|
180
215
|
|
181
216
|
end # Vedeu
|
data/lib/vedeu/output/colour.rb
CHANGED
data/lib/vedeu/support/all.rb
CHANGED
data/lib/vedeu/support/log.rb
CHANGED
@@ -97,8 +97,11 @@ module Vedeu
|
|
97
97
|
#
|
98
98
|
# @return [TrueClass]
|
99
99
|
def log(message:, force: false, type: :info)
|
100
|
-
|
101
|
-
|
100
|
+
output = [message_type(type), message_body(type, message)]
|
101
|
+
|
102
|
+
logger.debug(output) if enabled? || force
|
103
|
+
|
104
|
+
output
|
102
105
|
end
|
103
106
|
|
104
107
|
# @return [TrueClass]
|
@@ -111,6 +114,8 @@ module Vedeu
|
|
111
114
|
$stderr.puts [message_type(type), message_body(type, message)].join
|
112
115
|
end
|
113
116
|
|
117
|
+
private
|
118
|
+
|
114
119
|
# @return [TrueClass]
|
115
120
|
def logger
|
116
121
|
MonoLogger.new(log_file).tap do |log|
|
@@ -120,8 +125,6 @@ module Vedeu
|
|
120
125
|
end
|
121
126
|
end
|
122
127
|
|
123
|
-
private
|
124
|
-
|
125
128
|
# @param message [String]
|
126
129
|
# @return [String]
|
127
130
|
def formatted_message(message)
|
@@ -183,7 +186,7 @@ module Vedeu
|
|
183
186
|
@last = @now
|
184
187
|
end
|
185
188
|
|
186
|
-
"[#{format(
|
189
|
+
"[#{format('%7.4f', @time.to_s)}] ".rjust(7)
|
187
190
|
end
|
188
191
|
|
189
192
|
end # Log eigenclass
|
data/lib/vedeu/support/timer.rb
CHANGED
@@ -28,12 +28,13 @@ module Vedeu
|
|
28
28
|
@started = Time.now.to_f
|
29
29
|
end
|
30
30
|
|
31
|
+
# Write an entry to the log file stating how long a section of code took in
|
32
|
+
# milliseconds. Useful for debugging performance.
|
33
|
+
#
|
31
34
|
# @return [void]
|
32
35
|
def measure
|
33
36
|
work = yield
|
34
37
|
|
35
|
-
elapsed = ((Time.now.to_f - started) * 1000).round(3)
|
36
|
-
|
37
38
|
Vedeu.log(type: :timer, message: "#{message} took #{elapsed}ms.")
|
38
39
|
|
39
40
|
work
|
@@ -49,6 +50,13 @@ module Vedeu
|
|
49
50
|
# @return [String]
|
50
51
|
attr_reader :message
|
51
52
|
|
53
|
+
# Returns the elapsed time in milliseconds with 3 decimal places.
|
54
|
+
#
|
55
|
+
# @return [Float]
|
56
|
+
def elapsed
|
57
|
+
((Time.now.to_f - started) * 1000).round(3)
|
58
|
+
end
|
59
|
+
|
52
60
|
end # Timer
|
53
61
|
|
54
62
|
end # Vedeu
|
data/lib/vedeu/version.rb
CHANGED
@@ -30,6 +30,8 @@ module Vedeu
|
|
30
30
|
it { Vedeu.events.registered?(:_cursor_right_).must_equal(true) }
|
31
31
|
it { Vedeu.events.registered?(:_cursor_up_).must_equal(true) }
|
32
32
|
it { Vedeu.events.registered?(:_cursor_origin_).must_equal(true) }
|
33
|
+
it { Vedeu.events.registered?(:_cursor_position_).must_equal(true) }
|
34
|
+
it { Vedeu.events.registered?(:_cursor_reposition_).must_equal(true) }
|
33
35
|
it { Vedeu.events.registered?(:_cursor_reset_).must_equal(true) }
|
34
36
|
end
|
35
37
|
|
@@ -51,10 +51,18 @@ module Vedeu
|
|
51
51
|
it { instance.must_respond_to(:ox) }
|
52
52
|
end
|
53
53
|
|
54
|
+
describe '#ox=' do
|
55
|
+
it { instance.must_respond_to(:ox=) }
|
56
|
+
end
|
57
|
+
|
54
58
|
describe '#oy' do
|
55
59
|
it { instance.must_respond_to(:oy) }
|
56
60
|
end
|
57
61
|
|
62
|
+
describe '#oy=' do
|
63
|
+
it { instance.must_respond_to(:oy=) }
|
64
|
+
end
|
65
|
+
|
58
66
|
describe '#state' do
|
59
67
|
it { instance.must_respond_to(:state) }
|
60
68
|
end
|
@@ -68,10 +76,18 @@ module Vedeu
|
|
68
76
|
it { instance.must_respond_to(:x) }
|
69
77
|
end
|
70
78
|
|
79
|
+
describe '#x=' do
|
80
|
+
it { instance.must_respond_to(:x=) }
|
81
|
+
end
|
82
|
+
|
71
83
|
describe '#y' do
|
72
84
|
it { instance.must_respond_to(:y) }
|
73
85
|
end
|
74
86
|
|
87
|
+
describe '#y=' do
|
88
|
+
it { instance.must_respond_to(:y=) }
|
89
|
+
end
|
90
|
+
|
75
91
|
describe '#hide_cursor' do
|
76
92
|
subject { instance.hide_cursor }
|
77
93
|
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Vedeu
|
4
|
+
|
5
|
+
describe Reposition do
|
6
|
+
|
7
|
+
let(:described) { Vedeu::Reposition }
|
8
|
+
let(:instance) { described.new(entity, _name, y, x) }
|
9
|
+
let(:entity) { Vedeu::Cursor }
|
10
|
+
let(:_name) { 'reposition' }
|
11
|
+
let(:x) { 4 }
|
12
|
+
let(:y) { 7 }
|
13
|
+
|
14
|
+
before do
|
15
|
+
Vedeu::Cursor.new(name: _name, x: 1, y: 1, ox: 1, oy: 1)
|
16
|
+
Vedeu.stubs(:trigger)
|
17
|
+
end
|
18
|
+
|
19
|
+
after { Vedeu.cursors.reset }
|
20
|
+
|
21
|
+
describe '#initialize' do
|
22
|
+
subject { instance }
|
23
|
+
|
24
|
+
it { instance.must_be_instance_of(Vedeu::Reposition) }
|
25
|
+
it { instance.instance_variable_get('@entity').must_equal(entity) }
|
26
|
+
it { instance.instance_variable_get('@name').must_equal(_name) }
|
27
|
+
it { instance.instance_variable_get('@x').must_equal(x) }
|
28
|
+
it { instance.instance_variable_get('@y').must_equal(y) }
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '.to' do
|
32
|
+
it { described.must_respond_to(:to) }
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#to' do
|
36
|
+
subject { instance.to }
|
37
|
+
|
38
|
+
it { subject.must_be_instance_of(entity) }
|
39
|
+
it { subject.x.must_equal(5) }
|
40
|
+
it { subject.y.must_equal(8) }
|
41
|
+
it { subject.ox.must_equal(4) }
|
42
|
+
it { subject.oy.must_equal(7) }
|
43
|
+
end
|
44
|
+
|
45
|
+
end # Reposition
|
46
|
+
|
47
|
+
end # Vedeu
|
@@ -21,31 +21,11 @@ module Vedeu
|
|
21
21
|
end
|
22
22
|
|
23
23
|
describe '.generate' do
|
24
|
-
|
24
|
+
it { described.must_respond_to(:generate) }
|
25
25
|
end
|
26
26
|
|
27
27
|
describe '#generate' do
|
28
|
-
|
29
|
-
end
|
30
|
-
|
31
|
-
describe '#name_as_class' do
|
32
|
-
subject { instance.name_as_class }
|
33
|
-
|
34
|
-
context 'when the name is a single value' do
|
35
|
-
let(:_name) { 'VEDEU' }
|
36
|
-
|
37
|
-
it { subject.must_equal('Vedeu') }
|
38
|
-
end
|
39
|
-
|
40
|
-
context 'when the name is an underscored value' do
|
41
|
-
it { subject.must_equal('MyFirstApp') }
|
42
|
-
end
|
43
|
-
|
44
|
-
context 'when the name contains hyphens' do
|
45
|
-
let(:_name) { 'hyphenated-APP' }
|
46
|
-
|
47
|
-
it { subject.must_equal('HyphenatedApp')}
|
48
|
-
end
|
28
|
+
subject { instance.generate }
|
49
29
|
end
|
50
30
|
|
51
31
|
end # Application
|
@@ -20,11 +20,11 @@ module Vedeu
|
|
20
20
|
let(:instance) { Vedeu::Generator::HelpersTestClass.new(_name) }
|
21
21
|
let(:_name) { 'my_first_app' }
|
22
22
|
|
23
|
-
|
24
|
-
|
23
|
+
describe '#app_name' do
|
24
|
+
subject { instance.app_name }
|
25
25
|
|
26
|
-
|
27
|
-
|
26
|
+
# it { subject.must_equal('MyFirstApp') }
|
27
|
+
end
|
28
28
|
|
29
29
|
describe '#app_name_as_snake_case' do
|
30
30
|
let(:_name) { 'MyFirstApp' }
|
@@ -34,6 +34,19 @@ module Vedeu
|
|
34
34
|
it { subject.must_equal('my_first_app') }
|
35
35
|
end
|
36
36
|
|
37
|
+
describe '#make_directory' do
|
38
|
+
let(:destination) {}
|
39
|
+
|
40
|
+
subject { instance.make_directory(destination) }
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '#copy_file' do
|
44
|
+
let(:source) {}
|
45
|
+
let(:destination) {}
|
46
|
+
|
47
|
+
subject { instance.copy_file(source, destination) }
|
48
|
+
end
|
49
|
+
|
37
50
|
describe '#make_file' do
|
38
51
|
let(:source) {}
|
39
52
|
let(:destination) {}
|
@@ -41,6 +54,12 @@ module Vedeu
|
|
41
54
|
subject { instance.make_file(source, destination) }
|
42
55
|
end
|
43
56
|
|
57
|
+
describe '#touch_file' do
|
58
|
+
let(:destination) {}
|
59
|
+
|
60
|
+
subject { instance.touch_file(destination) }
|
61
|
+
end
|
62
|
+
|
44
63
|
describe '#name' do
|
45
64
|
let(:_name) { 'My_First_APP' }
|
46
65
|
|
@@ -54,15 +73,27 @@ module Vedeu
|
|
54
73
|
describe '#name_as_class' do
|
55
74
|
subject { instance.name_as_class }
|
56
75
|
|
57
|
-
|
76
|
+
context 'when the name is a single value' do
|
77
|
+
let(:_name) { 'VEDEU' }
|
78
|
+
|
79
|
+
it { subject.must_equal('Vedeu') }
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'when the name is an underscored value' do
|
83
|
+
it { subject.must_equal('MyFirstApp') }
|
84
|
+
end
|
85
|
+
|
86
|
+
context 'when the name contains hyphens' do
|
87
|
+
let(:_name) { 'hyphenated-APP' }
|
58
88
|
|
59
|
-
|
89
|
+
it { subject.must_equal('HyphenatedApp')}
|
90
|
+
end
|
60
91
|
end
|
61
92
|
|
62
|
-
describe '#
|
93
|
+
describe '#parse' do
|
63
94
|
let(:source) {}
|
64
95
|
|
65
|
-
subject { instance.
|
96
|
+
subject { instance.parse(source) }
|
66
97
|
end
|
67
98
|
|
68
99
|
describe '#source' do
|
@@ -21,11 +21,11 @@ module Vedeu
|
|
21
21
|
end
|
22
22
|
|
23
23
|
describe '.generate' do
|
24
|
-
|
24
|
+
it { described.must_respond_to(:generate) }
|
25
25
|
end
|
26
26
|
|
27
27
|
describe '#generate' do
|
28
|
-
|
28
|
+
subject { instance.generate }
|
29
29
|
end
|
30
30
|
|
31
31
|
end # View
|
@@ -9,9 +9,6 @@ module Vedeu
|
|
9
9
|
before do
|
10
10
|
Focus.reset
|
11
11
|
Vedeu.interfaces.reset
|
12
|
-
Vedeu.interface('thallium') {}
|
13
|
-
Vedeu.interface('lead') {}
|
14
|
-
Vedeu.interface('bismuth') {}
|
15
12
|
end
|
16
13
|
after do
|
17
14
|
Vedeu::Focus.reset
|
@@ -163,6 +160,36 @@ module Vedeu
|
|
163
160
|
end
|
164
161
|
end
|
165
162
|
|
163
|
+
describe '#next_visible_item' do
|
164
|
+
before do
|
165
|
+
Vedeu.interface('gold') { visible true }
|
166
|
+
Vedeu.interface('silver') { visible true }
|
167
|
+
Vedeu.interface('platinum') { visible false }
|
168
|
+
end
|
169
|
+
|
170
|
+
it 'the next visible interface is focussed when the method is called' do
|
171
|
+
Focus.next_visible_item.must_equal('silver')
|
172
|
+
end
|
173
|
+
|
174
|
+
context 'when there are no visible interfaces' do
|
175
|
+
before do
|
176
|
+
Vedeu.interface('gold') { visible false }
|
177
|
+
Vedeu.interface('silver') { visible false }
|
178
|
+
Vedeu.interface('platinum') { visible false }
|
179
|
+
end
|
180
|
+
|
181
|
+
it 'puts the first interface defined in focus' do
|
182
|
+
Focus.next_visible_item.must_equal('gold')
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
context 'when there are no interfaces' do
|
187
|
+
before { Vedeu::Focus.reset }
|
188
|
+
|
189
|
+
it { Focus.next_visible_item.must_equal(false) }
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
166
193
|
describe '#prev_item' do
|
167
194
|
it 'the previous interface is focussed when the method is called' do
|
168
195
|
Focus.add('thallium')
|
@@ -178,6 +205,36 @@ module Vedeu
|
|
178
205
|
end
|
179
206
|
end
|
180
207
|
|
208
|
+
describe '#prev_visible_item' do
|
209
|
+
before do
|
210
|
+
Vedeu.interface('gold') { visible true }
|
211
|
+
Vedeu.interface('silver') { visible true }
|
212
|
+
Vedeu.interface('platinum') { visible false }
|
213
|
+
end
|
214
|
+
|
215
|
+
it 'the previous visible interface is focussed when the method is called' do
|
216
|
+
Focus.prev_visible_item.must_equal('silver')
|
217
|
+
end
|
218
|
+
|
219
|
+
context 'when there are no visible interfaces' do
|
220
|
+
before do
|
221
|
+
Vedeu.interface('gold') { visible false }
|
222
|
+
Vedeu.interface('silver') { visible false }
|
223
|
+
Vedeu.interface('platinum') { visible false }
|
224
|
+
end
|
225
|
+
|
226
|
+
it 'puts the first interface defined in focus' do
|
227
|
+
Focus.prev_visible_item.must_equal('gold')
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
context 'when there are no interfaces' do
|
232
|
+
before { Vedeu::Focus.reset }
|
233
|
+
|
234
|
+
it { Focus.prev_visible_item.must_equal(false) }
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
181
238
|
describe '#refresh' do
|
182
239
|
before do
|
183
240
|
Focus.add('thallium')
|
@@ -43,6 +43,7 @@ module Vedeu
|
|
43
43
|
|
44
44
|
it { subject.must_be_instance_of(described) }
|
45
45
|
it { subject.attributes.must_equal(attributes) }
|
46
|
+
it { subject.to_s.must_equal("\e[38;2;34;0;34m\e[48;2;255;0;255m") }
|
46
47
|
end
|
47
48
|
|
48
49
|
context 'when the value is a Hash' do
|
@@ -62,6 +63,7 @@ module Vedeu
|
|
62
63
|
|
63
64
|
it { subject.must_be_instance_of(described) }
|
64
65
|
it { subject.attributes.must_equal(attributes) }
|
66
|
+
it { subject.to_s.must_equal("\e[38;2;0;255;0m\e[48;2;0;34;0m") }
|
65
67
|
end
|
66
68
|
|
67
69
|
context 'when the value of :colour is a Hash' do
|
@@ -79,6 +81,9 @@ module Vedeu
|
|
79
81
|
background: '#7700ff',
|
80
82
|
foreground: '',
|
81
83
|
}) }
|
84
|
+
it {
|
85
|
+
subject.to_s.must_equal("\e[48;2;119;0;255m")
|
86
|
+
}
|
82
87
|
end
|
83
88
|
|
84
89
|
context 'and a :foreground is defined' do
|
@@ -95,6 +100,9 @@ module Vedeu
|
|
95
100
|
background: '',
|
96
101
|
foreground: '#220077',
|
97
102
|
}) }
|
103
|
+
it {
|
104
|
+
subject.to_s.must_equal("\e[38;2;34;0;119m")
|
105
|
+
}
|
98
106
|
end
|
99
107
|
|
100
108
|
context 'and neither a :background or :foreground is defined' do
|
@@ -109,6 +117,7 @@ module Vedeu
|
|
109
117
|
background: '',
|
110
118
|
foreground: '',
|
111
119
|
}) }
|
120
|
+
it { subject.to_s.must_equal('') }
|
112
121
|
end
|
113
122
|
end
|
114
123
|
end
|
@@ -126,6 +135,7 @@ module Vedeu
|
|
126
135
|
background: '#000022',
|
127
136
|
foreground: '',
|
128
137
|
}) }
|
138
|
+
it { subject.to_s.must_equal("\e[48;2;0;0;34m") }
|
129
139
|
end
|
130
140
|
|
131
141
|
context 'when the hash has a :foreground defined' do
|
@@ -140,6 +150,7 @@ module Vedeu
|
|
140
150
|
background: '',
|
141
151
|
foreground: '#aadd00',
|
142
152
|
}) }
|
153
|
+
it { subject.to_s.must_equal("\e[38;2;170;221;0m") }
|
143
154
|
end
|
144
155
|
|
145
156
|
context 'when neither a :background or :foreground is defined' do
|
@@ -154,6 +165,7 @@ module Vedeu
|
|
154
165
|
background: '',
|
155
166
|
foreground: '',
|
156
167
|
}) }
|
168
|
+
it { subject.to_s.must_equal('') }
|
157
169
|
end
|
158
170
|
end
|
159
171
|
end
|
@@ -5,26 +5,16 @@ module Vedeu
|
|
5
5
|
describe Log do
|
6
6
|
|
7
7
|
let(:described) { Vedeu::Log }
|
8
|
-
let(:_message)
|
9
|
-
let(:force)
|
10
|
-
let(:type)
|
8
|
+
let(:_message) { 'Some message...' }
|
9
|
+
let(:force) { false }
|
10
|
+
let(:type) { :info }
|
11
11
|
|
12
12
|
describe '.log' do
|
13
13
|
subject { described.log(message: _message, force: force, type: type) }
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
context 'when logging has not been forced' do
|
20
|
-
context 'when the configuration requests logging' do
|
21
|
-
# it { skip }
|
22
|
-
end
|
23
|
-
|
24
|
-
context 'when the configuration does not request logging' do
|
25
|
-
# it { skip }
|
26
|
-
end
|
27
|
-
end
|
15
|
+
it { subject.must_equal(
|
16
|
+
["\e[97m[info] \e[39m", "\e[39mSome message...\e[39m"]
|
17
|
+
) }
|
28
18
|
end
|
29
19
|
|
30
20
|
describe '.log_stdout' do
|
@@ -53,12 +43,6 @@ module Vedeu
|
|
53
43
|
}
|
54
44
|
end
|
55
45
|
|
56
|
-
describe '.logger' do
|
57
|
-
subject { described.logger }
|
58
|
-
|
59
|
-
# it { skip }
|
60
|
-
end
|
61
|
-
|
62
46
|
end # Log
|
63
47
|
|
64
48
|
end # Vedeu
|
data/vedeu.gemspec
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
|
23
23
|
spec.add_development_dependency 'aruba', '0.6.2'
|
24
24
|
spec.add_development_dependency 'cucumber', '2.0.0'
|
25
|
-
spec.add_development_dependency 'guard', '2.12.
|
25
|
+
spec.add_development_dependency 'guard', '2.12.7'
|
26
26
|
spec.add_development_dependency 'guard-bundler', '2.1.0'
|
27
27
|
spec.add_development_dependency 'guard-minitest', '2.4.4'
|
28
28
|
spec.add_development_dependency 'inch', '0.6.3'
|
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.4.
|
4
|
+
version: 0.4.38
|
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-06-
|
11
|
+
date: 2015-06-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aruba
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 2.12.
|
47
|
+
version: 2.12.7
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 2.12.
|
54
|
+
version: 2.12.7
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: guard-bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -340,6 +340,7 @@ files:
|
|
340
340
|
- lib/vedeu/cursor/cursor.rb
|
341
341
|
- lib/vedeu/cursor/move.rb
|
342
342
|
- lib/vedeu/cursor/refresh_cursor.rb
|
343
|
+
- lib/vedeu/cursor/reposition.rb
|
343
344
|
- lib/vedeu/debug.rb
|
344
345
|
- lib/vedeu/distributed/all.rb
|
345
346
|
- lib/vedeu/distributed/client.rb
|
@@ -386,7 +387,7 @@ files:
|
|
386
387
|
- lib/vedeu/generator/templates/application/app/views/interfaces/name.erb
|
387
388
|
- lib/vedeu/generator/templates/application/app/views/name.erb
|
388
389
|
- lib/vedeu/generator/templates/application/app/views/templates/name.erb
|
389
|
-
- lib/vedeu/generator/templates/application/application.
|
390
|
+
- lib/vedeu/generator/templates/application/application.erb
|
390
391
|
- lib/vedeu/generator/templates/application/bin/name
|
391
392
|
- lib/vedeu/generator/templates/application/config/app_name.erb
|
392
393
|
- lib/vedeu/generator/templates/application/config/configuration.rb
|
@@ -484,7 +485,6 @@ files:
|
|
484
485
|
- lib/vedeu/storage/fifo_store.rb
|
485
486
|
- lib/vedeu/storage/store.rb
|
486
487
|
- lib/vedeu/support/all.rb
|
487
|
-
- lib/vedeu/support/colour_coercer.rb
|
488
488
|
- lib/vedeu/support/common.rb
|
489
489
|
- lib/vedeu/support/log.rb
|
490
490
|
- lib/vedeu/support/options.rb
|
@@ -515,6 +515,7 @@ files:
|
|
515
515
|
- test/lib/vedeu/cursor/cursor_test.rb
|
516
516
|
- test/lib/vedeu/cursor/move_test.rb
|
517
517
|
- test/lib/vedeu/cursor/refresh_cursor_test.rb
|
518
|
+
- test/lib/vedeu/cursor/reposition_test.rb
|
518
519
|
- test/lib/vedeu/distributed/client_test.rb
|
519
520
|
- test/lib/vedeu/distributed/server_test.rb
|
520
521
|
- test/lib/vedeu/distributed/subprocess_test.rb
|
@@ -617,7 +618,6 @@ files:
|
|
617
618
|
- test/lib/vedeu/storage/conveyor_store_test.rb
|
618
619
|
- test/lib/vedeu/storage/fifo_store_test.rb
|
619
620
|
- test/lib/vedeu/storage/store_test.rb
|
620
|
-
- test/lib/vedeu/support/colour_coercer_test.rb
|
621
621
|
- test/lib/vedeu/support/common_test.rb
|
622
622
|
- test/lib/vedeu/support/log_test.rb
|
623
623
|
- test/lib/vedeu/support/options_test.rb
|
@@ -679,6 +679,7 @@ test_files:
|
|
679
679
|
- test/lib/vedeu/cursor/cursor_test.rb
|
680
680
|
- test/lib/vedeu/cursor/move_test.rb
|
681
681
|
- test/lib/vedeu/cursor/refresh_cursor_test.rb
|
682
|
+
- test/lib/vedeu/cursor/reposition_test.rb
|
682
683
|
- test/lib/vedeu/distributed/client_test.rb
|
683
684
|
- test/lib/vedeu/distributed/server_test.rb
|
684
685
|
- test/lib/vedeu/distributed/subprocess_test.rb
|
@@ -781,7 +782,6 @@ test_files:
|
|
781
782
|
- test/lib/vedeu/storage/conveyor_store_test.rb
|
782
783
|
- test/lib/vedeu/storage/fifo_store_test.rb
|
783
784
|
- test/lib/vedeu/storage/store_test.rb
|
784
|
-
- test/lib/vedeu/support/colour_coercer_test.rb
|
785
785
|
- test/lib/vedeu/support/common_test.rb
|
786
786
|
- test/lib/vedeu/support/log_test.rb
|
787
787
|
- test/lib/vedeu/support/options_test.rb
|
@@ -1,97 +0,0 @@
|
|
1
|
-
module Vedeu
|
2
|
-
|
3
|
-
class ColourCoercer
|
4
|
-
|
5
|
-
# @param value [Vedeu::Colour|Hash<Symbol => Fixnum|String|Symbol>]
|
6
|
-
# @return [Vedeu::Colour]
|
7
|
-
def self.coerce(value)
|
8
|
-
new(value).coerce
|
9
|
-
end
|
10
|
-
|
11
|
-
# @param value [Hash<Symbol => Fixnum|String|Symbol>]
|
12
|
-
def self.from_hash(value)
|
13
|
-
new(value).from_hash
|
14
|
-
end
|
15
|
-
|
16
|
-
# @param value [Vedeu::Colour|Hash<Symbol => Fixnum|String|Symbol]
|
17
|
-
# @return [Vedeu::ColourCoercer]
|
18
|
-
def initialize(value)
|
19
|
-
@value = value
|
20
|
-
end
|
21
|
-
|
22
|
-
# @return [Vedeu::Colour]
|
23
|
-
def coerce
|
24
|
-
return value if colour?
|
25
|
-
|
26
|
-
if hash?
|
27
|
-
Vedeu::ColourCoercer.from_hash(value)
|
28
|
-
|
29
|
-
else
|
30
|
-
build
|
31
|
-
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
# @return [Vedeu::Colour]
|
36
|
-
def from_hash
|
37
|
-
return build unless value
|
38
|
-
|
39
|
-
if colour_key?
|
40
|
-
Vedeu::ColourCoercer.coerce(value[:colour])
|
41
|
-
|
42
|
-
elsif background? || foreground?
|
43
|
-
build_from_hash(value)
|
44
|
-
|
45
|
-
else
|
46
|
-
build
|
47
|
-
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
protected
|
52
|
-
|
53
|
-
# @!attribute [r] colour
|
54
|
-
# @return [void]
|
55
|
-
attr_reader :value
|
56
|
-
|
57
|
-
private
|
58
|
-
|
59
|
-
# @return [Vedeu::Colour]
|
60
|
-
def build
|
61
|
-
Vedeu::Colour.new
|
62
|
-
end
|
63
|
-
|
64
|
-
# @param value [Hash<Symbol => Fixnum|String|Symbol>]
|
65
|
-
# @return [Vedeu::Colour]
|
66
|
-
def build_from_hash(value)
|
67
|
-
Vedeu::Colour.new(value)
|
68
|
-
end
|
69
|
-
|
70
|
-
# @return [Boolean]
|
71
|
-
def colour?
|
72
|
-
value.is_a?(Vedeu::Colour)
|
73
|
-
end
|
74
|
-
|
75
|
-
# @return [Boolean]
|
76
|
-
def hash?
|
77
|
-
value.is_a?(Hash)
|
78
|
-
end
|
79
|
-
|
80
|
-
# @return [Boolean]
|
81
|
-
def background?
|
82
|
-
value.key?(:background)
|
83
|
-
end
|
84
|
-
|
85
|
-
# @return [Boolean]
|
86
|
-
def colour_key?
|
87
|
-
value.key?(:colour)
|
88
|
-
end
|
89
|
-
|
90
|
-
# @return [Boolean]
|
91
|
-
def foreground?
|
92
|
-
value.key?(:foreground)
|
93
|
-
end
|
94
|
-
|
95
|
-
end # ColourCoercer
|
96
|
-
|
97
|
-
end # Vedeu
|
@@ -1,85 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module Vedeu
|
4
|
-
|
5
|
-
describe ColourCoercer do
|
6
|
-
|
7
|
-
let(:described) { Vedeu::ColourCoercer }
|
8
|
-
let(:instance) { described.new(_value) }
|
9
|
-
let(:_value) { }
|
10
|
-
|
11
|
-
describe '#initialize' do
|
12
|
-
subject { instance }
|
13
|
-
end
|
14
|
-
|
15
|
-
describe '.coerce' do
|
16
|
-
it { described.must_respond_to(:coerce) }
|
17
|
-
end
|
18
|
-
|
19
|
-
describe '.from_hash' do
|
20
|
-
it { described.must_respond_to(:from_hash) }
|
21
|
-
end
|
22
|
-
|
23
|
-
describe '#coerce' do
|
24
|
-
subject { instance.coerce }
|
25
|
-
|
26
|
-
context 'when no value is given' do
|
27
|
-
it { subject.must_be_instance_of(Vedeu::Colour) }
|
28
|
-
end
|
29
|
-
|
30
|
-
context 'when a value is given' do
|
31
|
-
context 'when the value is a Vedeu::Colour' do
|
32
|
-
let(:_value) { Vedeu::Colour.new }
|
33
|
-
|
34
|
-
it { subject.must_equal(_value) }
|
35
|
-
end
|
36
|
-
|
37
|
-
context 'when the value is a Hash' do
|
38
|
-
let(:_value) { { } }
|
39
|
-
|
40
|
-
it {
|
41
|
-
Vedeu::ColourCoercer.expects(:from_hash).with(_value)
|
42
|
-
subject
|
43
|
-
}
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe '#from_hash' do
|
49
|
-
subject { instance.from_hash }
|
50
|
-
|
51
|
-
context 'when no value is given' do
|
52
|
-
it { subject.must_be_instance_of(Vedeu::Colour) }
|
53
|
-
end
|
54
|
-
|
55
|
-
context 'when a value is given' do
|
56
|
-
context 'when the value has a :colour key' do
|
57
|
-
let(:_value) { { colour: colour_value } }
|
58
|
-
let(:colour_value) { Vedeu::Colour.new }
|
59
|
-
|
60
|
-
it {
|
61
|
-
Vedeu::ColourCoercer.expects(:coerce).with(colour_value)
|
62
|
-
subject
|
63
|
-
}
|
64
|
-
end
|
65
|
-
|
66
|
-
context 'when the value has a :background or :foreground key' do
|
67
|
-
let(:_value) { { background: '#000000', foreground: '#ffffff' } }
|
68
|
-
|
69
|
-
it {
|
70
|
-
Vedeu::Colour.expects(:new).with(_value)
|
71
|
-
subject
|
72
|
-
}
|
73
|
-
end
|
74
|
-
|
75
|
-
context 'when the value is empty or has unhandled keys' do
|
76
|
-
let(:_value) { { unhandled: :some_value } }
|
77
|
-
|
78
|
-
it { subject.must_be_instance_of(Vedeu::Colour) }
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
end # ColourCoercer
|
84
|
-
|
85
|
-
end # Vedeu
|