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.
@@ -0,0 +1,5 @@
1
+ module WhirledPeas
2
+ module Utils
3
+ end
4
+ private_constant :Utils
5
+ end
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
@@ -1,3 +1,3 @@
1
1
  module WhirledPeas
2
- VERSION = '0.3.0'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -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{^(test|spec|features)/}) }
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.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Collier
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-21 00:00:00.000000000 Z
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/ui/settings.rb
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:
@@ -1,13 +0,0 @@
1
- require_relative 'sandbox'
2
-
3
- WhirledPeas.sandbox do |t|
4
- t.add_box do |outer, s|
5
- s.full_border
6
- s.bg_color = :green
7
- s.width = 100
8
- outer.add_box do |inner, s|
9
- s.auto_margin = true
10
- "MIDDLE"
11
- end
12
- end
13
- end
@@ -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
@@ -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
@@ -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
@@ -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