vamp 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vamp/animator.rb +82 -36
- data/lib/vamp/version.rb +1 -1
- data/sample/pyramid.rb +4 -0
- data/sample/vampire.rb +4 -6
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ed0c28b4a5fa22a09ccafc6674d51076fb75816
|
4
|
+
data.tar.gz: 931968ca87c4c1cf6c4c5a4b8865625bece04ec0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b196797bc06e8c60be048e59a4a9a11bcbf8fdece181c07d3e0832afd61616f79aee6caa725380f58b4be0bc61a6f04c72dde40dd5a8cfd33debf0c5fb1db91f
|
7
|
+
data.tar.gz: e122c443482653ceaa831f2dad9a6d84a010dd2040e710c89b159b6a6bbc5803d4ffb0738ed2fec214c9fb8da6b1cba24a307f03b3cd2bb998f0415310d6605b
|
data/lib/vamp/animator.rb
CHANGED
@@ -3,32 +3,37 @@ require_relative "colorize"
|
|
3
3
|
module Vamp
|
4
4
|
# play animation on console
|
5
5
|
class Animator
|
6
|
-
attr_accessor :data
|
7
|
-
attr_accessor :number
|
8
|
-
attr_accessor :width
|
9
|
-
attr_accessor :height
|
10
|
-
attr_accessor :
|
6
|
+
attr_accessor :data # complete animation lines
|
7
|
+
attr_accessor :number # animation source height
|
8
|
+
attr_accessor :width # animation width
|
9
|
+
attr_accessor :height # animation height ( +1 if scroll_text)
|
10
|
+
attr_accessor :scroll_text # running text data
|
11
|
+
attr_accessor :scroll_counter # for calculating running text offset
|
12
|
+
attr_accessor :ani_color # animation color (if any: "red", "blue", ..)
|
13
|
+
attr_accessor :text_color # text color (if any: "blue", "green", ...)
|
11
14
|
|
12
|
-
|
15
|
+
|
16
|
+
def initialize(file, number = 31, start = 0, height = number, scroll_text = nil, cycles = 1)
|
13
17
|
@data = []
|
14
18
|
@number = number
|
15
|
-
@
|
16
|
-
@
|
17
|
-
@
|
18
|
-
@
|
19
|
+
@height = height - start
|
20
|
+
@scroll_text = scroll_text
|
21
|
+
@cycles = cycles
|
22
|
+
@width = detect_terminal_width || 80
|
23
|
+
if scroll_text
|
24
|
+
@height += 1
|
25
|
+
@scroll_counter = 0
|
26
|
+
@scroll_text = (" " * @width) + scroll_text + (" " * @width)
|
27
|
+
end
|
28
|
+
@ani_color = "red"
|
29
|
+
@text_color = "blue"
|
19
30
|
lines = IO.readlines(file)
|
20
31
|
lines.each_slice(number) do |block|
|
21
32
|
d = []
|
22
33
|
block.each_with_index do |line, index|
|
23
|
-
|
24
|
-
# puts printf("%-40s", line)
|
25
|
-
# d << line
|
26
|
-
d << (line.rstrip + (" " * 80))[0..80]
|
27
|
-
# d << sprintf("%80s", line)
|
28
|
-
# puts block.length
|
34
|
+
d << (line.rstrip + (" " * 80))[0..(width - 1)] if index >= start
|
29
35
|
break if index >= height
|
30
36
|
end
|
31
|
-
# puts lines
|
32
37
|
@data << d
|
33
38
|
end
|
34
39
|
end
|
@@ -37,16 +42,12 @@ module Vamp
|
|
37
42
|
print "\e[H\e[2J"
|
38
43
|
end
|
39
44
|
|
40
|
-
def home
|
41
|
-
print "\e[H\e[#{
|
42
|
-
end
|
43
|
-
|
44
|
-
def home
|
45
|
-
print "\e[H\e[#{height}F"
|
45
|
+
def home(lines = height)
|
46
|
+
print "\e[H\e[#{lines}F"
|
46
47
|
end
|
47
48
|
|
48
|
-
def down(lines =
|
49
|
-
#
|
49
|
+
def down(lines = height)
|
50
|
+
# lines.times { puts }
|
50
51
|
print "\e[H\e[#{lines}E"
|
51
52
|
end
|
52
53
|
|
@@ -54,14 +55,33 @@ module Vamp
|
|
54
55
|
$stdout.flush
|
55
56
|
end
|
56
57
|
|
58
|
+
def scroll_offset
|
59
|
+
@scroll_counter / 3
|
60
|
+
end
|
61
|
+
|
57
62
|
def animate(msg)
|
58
63
|
home
|
59
|
-
|
60
|
-
|
64
|
+
if ani_color
|
65
|
+
puts Vamp::Colorize.colorize(ani_color, msg)
|
66
|
+
else
|
67
|
+
puts msg
|
68
|
+
end
|
69
|
+
if scroll_text
|
70
|
+
if text_color
|
71
|
+
puts Vamp::Colorize.colorize(text_color, running_line)
|
72
|
+
else
|
73
|
+
puts running_line
|
74
|
+
end
|
75
|
+
end
|
61
76
|
flush
|
62
77
|
sleep(1.0/48.0)
|
63
78
|
end
|
64
79
|
|
80
|
+
def running_line
|
81
|
+
@scroll_counter += 1
|
82
|
+
"#{scroll_text[scroll_offset..(scroll_offset + width - 1)]}"
|
83
|
+
end
|
84
|
+
|
65
85
|
def cursor_off
|
66
86
|
print "\e[H\e[?25l"
|
67
87
|
end
|
@@ -70,24 +90,50 @@ module Vamp
|
|
70
90
|
print "\e[H\e[?25h"
|
71
91
|
end
|
72
92
|
|
73
|
-
def animate_line
|
74
|
-
@offset += 1
|
75
|
-
"#{@scroll[(@offset / 2)..(@offset / 2 + @width - 1)]}"
|
76
|
-
end
|
77
|
-
|
78
93
|
def play
|
79
94
|
if $stdout.isatty
|
80
95
|
begin
|
81
96
|
cursor_off
|
82
97
|
clear
|
83
|
-
data.each
|
84
|
-
|lines| animate(lines.join("\n"))
|
85
|
-
end
|
98
|
+
data.each { |lines| animate(lines.join("\n")) } until finished?
|
86
99
|
ensure
|
87
100
|
cursor_on
|
88
|
-
down(
|
101
|
+
down(height + 1)
|
89
102
|
end
|
103
|
+
else
|
104
|
+
puts "sorry, I must have a tty device to play an animation"
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def finished?
|
109
|
+
if scroll_text
|
110
|
+
scroll_offset + width >= scroll_text.size
|
111
|
+
else
|
112
|
+
@cycle ||= 0
|
113
|
+
@cycle += 1
|
114
|
+
@cycle > @cycles
|
90
115
|
end
|
91
116
|
end
|
117
|
+
|
118
|
+
# stolen from <https://github.com/cldwalker/hirb/blob/master/lib/hirb/util.rb>
|
119
|
+
# Returns width of terminal when detected, nil if not detected.
|
120
|
+
def detect_terminal_width
|
121
|
+
if ENV['COLUMNS'] =~ /^\d+$/
|
122
|
+
ENV['COLUMNS'].to_i
|
123
|
+
elsif (RUBY_PLATFORM =~ /java/ || (!STDIN.tty? && ENV['TERM'])) && command_exists?('tput')
|
124
|
+
`tput cols`.to_i
|
125
|
+
elsif STDIN.tty? && command_exists?('stty')
|
126
|
+
`stty size`.scan(/\d+/)[1].to_i
|
127
|
+
else
|
128
|
+
nil
|
129
|
+
end
|
130
|
+
rescue
|
131
|
+
nil
|
132
|
+
end
|
133
|
+
|
134
|
+
# Determines if a shell command exists by searching for it in ENV['PATH'].
|
135
|
+
def command_exists?(command)
|
136
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).any? {|d| File.exists? File.join(d, command) }
|
137
|
+
end
|
92
138
|
end
|
93
139
|
end
|
data/lib/vamp/version.rb
CHANGED
data/sample/pyramid.rb
ADDED
data/sample/vampire.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
require "vamp"
|
2
2
|
|
3
|
-
animator = Vamp::Animator.new(File.join(Gem.loaded_specs["vamp"].gem_dir, "files", "vampire.txt"), 31, 24,
|
4
|
-
"
|
5
|
-
"No man knows till he has suffered from the night how sweet and how dear to his heart and eye the morning can be." \
|
3
|
+
animator = Vamp::Animator.new(File.join(Gem.loaded_specs["vamp"].gem_dir, "files", "vampire.txt"), 31, 0, 24,
|
4
|
+
"No man knows till he has suffered from the night how sweet and how dear to his heart and eye the morning can be." \
|
6
5
|
" When the sun grew so high this morning that it struck the top of the great gateway opposite my window," \
|
7
6
|
" the high spot which it touched seemed to me as if the dove from the ark had lighted there. My fear fell from me" \
|
8
|
-
" as if it had been a vaporous garment which dissolved in the warmth."
|
9
|
-
|
10
|
-
16.times { animator.play }
|
7
|
+
" as if it had been a vaporous garment which dissolved in the warmth.")
|
8
|
+
animator.play
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vamp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Meyling
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -62,6 +62,7 @@ files:
|
|
62
62
|
- lib/vamp/ply/vampire.rb
|
63
63
|
- lib/vamp/version.rb
|
64
64
|
- sample/cli.rb
|
65
|
+
- sample/pyramid.rb
|
65
66
|
- sample/vampire.rb
|
66
67
|
- spec/spec_helper.rb
|
67
68
|
- spec/vamp_spec.rb
|