vedeu 0.5.8 → 0.5.9

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.
@@ -0,0 +1,104 @@
1
+ module Vedeu
2
+
3
+ # Provides escape sequence strings.
4
+ #
5
+ module EscapeSequences
6
+
7
+ # Provides colour related escape sequences.
8
+ #
9
+ module Colours
10
+
11
+ extend self
12
+
13
+ # Produces the background named colour escape sequence hash from the
14
+ # foreground escape sequence hash.
15
+ #
16
+ # @return [Hash<Symbol => Fixnum>]
17
+ def background_codes
18
+ hash = {}
19
+ foreground_codes.inject(hash) do |h, (k, v)|
20
+ h.merge!(k => v + 10)
21
+ end
22
+ end
23
+
24
+ # Produces the foreground named colour escape sequence hash. The
25
+ # background escape sequences are also generated from this by adding 10 to
26
+ # the values.
27
+ # This hash gives rise to methods you can call directly on `Esc` to
28
+ # produce the desired colours:
29
+ #
30
+ # @example
31
+ # Esc.red # => "\e[31m"
32
+ #
33
+ # Esc.red { 'some text' } # => "\e[31msome text\e[39m"
34
+ #
35
+ # Esc.on_blue # => "\e[44m"
36
+ #
37
+ # Esc.on_blue { 'some text' } # => "\e[44msome text\e[49m"
38
+ #
39
+ # # Valid names:
40
+ # :black, :red, :green, :yellow, :blue, :magenta, :cyan, :light_grey,
41
+ # :default, :dark_grey, :light_red, :light_green, :light_yellow,
42
+ # :light_blue, :light_magenta, :light_cyan, :white
43
+ #
44
+ # @return [Hash<Symbol => Fixnum>]
45
+ def foreground_codes
46
+ {
47
+ black: 30,
48
+ red: 31,
49
+ green: 32,
50
+ yellow: 33,
51
+ blue: 34,
52
+ magenta: 35,
53
+ cyan: 36,
54
+ light_grey: 37,
55
+ default: 39,
56
+ dark_grey: 90,
57
+ light_red: 91,
58
+ light_green: 92,
59
+ light_yellow: 93,
60
+ light_blue: 94,
61
+ light_magenta: 95,
62
+ light_cyan: 96,
63
+ white: 97,
64
+ }
65
+ end
66
+ alias_method :codes, :foreground_codes
67
+
68
+ # @return [void]
69
+ def setup!
70
+ define_backgrounds!
71
+ define_foregrounds!
72
+ end
73
+
74
+ private
75
+
76
+ # @return [void]
77
+ def define_backgrounds!
78
+ background_codes.each do |key, code|
79
+ define_method('on_' + key.to_s) do |&blk|
80
+ "\e[#{code}m" + (blk ? blk.call + "\e[49m" : '')
81
+ end
82
+ end
83
+ end
84
+
85
+ # Dynamically creates methods for each terminal named colour. When a block
86
+ # is given, then the colour is reset to 'default' once the block is
87
+ # called.
88
+ #
89
+ # @return [void]
90
+ def define_foregrounds!
91
+ foreground_codes.each do |key, code|
92
+ define_method(key) do |&blk|
93
+ "\e[#{code}m" + (blk ? blk.call + "\e[39m" : '')
94
+ end
95
+ end
96
+ end
97
+
98
+ end # Colours
99
+
100
+ end # EscapeSequences
101
+
102
+ Vedeu::EscapeSequences::Colours.setup!
103
+
104
+ end # Vedeu
@@ -5,7 +5,9 @@ module Vedeu
5
5
  #
6
6
  module Esc
7
7
 
8
- include Vedeu::EscapeSequences
8
+ include Vedeu::EscapeSequences::Actions
9
+ include Vedeu::EscapeSequences::Borders
10
+ include Vedeu::EscapeSequences::Colours
9
11
  extend self
10
12
 
11
13
  # Return the stream with the escape sequences escaped so that they can be
@@ -45,8 +45,7 @@ module Vedeu
45
45
  # @param other [Vedeu::Cell]
46
46
  # @return [Boolean]
47
47
  def eql?(other)
48
- self.class == other.class && colour == other.colour &&
49
- style == other.style && value == other.value && x == other.x &&
48
+ self.class == other.class && value == other.value && x == other.x &&
50
49
  y == other.y
51
50
  end
52
51
  alias_method :==, :eql?
File without changes
@@ -46,18 +46,20 @@ module Vedeu
46
46
  return '' unless border || present?(value)
47
47
 
48
48
  out = " style='"
49
+ out << tag_style_background unless char.background.empty?
50
+ out << tag_style_foreground unless char.foreground.empty?
51
+ out << "'"
52
+ end
49
53
 
50
- unless char.background.empty?
51
- out << "border:1px #{char.background.to_html} solid;"
52
- out << "background:#{char.background.to_html};"
53
- end
54
-
55
- unless char.foreground.empty?
56
- out << "color:#{char.foreground.to_html};"
57
- out << "#{border_style}"
58
- end
54
+ # @return [String]
55
+ def tag_style_background
56
+ "border:1px #{char.background.to_html} solid;" \
57
+ "background:#{char.background.to_html};"
58
+ end
59
59
 
60
- out << "'"
60
+ # @return [String]
61
+ def tag_style_foreground
62
+ "color:#{char.foreground.to_html};#{border_style}"
61
63
  end
62
64
 
63
65
  # @return [String]
@@ -48,6 +48,9 @@ module Vedeu
48
48
 
49
49
  private
50
50
 
51
+ # Return the interface colours if a name option is set, otherwise use the
52
+ # default colours.
53
+ #
51
54
  # @return [Vedeu::Colour|Hash<Symbol => Symbol>]
52
55
  def default_colour
53
56
  if options[:name]
@@ -62,6 +65,9 @@ module Vedeu
62
65
  end
63
66
  end
64
67
 
68
+ # Return the interface style(s) if a name option is set, otherwise use the
69
+ # default style.
70
+ #
65
71
  # @return [Symbol]
66
72
  def default_style
67
73
  if options[:name]
@@ -73,23 +79,32 @@ module Vedeu
73
79
  end
74
80
  end
75
81
 
82
+ # Fetch the interface by name.
83
+ #
76
84
  # @return [Vedeu::Interface]
77
85
  def interface
78
86
  Vedeu.interfaces.by_name(options[:name])
79
87
  end
80
88
  alias_method :interface?, :interface
81
89
 
90
+ # Returns the stream directives for the line.
91
+ #
82
92
  # @param line [String]
83
93
  # @return [Array<String>]
84
94
  def streams_for(line)
85
95
  line.split(/({{\s*[^}]+\s*}})/)
86
96
  end
87
97
 
98
+ # Convert the content into an array of strings without the line ending
99
+ # character.
100
+ #
88
101
  # @return [Array<String>]
89
102
  def lines
90
103
  content.lines.map(&:chomp)
91
104
  end
92
105
 
106
+ # Return a string representing the template processed with ERB.
107
+ #
93
108
  # @return [String]
94
109
  def content
95
110
  ERB.new(load, nil, '-').result(binding)
@@ -1,6 +1,6 @@
1
1
  module Vedeu
2
2
 
3
3
  # The current version of Vedeu.
4
- VERSION = '0.5.8'
4
+ VERSION = '0.5.9'
5
5
 
6
6
  end
@@ -45,26 +45,69 @@ module Vedeu
45
45
  let(:source) {}
46
46
  let(:destination) {}
47
47
 
48
- before { Vedeu.stubs(:log_stdout) }
48
+ before {
49
+ File.stubs(:exist?).returns(false)
50
+ Vedeu.stubs(:log_stdout)
51
+ }
49
52
 
50
53
  subject { instance.copy_file(source, destination) }
51
54
 
52
- it {
53
- FileUtils.expects(:cp).with(source, destination)
54
- subject
55
- }
55
+ context 'when the file exists' do
56
+ before { File.stubs(:exist?).returns(true) }
57
+
58
+ it {
59
+ Vedeu.expects(:log_stdout)
60
+ subject
61
+ }
62
+ end
63
+
64
+ context 'when the file does not exist' do
65
+ it {
66
+ FileUtils.expects(:cp).with(source, destination)
67
+ subject
68
+ }
69
+ end
56
70
  end
57
71
 
58
72
  describe '#make_file' do
59
73
  let(:source) {}
60
74
  let(:destination) {}
61
75
 
62
- before { Vedeu.stubs(:log_stdout) }
76
+ before {
77
+ File.stubs(:exist?).returns(false)
78
+ Vedeu.stubs(:log_stdout)
79
+ }
63
80
 
64
81
  subject { instance.make_file(source, destination) }
65
82
 
66
- # @todo Add more tests.
67
- # it { skip }
83
+ context 'when the file exists' do
84
+ before { File.stubs(:exist?).returns(true) }
85
+
86
+ it {
87
+ Vedeu.expects(:log_stdout)
88
+ subject
89
+ }
90
+ end
91
+
92
+ context 'when the file does not exist' do
93
+ # @todo Add more tests.
94
+ # it { skip }
95
+ end
96
+ end
97
+
98
+ describe '#skipped_file' do
99
+ let(:destination) { 'some_file.txt' }
100
+
101
+ before { Vedeu.stubs(:log_stdout) }
102
+
103
+ subject { instance.skipped_file(destination) }
104
+
105
+ it {
106
+ Vedeu.expects(:log_stdout).
107
+ with(type: :create,
108
+ message: "some_file.txt \e[31malready exists, skipped.\e[39m")
109
+ subject
110
+ }
68
111
  end
69
112
 
70
113
  describe '#touch_file' do
@@ -0,0 +1,39 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ module EscapeSequences
6
+
7
+ describe Actions do
8
+
9
+ let(:described) { Vedeu::EscapeSequences::Actions }
10
+
11
+ before { Vedeu::Terminal.stubs(:size).returns([80, 25]) }
12
+
13
+ describe 'action methods' do
14
+ it { described.hide_cursor.must_equal("\e[?25l") }
15
+ it { described.show_cursor.must_equal("\e[?25h") }
16
+ it { described.cursor_position.must_equal("\e[6n") }
17
+ it { described.bg_reset.must_equal("\e[49m") }
18
+ it { described.blink.must_equal("\e[5m") }
19
+ it { described.blink_off.must_equal("\e[25m") }
20
+ it { described.bold.must_equal("\e[1m") }
21
+ it { described.bold_off.must_equal("\e[22m") }
22
+ it { described.dim.must_equal("\e[2m") }
23
+ it { described.fg_reset.must_equal("\e[39m") }
24
+ it { described.negative.must_equal("\e[7m") }
25
+ it { described.positive.must_equal("\e[27m") }
26
+ it { described.reset.must_equal("\e[0m") }
27
+ it { described.underline.must_equal("\e[4m") }
28
+ it { described.underline_off.must_equal("\e[24m") }
29
+ end
30
+
31
+ describe '.characters' do
32
+ it { described.characters.must_be_instance_of(Hash) }
33
+ end
34
+
35
+ end # Actions
36
+
37
+ end # EscapeSequences
38
+
39
+ end # Vedeu
@@ -0,0 +1,37 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ module EscapeSequences
6
+
7
+ describe Borders do
8
+
9
+ let(:described) { Vedeu::EscapeSequences::Borders }
10
+
11
+ before { Vedeu::Terminal.stubs(:size).returns([80, 25]) }
12
+
13
+ describe 'border methods' do
14
+ it { described.border_on.must_equal("\e(0") }
15
+ it { described.border_off.must_equal("\e(B") }
16
+
17
+ it { described.bottom_right.must_equal("\x6A") }
18
+ it { described.top_right.must_equal("\x6B") }
19
+ it { described.top_left.must_equal("\x6C") }
20
+ it { described.bottom_left.must_equal("\x6D") }
21
+ it { described.horizontal.must_equal("\x71") }
22
+ it { described.vertical_left.must_equal("\x74") }
23
+ it { described.vertical_right.must_equal("\x75") }
24
+ it { described.horizontal_bottom.must_equal("\x76") }
25
+ it { described.horizontal_top.must_equal("\x77") }
26
+ it { described.vertical.must_equal("\x78") }
27
+ end
28
+
29
+ describe '.characters' do
30
+ it { described.characters.must_be_instance_of(Hash) }
31
+ end
32
+
33
+ end # Borders
34
+
35
+ end # EscapeSequences
36
+
37
+ end # Vedeu
@@ -0,0 +1,80 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ module EscapeSequences
6
+
7
+ describe Colours do
8
+
9
+ let(:described) { Vedeu::EscapeSequences::Colours }
10
+
11
+ before { Vedeu::Terminal.stubs(:size).returns([80, 25]) }
12
+
13
+ describe 'foreground colour methods' do
14
+ it { described.black.must_equal("\e[30m") }
15
+ it { described.red.must_equal("\e[31m") }
16
+ it { described.green.must_equal("\e[32m") }
17
+ it { described.yellow.must_equal("\e[33m") }
18
+ it { described.blue.must_equal("\e[34m") }
19
+ it { described.magenta.must_equal("\e[35m") }
20
+ it { described.cyan.must_equal("\e[36m") }
21
+ it { described.light_grey.must_equal("\e[37m") }
22
+ it { described.default.must_equal("\e[39m") }
23
+ it { described.dark_grey.must_equal("\e[90m") }
24
+ it { described.light_red.must_equal("\e[91m") }
25
+ it { described.light_green.must_equal("\e[92m") }
26
+ it { described.light_yellow.must_equal("\e[93m") }
27
+ it { described.light_blue.must_equal("\e[94m") }
28
+ it { described.light_magenta.must_equal("\e[95m") }
29
+ it { described.light_cyan.must_equal("\e[96m") }
30
+ it { described.white.must_equal("\e[97m") }
31
+
32
+ it 'returns an escape sequence for the foreground colour and resets ' \
33
+ 'after calling the block' do
34
+ described.cyan do
35
+ 'ununpentium'
36
+ end.must_equal("\e[36mununpentium\e[39m")
37
+ end
38
+ end
39
+
40
+ describe '.codes' do
41
+ it { described.codes.must_be_instance_of(Hash) }
42
+ it { described.must_respond_to(:foreground_codes) }
43
+ end
44
+
45
+ describe '.background_codes' do
46
+ it { described.background_codes.must_be_instance_of(Hash) }
47
+ end
48
+
49
+ describe 'background colour methods' do
50
+ it { described.on_black.must_equal("\e[40m") }
51
+ it { described.on_red.must_equal("\e[41m") }
52
+ it { described.on_green.must_equal("\e[42m") }
53
+ it { described.on_yellow.must_equal("\e[43m") }
54
+ it { described.on_blue.must_equal("\e[44m") }
55
+ it { described.on_magenta.must_equal("\e[45m") }
56
+ it { described.on_cyan.must_equal("\e[46m") }
57
+ it { described.on_light_grey.must_equal("\e[47m") }
58
+ it { described.on_default.must_equal("\e[49m") }
59
+ it { described.on_dark_grey.must_equal("\e[100m") }
60
+ it { described.on_light_red.must_equal("\e[101m") }
61
+ it { described.on_light_green.must_equal("\e[102m") }
62
+ it { described.on_light_yellow.must_equal("\e[103m") }
63
+ it { described.on_light_blue.must_equal("\e[104m") }
64
+ it { described.on_light_magenta.must_equal("\e[105m") }
65
+ it { described.on_light_cyan.must_equal("\e[106m") }
66
+ it { described.on_white.must_equal("\e[107m") }
67
+
68
+ it 'returns an escape sequence for the background colour and resets ' \
69
+ 'after calling the block' do
70
+ described.on_red do
71
+ 'livermorium'
72
+ end.must_equal("\e[41mlivermorium\e[49m")
73
+ end
74
+ end
75
+
76
+ end # Colours
77
+
78
+ end # EscapeSequences
79
+
80
+ end # Vedeu