choosy 0.4.4 → 0.4.5

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.
data/README.markdown CHANGED
@@ -436,7 +436,7 @@ For those who want the nice, manpage experience, there's also the <code>:manpage
436
436
  version FOO_VERSION # If you don't supply a version above, this will be used
437
437
  end
438
438
 
439
- Because the library is super-awesome, the manpage will even be in color when piped to <code>less -R<code> (the default)! If you don't like the format of my manpage, feel free to implement your own using the <code>choosy/printing/manpage</code> class, a useful utility class for formatting manpage output correctly.
439
+ Because the library is super-awesome, the manpage will even be in color when piped to <code>less -R</code> (the default)! If you don't like the format of my manpage, feel free to implement your own using the <code>choosy/printing/manpage</code> class, a useful utility class for formatting manpage output correctly.
440
440
 
441
441
  If you already have some templates that you'd like to use, there is also the <code>:erb</code> template that can be customized by writing a template of your choice:
442
442
 
@@ -448,7 +448,7 @@ If you already have some templates that you'd like to use, there is also the <co
448
448
 
449
449
  The ERB printer also accepts the <code>:color</code> option. The color is exposed via a <code>color</code> property in the template; the command is exposed by the <code>command</code> property.
450
450
 
451
- Finally, because I don't want to tell you how to print your help, I also give you the option of supplying your own printer. Just create a class with a <code>print!(command)</code> method on that class, and it will be passed in the command that it should print the help for. I have supplied some code you may find useful in <code>choosy/printing/terminal</code> that will help with things like finding commands and determining the column width of the terminal.
451
+ Finally, because I don't want to tell you how to print your help, I also give you the option of supplying your own printer. Just create a class with a <code>print!(command)</code> method on that class, and it will be passed in the command that it should print the help for. I have supplied some code you may find useful in <code>choosy/terminal</code> that will help with things like finding commands and determining the column width of the terminal.
452
452
 
453
453
  class CustomPrinter
454
454
  def print!(command)
data/lib/VERSION.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  date: 31/03/2011
3
3
  version:
4
- tiny: 4
4
+ tiny: 5
5
5
  major: 0
6
6
  minor: 4
@@ -1,15 +1,9 @@
1
1
  require 'choosy/errors'
2
- require 'choosy/printing/terminal'
3
-
4
- class String
5
- def unformatted
6
- gsub(/\e\[\d+m/, '').gsub(/\\f[IPB]/, '')
7
- end
8
- end
2
+ require 'choosy/terminal'
9
3
 
10
4
  module Choosy::Printing
11
5
  class BasePrinter
12
- include Terminal
6
+ include Choosy::Terminal
13
7
 
14
8
  attr_accessor :indent, :offset, :formatting_options, :heading_styles, :option_styles
15
9
 
@@ -215,7 +209,7 @@ module Choosy::Printing
215
209
  case item
216
210
  when Choosy::Option
217
211
  opt = regular_option(item)
218
- len = opt.unformatted.length
212
+ len = unformatted(opt).length
219
213
  if len > optionlen
220
214
  optionlen = len
221
215
  end
@@ -1,5 +1,4 @@
1
1
  require 'choosy/errors'
2
- require 'choosy/printing/terminal'
3
2
  require 'choosy/printing/base_printer'
4
3
 
5
4
  module Choosy::Printing
@@ -88,7 +87,7 @@ module Choosy::Printing
88
87
  end
89
88
 
90
89
  def write_prefix(prefix, after_indent)
91
- len = after_indent.length - prefix.unformatted.length - indent.length
90
+ len = after_indent.length - unformatted(prefix).length - indent.length
92
91
  @buffer << indent
93
92
  @buffer << prefix
94
93
  @buffer << " " * len
@@ -206,7 +206,7 @@ EOF
206
206
  end
207
207
 
208
208
  def prefixed(tag, quot, line=nil)
209
- puts tag if quot.nil?
209
+ return if quot.nil?
210
210
  tag << SQUOTE << quot << EQUOTE
211
211
  if line.nil?
212
212
  append(tag)
@@ -0,0 +1,132 @@
1
+ require 'choosy/errors'
2
+ require 'choosy/printing/color'
3
+
4
+ module Choosy
5
+ module Terminal
6
+ DEFAULT_LINE_COUNT = 25
7
+ DEFAULT_COLUMN_COUNT = 80
8
+
9
+ attr_writer :lines, :columns
10
+
11
+ def lines
12
+ @lines ||= find_terminal_size('LINES', 'lines', 0) || DEFAULT_LINE_COUNT
13
+ end
14
+
15
+ def columns
16
+ @columns ||= find_terminal_size('COLUMNS', 'cols', 1) || DEFAULT_COLUMN_COUNT
17
+ end
18
+
19
+ def color
20
+ @color ||= Choosy::Printing::Color.new
21
+ end
22
+
23
+ def pager?
24
+ !pager.empty?
25
+ end
26
+
27
+ def pager
28
+ @pager ||= nil
29
+ return @pager if @pager
30
+
31
+ @pager ||= ENV['PAGER'] ||
32
+ ENV['MANPAGER'] ||
33
+ if command_exists?('less')
34
+ 'less -R'
35
+ elsif command_exists?('more')
36
+ 'more'
37
+ else
38
+ ''
39
+ end
40
+ if @pager !~ /less -R/
41
+ color.disable!
42
+ end
43
+ @pager
44
+ end
45
+
46
+ def page(contents, pipe_command=nil)
47
+ if pager?
48
+ if pipe_command
49
+ pipe_out("#{pipe_command} | #{pager}", contents)
50
+ else
51
+ pipe_out(pager, contents)
52
+ end
53
+ else
54
+ pipe_out(pipe_command, contents)
55
+ end
56
+ end
57
+
58
+ def pipe_out(command, contents = nil, &block)
59
+ puts contents if command.nil? && contents
60
+
61
+ IO.popen(command, 'w') do |f|
62
+ f.puts contents if contents
63
+ if block_given?
64
+ yield f
65
+ end
66
+ end
67
+ end
68
+
69
+ def pipe_in(command = nil, &block)
70
+ raise ArgumentError.new("Requires a block") unless block_given?
71
+
72
+ if command
73
+ IO.popen(command, 'r') do |f|
74
+ f.each_line do |line|
75
+ yield line
76
+ end
77
+ end
78
+ $?
79
+ elsif stdin?
80
+ STDIN.each_line do |line|
81
+ yield line
82
+ end
83
+ 0
84
+ else
85
+ 1
86
+ end
87
+ end
88
+
89
+ # directly from hirb
90
+ def command_exists?(command)
91
+ ENV['PATH'].split(File::PATH_SEPARATOR).any? {|d| File.exists? File.join(d, command) }
92
+ end
93
+
94
+ def stdin?
95
+ begin
96
+ require 'fcntl'
97
+ STDIN.fcntl(Fcntl::F_GETFL, 0) == 0 && !stdin.tty?
98
+ rescue
99
+ $stdin.stat.size != 0
100
+ end
101
+ end
102
+
103
+ def unformatted(line='')
104
+ line = line.gsub(/\e\[\d+m/, '')
105
+ line.gsub!(/\\f[IPB]/, '')
106
+ line
107
+ end
108
+
109
+ def die(message)
110
+ raise Choosy::ConfigurationError.new(message)
111
+ end
112
+
113
+ private
114
+ # https://github.com/cldwalker/hirb
115
+ # modified from hirb
116
+ def find_terminal_size(env_name, tput_name, stty_index)
117
+ begin
118
+ if ENV[env_name] =~ /^\d$/
119
+ ENV[env_name].to_i
120
+ elsif (RUBY_PLATFORM =~ /java/ || (!STDIN.tty? && ENV['TERM'])) && command_exists?('tput')
121
+ `tput #{tput_name}`.to_i
122
+ elsif STDIN.tty? && command_exists?('stty')
123
+ `stty size`.scan(/\d+/).map { |s| s.to_i }[stty_index]
124
+ else
125
+ nil
126
+ end
127
+ rescue
128
+ nil
129
+ end
130
+ end
131
+ end
132
+ end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helpers'
2
- require 'choosy/printing/terminal'
2
+ require 'choosy/terminal'
3
3
 
4
- module Choosy::Printing
4
+ module Choosy
5
5
  class TerminalTest
6
6
  include Terminal
7
7
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 4
8
- - 4
9
- version: 0.4.4
8
+ - 5
9
+ version: 0.4.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Gabe McArthur
@@ -98,6 +98,7 @@ files:
98
98
  - lib/choosy/version.rb
99
99
  - lib/choosy/option.rb
100
100
  - lib/choosy/command.rb
101
+ - lib/choosy/terminal.rb
101
102
  - lib/choosy/super_command.rb
102
103
  - lib/choosy/dsl/argument_builder.rb
103
104
  - lib/choosy/dsl/super_command_builder.rb
@@ -111,7 +112,6 @@ files:
111
112
  - lib/choosy/printing/base_printer.rb
112
113
  - lib/choosy/printing/formatting_element.rb
113
114
  - lib/choosy/printing/manpage.rb
114
- - lib/choosy/printing/terminal.rb
115
115
  - lib/choosy/printing/color.rb
116
116
  - lib/choosy/printing/erb_printer.rb
117
117
  - lib/choosy/printing/help_printer.rb
@@ -128,6 +128,7 @@ files:
128
128
  - spec/choosy/argument_spec.rb
129
129
  - spec/choosy/base_command_spec.rb
130
130
  - spec/choosy/version.yml
131
+ - spec/choosy/terminal_spec.rb
131
132
  - spec/choosy/command_spec.rb
132
133
  - spec/choosy/dsl/super_command_builder_spec.rb
133
134
  - spec/choosy/dsl/option_builder_spec.rb
@@ -139,7 +140,6 @@ files:
139
140
  - spec/choosy/super_parser_spec.rb
140
141
  - spec/choosy/verifier_spec.rb
141
142
  - spec/choosy/printing/help_printer_spec.rb
142
- - spec/choosy/printing/terminal_spec.rb
143
143
  - spec/choosy/printing/base_printer_spec.rb
144
144
  - spec/choosy/printing/manpage_printer_spec.rb
145
145
  - spec/choosy/printing/color_spec.rb
@@ -1,84 +0,0 @@
1
- require 'choosy/errors'
2
- require 'choosy/printing/color'
3
-
4
- module Choosy::Printing
5
- module Terminal
6
- DEFAULT_LINE_COUNT = 25
7
- DEFAULT_COLUMN_COUNT = 80
8
-
9
- attr_writer :lines, :columns
10
-
11
- def lines
12
- @lines ||= find_terminal_size('LINES', 'lines', 0) || DEFAULT_LINE_COUNT
13
- end
14
-
15
- def columns
16
- @columns ||= find_terminal_size('COLUMNS', 'cols', 1) || DEFAULT_COLUMN_COUNT
17
- end
18
-
19
- def color
20
- @color ||= Color.new
21
- end
22
-
23
- def pager?
24
- !pager.empty?
25
- end
26
-
27
- def pager
28
- @pager ||= ENV['PAGER'] || ENV['MANPAGER']
29
- return @pager if @pager
30
-
31
- @pager = if command_exists?('less')
32
- 'less -R'
33
- elsif command_exists?('more')
34
- 'more'
35
- else
36
- ''
37
- end
38
- end
39
-
40
- def page(contents, pipe_command=nil)
41
- if pager?
42
- if pipe_command
43
- pipe(contents, "#{pipe_command} | #{pager}")
44
- else
45
- pipe(contents, pager)
46
- end
47
- else
48
- pipe(contents, pipe_command)
49
- end
50
- end
51
-
52
- def pipe(contents, command)
53
- puts contents if command.nil?
54
-
55
- IO.popen(command, 'w') do |f|
56
- f.puts contents
57
- end
58
- end
59
-
60
- # directly from hirb
61
- def command_exists?(command)
62
- ENV['PATH'].split(File::PATH_SEPARATOR).any? {|d| File.exists? File.join(d, command) }
63
- end
64
-
65
- private
66
- # https://github.com/cldwalker/hirb
67
- # modified from hirb
68
- def find_terminal_size(env_name, tput_name, stty_index)
69
- begin
70
- if ENV[env_name] =~ /^\d$/
71
- ENV[env_name].to_i
72
- elsif (RUBY_PLATFORM =~ /java/ || (!STDIN.tty? && ENV['TERM'])) && command_exists?('tput')
73
- `tput #{tput_name}`.to_i
74
- elsif STDIN.tty? && command_exists?('stty')
75
- `stty size`.scan(/\d+/).map { |s| s.to_i }[stty_index]
76
- else
77
- nil
78
- end
79
- rescue
80
- nil
81
- end
82
- end
83
- end
84
- end