whirled_peas 0.3.0 → 0.4.0

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,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