whirled_peas 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +125 -6
- data/bin/title_fonts +6 -0
- data/exe/whirled_peas +7 -0
- data/lib/whirled_peas.rb +12 -32
- data/lib/whirled_peas/command_line.rb +266 -0
- data/lib/whirled_peas/config.rb +21 -0
- data/lib/whirled_peas/errors.rb +5 -0
- data/lib/whirled_peas/frame.rb +0 -4
- data/lib/whirled_peas/frame/event_loop.rb +60 -28
- data/lib/whirled_peas/frame/print_consumer.rb +33 -0
- data/lib/whirled_peas/frame/producer.rb +29 -18
- data/lib/whirled_peas/template.rb +5 -0
- data/lib/whirled_peas/{ui → template}/element.rb +12 -6
- data/lib/whirled_peas/{ui → template}/settings.rb +8 -1
- data/lib/whirled_peas/ui.rb +1 -3
- data/lib/whirled_peas/ui/canvas.rb +1 -1
- data/lib/whirled_peas/ui/painter.rb +20 -16
- data/lib/whirled_peas/ui/screen.rb +21 -18
- data/lib/whirled_peas/utils.rb +5 -0
- data/lib/whirled_peas/{ui → utils}/ansi.rb +0 -0
- data/lib/whirled_peas/{ui → utils}/color.rb +0 -0
- data/lib/whirled_peas/utils/title_font.rb +75 -0
- data/lib/whirled_peas/version.rb +1 -1
- data/whirled_peas.gemspec +4 -1
- metadata +32 -13
- data/sandbox/auto.rb +0 -13
- data/sandbox/box.rb +0 -19
- data/sandbox/grid.rb +0 -13
- data/sandbox/sandbox.rb +0 -17
- data/sandbox/text.rb +0 -33
File without changes
|
File without changes
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module WhirledPeas
|
2
|
+
module Utils
|
3
|
+
module TitleFont
|
4
|
+
PREFERRED_DEFAULT_FONT = :ansishadow
|
5
|
+
FONT_CACHE = File.join(ENV['HOME'] || '.', '.whirled_peas.fonts')
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def validate!(font_key)
|
9
|
+
return unless font_key
|
10
|
+
return font_key if fonts.key?(font_key)
|
11
|
+
allowed = fonts.keys.map(&:inspect).sort
|
12
|
+
message = "Unrecognized font: '#{font_key.inspect}', expecting one of #{allowed.join(', ')}"
|
13
|
+
raise ArgumentError, message
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_s(string, font_key)
|
17
|
+
require 'ruby_figlet'
|
18
|
+
RubyFiglet::Figlet.new(string, fonts[font_key]).to_s
|
19
|
+
end
|
20
|
+
|
21
|
+
def fonts
|
22
|
+
return @fonts if @fonts
|
23
|
+
File.exist?(FONT_CACHE) ? load_fonts_from_cache : load_fonts_from_figlet
|
24
|
+
@fonts
|
25
|
+
end
|
26
|
+
|
27
|
+
def load_fonts_from_cache
|
28
|
+
require 'json'
|
29
|
+
@fonts = {}
|
30
|
+
File.open(FONT_CACHE, 'r') do |fp|
|
31
|
+
JSON.parse(fp.read).each do |key, value|
|
32
|
+
@fonts[key.to_sym] = value
|
33
|
+
end
|
34
|
+
end
|
35
|
+
@fonts
|
36
|
+
end
|
37
|
+
|
38
|
+
def load_fonts_from_figlet
|
39
|
+
require 'ruby_figlet'
|
40
|
+
require 'json'
|
41
|
+
@fonts = {}
|
42
|
+
RubyFiglet::Figlet.available.strip.split("\n").each do |font|
|
43
|
+
# Load the font to be sure it exists on the system
|
44
|
+
next unless available?(font)
|
45
|
+
string_key = font.downcase.gsub(/\W/, '')
|
46
|
+
string_key = "_#{string_key}" if string_key[0] !~ /[a-z]/
|
47
|
+
string_key.gsub!(/\d+$/, '')
|
48
|
+
next if @fonts.key?(string_key)
|
49
|
+
@fonts[string_key.to_sym] = font
|
50
|
+
end
|
51
|
+
@fonts[:default] ||= @fonts[PREFERRED_DEFAULT_FONT] || @fonts.values.first
|
52
|
+
File.open(FONT_CACHE, 'w') { |fp| fp.write(JSON.generate(@fonts)) }
|
53
|
+
@fonts
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def available?(font)
|
59
|
+
# Figlet's font loader prints to STDOUT if the font file is not found.
|
60
|
+
# Temporarily redirect STDOUT to /dev/null while the font file is loaded
|
61
|
+
# then remove the redirect in an ensure block. Also, if a font file is
|
62
|
+
# not available, a SystemExit is raise :/
|
63
|
+
original_stdout = $stdout.clone
|
64
|
+
$stdout.reopen(File.new('/dev/null', 'w'))
|
65
|
+
RubyFiglet::Figlet.new('Text', font)
|
66
|
+
true
|
67
|
+
rescue SystemExit, NoMethodError
|
68
|
+
false
|
69
|
+
ensure
|
70
|
+
$stdout.reopen(original_stdout)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
data/lib/whirled_peas/version.rb
CHANGED
data/whirled_peas.gemspec
CHANGED
@@ -18,10 +18,13 @@ Gem::Specification.new do |spec|
|
|
18
18
|
# Specify which files should be added to the gem when it is released.
|
19
19
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
20
20
|
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
21
|
-
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(
|
21
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec|sandbox)/}) }
|
22
22
|
end
|
23
|
+
spec.bindir = 'exe'
|
24
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
25
|
spec.require_paths = ['lib']
|
24
26
|
|
25
27
|
spec.add_runtime_dependency 'highline', '~> 2.0'
|
26
28
|
spec.add_runtime_dependency 'json', '~> 2.5'
|
29
|
+
spec.add_runtime_dependency 'ruby_figlet', '~> 0.6'
|
27
30
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: whirled_peas
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Collier
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-01-
|
11
|
+
date: 2021-01-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: highline
|
@@ -38,10 +38,25 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '2.5'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: ruby_figlet
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.6'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.6'
|
41
55
|
description:
|
42
56
|
email:
|
43
57
|
- tcollier@gmail.com
|
44
|
-
executables:
|
58
|
+
executables:
|
59
|
+
- whirled_peas
|
45
60
|
extensions: []
|
46
61
|
extra_rdoc_files: []
|
47
62
|
files:
|
@@ -56,25 +71,29 @@ files:
|
|
56
71
|
- Rakefile
|
57
72
|
- bin/console
|
58
73
|
- bin/setup
|
74
|
+
- bin/title_fonts
|
75
|
+
- exe/whirled_peas
|
59
76
|
- lib/whirled_peas.rb
|
77
|
+
- lib/whirled_peas/command_line.rb
|
78
|
+
- lib/whirled_peas/config.rb
|
79
|
+
- lib/whirled_peas/errors.rb
|
60
80
|
- lib/whirled_peas/frame.rb
|
61
81
|
- lib/whirled_peas/frame/event_loop.rb
|
82
|
+
- lib/whirled_peas/frame/print_consumer.rb
|
62
83
|
- lib/whirled_peas/frame/producer.rb
|
63
84
|
- lib/whirled_peas/null_logger.rb
|
85
|
+
- lib/whirled_peas/template.rb
|
86
|
+
- lib/whirled_peas/template/element.rb
|
87
|
+
- lib/whirled_peas/template/settings.rb
|
64
88
|
- lib/whirled_peas/ui.rb
|
65
|
-
- lib/whirled_peas/ui/ansi.rb
|
66
89
|
- lib/whirled_peas/ui/canvas.rb
|
67
|
-
- lib/whirled_peas/ui/color.rb
|
68
|
-
- lib/whirled_peas/ui/element.rb
|
69
90
|
- lib/whirled_peas/ui/painter.rb
|
70
91
|
- lib/whirled_peas/ui/screen.rb
|
71
|
-
- lib/whirled_peas/
|
92
|
+
- lib/whirled_peas/utils.rb
|
93
|
+
- lib/whirled_peas/utils/ansi.rb
|
94
|
+
- lib/whirled_peas/utils/color.rb
|
95
|
+
- lib/whirled_peas/utils/title_font.rb
|
72
96
|
- lib/whirled_peas/version.rb
|
73
|
-
- sandbox/auto.rb
|
74
|
-
- sandbox/box.rb
|
75
|
-
- sandbox/grid.rb
|
76
|
-
- sandbox/sandbox.rb
|
77
|
-
- sandbox/text.rb
|
78
97
|
- whirled_peas.gemspec
|
79
98
|
homepage: https://github.com/tcollier/whirled_peas
|
80
99
|
licenses:
|
data/sandbox/auto.rb
DELETED
data/sandbox/box.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require_relative 'sandbox'
|
2
|
-
|
3
|
-
WhirledPeas.sandbox do |t|
|
4
|
-
t.add_box do |outer, outer_s|
|
5
|
-
outer_s.full_border
|
6
|
-
outer_s.bg_color = :green
|
7
|
-
outer_s.set_padding(left: 3, right: 3, top: 1, bottom: 1)
|
8
|
-
outer.add_box do |inner1, i1_s|
|
9
|
-
i1_s.flow = :t2b
|
10
|
-
inner1.add_box { "TOP LEFT" }
|
11
|
-
inner1.add_box { "BOTTOM LEFT" }
|
12
|
-
end
|
13
|
-
outer.add_box do |inner2, i2_s|
|
14
|
-
i2_s.flow = :t2b
|
15
|
-
inner2.add_box { "TOP RIGHT "}
|
16
|
-
inner2.add_box { "BOTTOM RIGHT "}
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
data/sandbox/grid.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
require_relative 'sandbox'
|
2
|
-
|
3
|
-
WhirledPeas.sandbox do |t|
|
4
|
-
t.add_grid do |grid, settings|
|
5
|
-
settings.num_cols = 3
|
6
|
-
settings.bg_color = :yellow
|
7
|
-
settings.color = :blue
|
8
|
-
settings.set_margin(top: 3, left: 10)
|
9
|
-
settings.set_padding(top: 1, bottom: 1, left: 3, right: 3)
|
10
|
-
settings.full_border(color: :green)
|
11
|
-
6.times.map { |i| (i + 1).to_s }
|
12
|
-
end
|
13
|
-
end
|
data/sandbox/sandbox.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'bundler/setup'
|
2
|
-
require 'whirled_peas'
|
3
|
-
require 'whirled_peas/ui'
|
4
|
-
|
5
|
-
module WhirledPeas
|
6
|
-
def self.sandbox(&block)
|
7
|
-
template = WhirledPeas.template(&block)
|
8
|
-
if ARGV.last == '--debug'
|
9
|
-
puts template.inspect
|
10
|
-
screen = UI::Screen.new(false)
|
11
|
-
else
|
12
|
-
screen = UI::Screen.new
|
13
|
-
end
|
14
|
-
screen.paint(template)
|
15
|
-
screen.finalize
|
16
|
-
end
|
17
|
-
end
|
data/sandbox/text.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require_relative 'sandbox'
|
2
|
-
|
3
|
-
WhirledPeas.sandbox do |t|
|
4
|
-
t.add_text do |_, settings|
|
5
|
-
settings.bg_color = :green
|
6
|
-
settings.align = :right
|
7
|
-
settings.width = 30
|
8
|
-
"HELLO"
|
9
|
-
end
|
10
|
-
t.add_text do |_, settings|
|
11
|
-
settings.bg_color = :red
|
12
|
-
settings.align = :center
|
13
|
-
settings.width = 30
|
14
|
-
"WORLD"
|
15
|
-
end
|
16
|
-
t.add_text do |_, settings|
|
17
|
-
settings.bg_color = :green
|
18
|
-
settings.width = 4
|
19
|
-
"1234567890"
|
20
|
-
end
|
21
|
-
t.add_text do |_, settings|
|
22
|
-
settings.bg_color = :red
|
23
|
-
settings.align = :center
|
24
|
-
settings.width = 4
|
25
|
-
"1234567890"
|
26
|
-
end
|
27
|
-
t.add_text do |_, settings|
|
28
|
-
settings.bg_color = :green
|
29
|
-
settings.align = :right
|
30
|
-
settings.width = 4
|
31
|
-
"1234567890"
|
32
|
-
end
|
33
|
-
end
|