vedeu 0.5.8 → 0.5.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -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