formatador 0.2.5 → 0.3.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.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZmFhYzcyNjZlYTkzM2RmZTBhYmY1OWJmN2ViOWUyMzYyNmIyYzdiMw==
5
- data.tar.gz: !binary |-
6
- MGRkYmM5ZGM0OTliYjI4NjEwY2M3NDZmYWI2NWYwOTZjM2ZkOWExMw==
2
+ SHA256:
3
+ metadata.gz: 371ea2974db0d03751e1a559433313ef4f7e7c2c46cabba41f004dba91632065
4
+ data.tar.gz: 05ee97c7103cb73f5a6ee26e135a828f2c8d738937409a933c379f66b0f2cd76
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- Y2VhYjM0NzZkYmExYmQ5OTMwZjI5ZmZhYTllNTBmNzdlMDEzNDk4NWVmZTVj
10
- MmU0ZjEwZTVhOTdlZWU3ZGYyOTE5YTc3YTA4Y2MxNDM3MDQyYmY0ZjMzNmY3
11
- YTIxNDY1MDMwM2ZiOGI1MzQ3ODJiYWRlZmNiMzIyOWFmNzBiZDY=
12
- data.tar.gz: !binary |-
13
- YzcyNzFhYTk2ODI2YjUzZTlhZTAxNWI0MTYzZmJlNGY2MjU2Y2M5MTAxY2Fl
14
- OTViZGRlMWVlODgwMWNmOWExNTZlYWY5YzFhNjc4Yzg3Y2IxZDQ5YjJjN2Iw
15
- OWUyYjI5ZjAyNDg3Mzk0YmVlMDA5MmU0ZDU3ZmMxOTUyYzRjNjI=
6
+ metadata.gz: dbec7dda7093e08b69ff2372fbbff210cc7d6bde6f2d03e6ca5bf4ed03ff0e75ed7791c4a53812f7f1804c11ed801fbad3acadc71dd48a769977f42cde522ddc
7
+ data.tar.gz: 54c7902a6d39b65d929c02f9f66c490f27753c3aec04d27c3921b33f8d3a49bc9524965d52eaac0fdd14a7892f0797d38f0e5c758d6c55dd026d465517160e4b
@@ -1,101 +1,129 @@
1
- = formatador
1
+ # formatador
2
2
 
3
3
  STDOUT text formatting
4
4
 
5
- == Quick and dirty
5
+ [![Build Status](https://travis-ci.org/geemus/formatador.svg)](http://travis-ci.org/geemus/formatador)
6
+
7
+ ## Quick and dirty
6
8
 
7
9
  You can call class methods to print out single lines like this:
8
10
 
9
- Formatador.display_line('Hello World')
11
+ ```ruby
12
+ Formatador.display_line('Hello World')
13
+ ```
10
14
 
11
15
  You use tags, similar to html, to set formatting options:
12
16
 
13
- Formatador.display_line('[green]Hello World[/]')
17
+ ```ruby
18
+ Formatador.display_line('[green]Hello World[/]')
19
+ ```
14
20
 
15
- [/] resets everything to normal, colors are supported and [_color_] sets the background color.
21
+ `[/]` resets everything to normal, colors are supported and `[_color_]` sets the background color.
16
22
 
17
- == Standard options
23
+ ## Standard options
18
24
 
19
25
  * format - and adds color codes if STDOUT.tty? is true
20
26
  * display - calls format on the input and prints it
21
27
  * display_line - calls display, but adds on a newline (\n)
22
28
  * redisplay - Displays text, prepended with \r which will overwrite the last existing line
23
29
 
24
- == Extensions
30
+ ## Extensions
25
31
 
26
32
  * display_table: takes an array of hashes. Each hash is a row, with the keys being the headers and values being the data. An optional second argument can specify which headers/columns to include and in what order they should appear.
27
33
  * display_compact_table: Same as display_table, execpt that split lines are not drawn by default in the body of the table. If you need a split line, put a :split constant in the body array.
28
34
  * redisplay_progressbar: takes the current and total values as its first two arguments and redisplays a progressbar (until current = total and then it display_lines). An optional third argument represents the start time and will add an elapsed time counter.
29
35
 
30
- === Progress Bar examples
31
-
32
- total = 1000
33
- progress = ProgressBar.new(total)
34
- 1000.times do
35
- progress.increment
36
- end
37
-
38
- 978/1000 |************************************************* |
39
-
40
- # Change the color of the bar
41
-
42
- total = 1000
43
- progress = ProgressBar.new(total, :color => "light_blue")
44
- 1000.times do
45
- progress.increment
46
- end
47
-
48
- # Change the color of a completed progress bar
49
-
50
- total = 1000
51
- progress = ProgressBar.new(total) { |b| b.opts[:color] = "green" }
52
- 1000.times do
53
- progress.increment
54
- end
55
-
56
- === Table examples
57
-
58
- table_data = [{:name => "Joe", :food => "Burger"}, {:name => "Bill", :food => "French fries"}]
59
- Formatador.display_table(table_data)
60
-
61
- +------+--------------+
62
- | name | food |
63
- +------+--------------+
64
- | Joe | Burger |
65
- +------+--------------+
66
- | Bill | French fries |
67
- +------+--------------+
68
-
69
- table_data = [
70
- {:name => "Joe", :meal => {:main_dish => "Burger", :drink => "water"}},
71
- {:name => "Bill", :meal => {:main_dish => "Chicken", :drink => "soda"}}
72
- ]
73
- Formatador.display_table(table_data, [:name, :"meal.drink"])
36
+ ### Progress Bar examples
37
+
38
+ ```ruby
39
+ total = 1000
40
+ progress = Formatador::ProgressBar.new(total)
41
+
42
+ 1000.times do
43
+ progress.increment
44
+ end
45
+
46
+ #=> 978/1000 |************************************************* |
47
+
48
+ # Change the color of the bar
49
+ total = 1000
50
+ progress = Formatador::ProgressBar.new(total, :color => "light_blue")
51
+
52
+ 1000.times do
53
+ progress.increment
54
+ end
55
+
56
+ # Change the color of a completed progress bar
57
+ total = 1000
58
+ progress = Formatador::ProgressBar.new(total) { |b| b.opts[:color] = "green" }
59
+
60
+ 1000.times do
61
+ progress.increment
62
+ end
63
+ ```
64
+
65
+ ### Table examples
66
+
67
+ ```ruby
68
+ table_data = [
69
+ { :name => "Joe", :food => "Burger" },
70
+ { :name => "Bill", :food => "French fries" }
71
+ ]
72
+ Formatador.display_table(table_data)
73
+
74
+ #=> +------+--------------+
75
+ # | name | food |
76
+ # +------+--------------+
77
+ # | Joe | Burger |
78
+ # +------+--------------+
79
+ # | Bill | French fries |
80
+ # +------+--------------+
81
+
82
+ table_data = [
83
+ {
84
+ :name => "Joe",
85
+ :meal => {
86
+ :main_dish => "Burger",
87
+ :drink => "water"
88
+ }
89
+ },
90
+ {
91
+ :name => "Bill",
92
+ :meal => {
93
+ :main_dish => "Chicken",
94
+ :drink => "soda"
95
+ }
96
+ }
97
+ ]
98
+ Formatador.display_table(table_data, [:name, :"meal.drink"])
74
99
 
75
- +------+------------+
76
- | name | meal.drink |
77
- +------+------------+
78
- | Joe | water |
79
- +------+------------+
80
- | Bill | soda |
81
- +------+------------+
100
+ #=> +------+------------+
101
+ # | name | meal.drink |
102
+ # +------+------------+
103
+ # | Joe | water |
104
+ # +------+------------+
105
+ # | Bill | soda |
106
+ # +------+------------+
107
+ ```
82
108
 
83
- == Indentation
109
+ ## Indentation
84
110
 
85
111
  By initializing a formatador object you can keep track of indentation:
86
112
 
87
- formatador = Formatador.new
88
- formatador.display_line('one level of indentation')
89
- formatador.indent {
90
- formatador.display_line('two levels of indentation')
91
- }
92
- formatador.display_line('one level of indentation')
113
+ ```ruby
114
+ formatador = Formatador.new
115
+ formatador.display_line('one level of indentation')
116
+ formatador.indent {
117
+ formatador.display_line('two levels of indentation')
118
+ }
119
+ formatador.display_line('one level of indentation')
120
+ ```
93
121
 
94
- == Copyright
122
+ ## Copyright
95
123
 
96
124
  (The MIT License)
97
125
 
98
- Copyright (c) 2009 {geemus (Wesley Beary)}[http://github.com/geemus]
126
+ Copyright (c) 2015 [geemus (Wesley Beary)](http://github.com/geemus)
99
127
 
100
128
  Permission is hereby granted, free of charge, to any person obtaining
101
129
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
@@ -21,10 +21,6 @@ def date
21
21
  Date.today.to_s
22
22
  end
23
23
 
24
- def rubyforge_project
25
- name
26
- end
27
-
28
24
  def gemspec_file
29
25
  "#{name}.gemspec"
30
26
  end
@@ -56,7 +52,7 @@ task :coverage do
56
52
  sh "open coverage/index.html"
57
53
  end
58
54
 
59
- require 'rake/rdoctask'
55
+ require 'rdoc/task'
60
56
  Rake::RDocTask.new do |rdoc|
61
57
  rdoc.rdoc_dir = 'rdoc'
62
58
  rdoc.title = "#{name} #{version}"
@@ -111,8 +107,6 @@ task :gemspec => :validate do
111
107
  replace_header(head, :name)
112
108
  replace_header(head, :version)
113
109
  replace_header(head, :date)
114
- #comment this out if your rubyforge_project has a different name
115
- replace_header(head, :rubyforge_project)
116
110
 
117
111
  # determine file list from git ls-files
118
112
  files = `git ls-files`.
data/changelog.txt CHANGED
@@ -1,3 +1,28 @@
1
+ v0.3.0 06/17/21
2
+ ===============
3
+
4
+ add travis badge to readme
5
+ change readme to md
6
+ fix markdown readme
7
+ fix travis badge
8
+ monkey-patch StringIO to try and fix jruby build
9
+ override tty? for jruby build
10
+ fix copyright statement
11
+ use unicode.width instead of string.length
12
+ remove unicode from requirements, use only if loaded
13
+ display datum who's value is a FalseClass
14
+ more colors with syntax-specific code/length limitations
15
+ better code visualization in readme
16
+ update readme
17
+ remove broken rubinius build from CI
18
+ fix length method to detect multibyte char width
19
+ fix test for table with multi byte chars
20
+ support multibyte characters
21
+ update CI to 2.2.7, 2.3.4, and 2.4.1
22
+ drop rubyforge_project from gemspec and rakefile
23
+ change github reference to https
24
+ change readme.rdoc to readme.md in gemspec
25
+
1
26
  v0.2.5 05/23/14
2
27
  ===============
3
28
 
data/formatador.gemspec CHANGED
@@ -13,9 +13,8 @@ Gem::Specification.new do |s|
13
13
  ## If your rubyforge_project name is different, then edit it and comment out
14
14
  ## the sub! line in the Rakefile
15
15
  s.name = 'formatador'
16
- s.version = '0.2.5'
17
- s.date = '2014-05-23'
18
- s.rubyforge_project = 'formatador'
16
+ s.version = '0.3.0'
17
+ s.date = '2021-06-17'
19
18
 
20
19
  ## Make sure your summary is short. The description may be as long
21
20
  ## as you like.
@@ -27,7 +26,8 @@ Gem::Specification.new do |s|
27
26
  ## a custom homepage, consider using your GitHub URL or the like.
28
27
  s.authors = ["geemus (Wesley Beary)"]
29
28
  s.email = 'geemus@gmail.com'
30
- s.homepage = "http://github.com/geemus/#{s.name}"
29
+ s.homepage = "https://github.com/geemus/#{s.name}"
30
+ s.license = 'MIT'
31
31
 
32
32
  ## This gets added to the $LOAD_PATH so that 'lib/NAME.rb' can be required as
33
33
  ## require 'NAME.rb' or'/lib/NAME/file.rb' can be as require 'NAME/file.rb'
@@ -44,7 +44,7 @@ Gem::Specification.new do |s|
44
44
  ## Specify any RDoc options here. You'll want to add your README and
45
45
  ## LICENSE files to the extra_rdoc_files list.
46
46
  s.rdoc_options = ["--charset=UTF-8"]
47
- s.extra_rdoc_files = %w[README.rdoc]
47
+ s.extra_rdoc_files = %w[README.md]
48
48
 
49
49
  ## List your runtime dependencies here. Runtime dependencies are those
50
50
  ## that are needed for an end user to actually USE your code.
@@ -53,6 +53,7 @@ Gem::Specification.new do |s|
53
53
  ## List your development dependencies here. Development dependencies are
54
54
  ## those that are only needed during development
55
55
  s.add_development_dependency('rake')
56
+ s.add_development_dependency('rdoc')
56
57
  s.add_development_dependency('shindo')
57
58
 
58
59
  ## Leave this section as-is. It will be automatically generated from the
@@ -64,7 +65,7 @@ Gem::Specification.new do |s|
64
65
  CONTRIBUTORS.md
65
66
  Gemfile
66
67
  LICENSE.md
67
- README.rdoc
68
+ README.md
68
69
  Rakefile
69
70
  changelog.txt
70
71
  formatador.gemspec
data/lib/formatador.rb CHANGED
@@ -3,7 +3,7 @@ require File.join(File.dirname(__FILE__), 'formatador', 'progressbar')
3
3
 
4
4
  class Formatador
5
5
 
6
- VERSION = '0.2.5'
6
+ VERSION = '0.3.0'
7
7
 
8
8
  STYLES = {
9
9
  :"\/" => "0",
@@ -62,7 +62,7 @@ class Formatador
62
62
 
63
63
  def display(string = '')
64
64
  print(parse("[indent]#{string}"))
65
- STDOUT.flush
65
+ $stdout.flush
66
66
  nil
67
67
  end
68
68
 
@@ -80,7 +80,7 @@ class Formatador
80
80
  end
81
81
 
82
82
  def parse(string)
83
- if STDOUT.tty?
83
+ if $stdout.tty?
84
84
  string.gsub(PARSE_REGEX) { "\e[#{STYLES[$1.to_sym]}m" }.gsub(INDENT_REGEX) { indentation }
85
85
  else
86
86
  strip(string)
@@ -80,7 +80,14 @@ class Formatador
80
80
  private
81
81
 
82
82
  def length(value)
83
- value.to_s.gsub(PARSE_REGEX, '').length
83
+ if Module.const_defined?(:Unicode)
84
+ Unicode.width(value.to_s.gsub(PARSE_REGEX, ''))
85
+ else
86
+ value.to_s.gsub(PARSE_REGEX, '').chars.reduce(0) { |sum, char| sum += char.bytesize > 1 ? 2 : 1 }
87
+ end
88
+
89
+ rescue NotImplementedError
90
+ value.to_s.gsub(PARSE_REGEX, '').chars.reduce(0) { |sum, char| sum += char.bytesize > 1 ? 2 : 1 }
84
91
  end
85
92
 
86
93
  def calculate_datum(header, hash)
@@ -91,7 +98,7 @@ class Formatador
91
98
  datum = d[split] || d[split.to_sym] || ''
92
99
  end
93
100
  else
94
- datum = hash[header] || ''
101
+ datum = hash.fetch(header, '')
95
102
  end
96
103
  datum
97
104
  end
data/tests/table_tests.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # coding: utf-8
1
2
  Shindo.tests("Formatador: tables") do
2
3
 
3
4
  output = <<-OUTPUT
@@ -93,4 +94,22 @@ output = Formatador.parse(output)
93
94
  end
94
95
  end
95
96
 
96
- end
97
+
98
+ output = <<-OUTPUT
99
+ +------+
100
+ | [bold]a[/] |
101
+ +------+
102
+ | 1 |
103
+ +------+
104
+ | 震度 |
105
+ +------+
106
+ OUTPUT
107
+ output = Formatador.parse(output)
108
+
109
+ tests("#display_table([{:a => 1}, {:a => 2}])").returns(output) do
110
+ capture_stdout do
111
+ Formatador.display_table([{:a => 1}, {:a => "震度"}])
112
+ end
113
+ end
114
+
115
+ end
@@ -5,6 +5,18 @@ require 'rubygems'
5
5
  require 'shindo'
6
6
  require 'stringio'
7
7
 
8
+ class IO
9
+ def tty?
10
+ true
11
+ end
12
+ end
13
+
14
+ class StringIO
15
+ def tty?
16
+ true
17
+ end
18
+ end
19
+
8
20
  def capture_stdout
9
21
  old_stdout = $stdout
10
22
  new_stdout = StringIO.new
metadata CHANGED
@@ -1,41 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: formatador
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - geemus (Wesley Beary)
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-23 00:00:00.000000000 Z
11
+ date: 2021-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rdoc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
25
39
  - !ruby/object:Gem::Version
26
40
  version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: shindo
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - ! '>='
45
+ - - ">="
32
46
  - !ruby/object:Gem::Version
33
47
  version: '0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - ! '>='
52
+ - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  description: STDOUT text formatting
@@ -43,13 +57,13 @@ email: geemus@gmail.com
43
57
  executables: []
44
58
  extensions: []
45
59
  extra_rdoc_files:
46
- - README.rdoc
60
+ - README.md
47
61
  files:
48
62
  - CONTRIBUTING.md
49
63
  - CONTRIBUTORS.md
50
64
  - Gemfile
51
65
  - LICENSE.md
52
- - README.rdoc
66
+ - README.md
53
67
  - Rakefile
54
68
  - changelog.txt
55
69
  - formatador.gemspec
@@ -59,29 +73,28 @@ files:
59
73
  - tests/basic_tests.rb
60
74
  - tests/table_tests.rb
61
75
  - tests/tests_helper.rb
62
- homepage: http://github.com/geemus/formatador
63
- licenses: []
76
+ homepage: https://github.com/geemus/formatador
77
+ licenses:
78
+ - MIT
64
79
  metadata: {}
65
- post_install_message:
80
+ post_install_message:
66
81
  rdoc_options:
67
- - --charset=UTF-8
82
+ - "--charset=UTF-8"
68
83
  require_paths:
69
84
  - lib
70
85
  required_ruby_version: !ruby/object:Gem::Requirement
71
86
  requirements:
72
- - - ! '>='
87
+ - - ">="
73
88
  - !ruby/object:Gem::Version
74
89
  version: '0'
75
90
  required_rubygems_version: !ruby/object:Gem::Requirement
76
91
  requirements:
77
- - - ! '>='
92
+ - - ">="
78
93
  - !ruby/object:Gem::Version
79
94
  version: '0'
80
95
  requirements: []
81
- rubyforge_project: formatador
82
- rubygems_version: 2.2.2
83
- signing_key:
96
+ rubygems_version: 3.2.15
97
+ signing_key:
84
98
  specification_version: 2
85
99
  summary: Ruby STDOUT text formatting
86
100
  test_files: []
87
- has_rdoc: