sparkr 0.3.2 → 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/README.md +41 -16
- data/bin/sparkr +15 -5
- data/examples/issues.rb +7 -0
- data/examples/issues_colored.rb +24 -0
- data/lib/sparkr.rb +1 -1
- data/lib/sparkr/cli.rb +36 -1
- data/lib/sparkr/sparkline.rb +6 -12
- data/lib/sparkr/version.rb +1 -1
- data/test/sparkr/cli_test.rb +13 -2
- data/test/sparkr/sparkline_test.rb +2 -2
- data/test/sparkr_test.rb +10 -11
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a2b803ac74d70b8ad2eaf16e843476e2d9be2e6b
|
4
|
+
data.tar.gz: de4f7507f9f15f93464d88c12cb0747338a12895
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 593c4038a8bf0fc0dbeee096d5f8ae725034c4a94ce30dd00fccae9cd169842519208d79a1a45fa64a17cd51493db2f9e65ed90443705666099c02e3d55c5c93
|
7
|
+
data.tar.gz: 5466b0f309cab197763c9e085c30b72185f907e377a18dd8a01c9c845e6ce208ad76bc516f6e757dd09f1bb0b1b6785346e8e8b5f9b2f4cc785a7bddae17c988
|
data/README.md
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
-
# Sparkr
|
2
|
-
|
3
|
-
[![Build Status](https://travis-ci.org/rrrene/sparkr.png?branch=master)](https://travis-ci.org/rrrene/sparkr)
|
1
|
+
# Sparkr [![Build Status](https://travis-ci.org/rrrene/sparkr.png?branch=master)](https://travis-ci.org/rrrene/sparkr) [![Code Climate](https://codeclimate.com/github/rrrene/sparkr.png)](https://codeclimate.com/github/rrrene/sparkr)
|
4
2
|
|
5
3
|
Sparkr is a port of [spark](https://github.com/holman/spark) for Ruby.
|
6
4
|
|
7
|
-
It
|
5
|
+
It lets you create ASCII sparklines for your Ruby CLIs: ▁▂▃▅▇
|
6
|
+
|
8
7
|
|
9
8
|
|
10
9
|
## Installation
|
@@ -22,6 +21,7 @@ Or install it yourself as:
|
|
22
21
|
$ gem install sparkr
|
23
22
|
|
24
23
|
|
24
|
+
|
25
25
|
## Usage
|
26
26
|
|
27
27
|
### Shell
|
@@ -37,7 +37,7 @@ you would expect:
|
|
37
37
|
|
38
38
|
The real reason for this port:
|
39
39
|
|
40
|
-
Sparkr.sparkline([0,30,55,80,33,150])
|
40
|
+
Sparkr.sparkline([0, 30, 55, 80, 33, 150])
|
41
41
|
# => "▁▂▃▅▂▇"
|
42
42
|
|
43
43
|
|
@@ -45,9 +45,16 @@ The real reason for this port:
|
|
45
45
|
|
46
46
|
Let's say you have your list of open and closed issues.
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
|
48
|
+
```ruby
|
49
|
+
require 'sparkr'
|
50
|
+
|
51
|
+
open_issue_count = 3
|
52
|
+
closed_issue_count = 13
|
53
|
+
|
54
|
+
list = [open_issue_count, closed_issue_count]
|
55
|
+
puts "Issues: " + Sparkr.sparkline(list)
|
56
|
+
# => "Issues: ▁█"
|
57
|
+
```
|
51
58
|
|
52
59
|
But now you want to format the sparkline so that the open issues are red
|
53
60
|
and the closed ones are green (to quickly see how you are doing).
|
@@ -56,19 +63,34 @@ Let's further suppose you use a gem that adds a `#color` method to `String`
|
|
56
63
|
for ANSI coloring, like
|
57
64
|
[Term::ANSIColor](https://github.com/flori/term-ansicolor).
|
58
65
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
66
|
+
```ruby
|
67
|
+
require 'sparkr'
|
68
|
+
require 'term/ansicolor'
|
69
|
+
|
70
|
+
class String
|
71
|
+
include Term::ANSIColor
|
72
|
+
end
|
73
|
+
|
74
|
+
open_issue_count = 3
|
75
|
+
closed_issue_count = 13
|
76
|
+
|
77
|
+
list = [open_issue_count, closed_issue_count]
|
78
|
+
sparkline = Sparkr.sparkline(list) do |tick, count, index|
|
79
|
+
if index == 0
|
80
|
+
tick.color(:red)
|
81
|
+
else
|
82
|
+
tick.color(:green)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
puts "Issues: " + sparkline
|
86
|
+
# => "Issues: ▁█" (colored, trust me)
|
87
|
+
```
|
67
88
|
|
68
89
|
To see how this looks live and in full colour, take a look at
|
69
90
|
[Inch](http://rrrene.github.io/inch).
|
70
91
|
|
71
92
|
|
93
|
+
|
72
94
|
## Contributing
|
73
95
|
|
74
96
|
1. Fork it ( http://github.com/rrrene/sparkr/fork )
|
@@ -78,16 +100,19 @@ To see how this looks live and in full colour, take a look at
|
|
78
100
|
5. Create new Pull Request
|
79
101
|
|
80
102
|
|
103
|
+
|
81
104
|
## Author
|
82
105
|
|
83
106
|
René Föhring (@rrrene)
|
84
107
|
|
85
108
|
|
109
|
+
|
86
110
|
## Credits
|
87
111
|
|
88
112
|
Sparkr would not exist without Zach Holman's [spark](https://github.com/holman/spark).
|
89
113
|
|
90
114
|
|
115
|
+
|
91
116
|
## License
|
92
117
|
|
93
118
|
Sparkr is released under the MIT License. See the LICENSE.txt file for further
|
data/bin/sparkr
CHANGED
@@ -1,10 +1,20 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
path
|
4
|
-
|
5
|
-
path =
|
3
|
+
# @return [String] the path of sparkr's lib directory
|
4
|
+
def find_lib_path
|
5
|
+
path = __FILE__
|
6
|
+
while File.symlink?(path)
|
7
|
+
path = File.expand_path(File.readlink(path), File.dirname(path))
|
8
|
+
end
|
9
|
+
File.join(File.dirname(File.expand_path(path)), '..', 'lib')
|
6
10
|
end
|
7
|
-
|
11
|
+
|
12
|
+
# @return [Array<String>] the arguments passed or piped via the command-line
|
13
|
+
def cli_arguments
|
14
|
+
STDIN.tty? ? ARGV : STDIN.read.split(/\s+/)
|
15
|
+
end
|
16
|
+
|
17
|
+
$LOAD_PATH.unshift(find_lib_path)
|
8
18
|
|
9
19
|
require 'sparkr'
|
10
|
-
Sparkr::CLI.run(*
|
20
|
+
Sparkr::CLI.run(*cli_arguments)
|
data/examples/issues.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'sparkr'
|
2
|
+
#
|
3
|
+
# You need Term::ANSIColor for this example:
|
4
|
+
#
|
5
|
+
# $ gem install term-ansicolor
|
6
|
+
#
|
7
|
+
require 'term/ansicolor'
|
8
|
+
|
9
|
+
class String
|
10
|
+
include Term::ANSIColor
|
11
|
+
end
|
12
|
+
|
13
|
+
open_issue_count = 3
|
14
|
+
closed_issue_count = 13
|
15
|
+
|
16
|
+
list = [open_issue_count, closed_issue_count]
|
17
|
+
sparkline = Sparkr.sparkline(list) do |tick, count, index|
|
18
|
+
if index == 0
|
19
|
+
tick.color(:red)
|
20
|
+
else
|
21
|
+
tick.color(:green)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
puts "Issues: " + sparkline
|
data/lib/sparkr.rb
CHANGED
@@ -32,7 +32,7 @@ module Sparkr
|
|
32
32
|
# line
|
33
33
|
# # => "▁█" (colored, trust me)
|
34
34
|
#
|
35
|
-
# @param numbers [Array<String,Fixnum,Float>] the numbers to be rendered
|
35
|
+
# @param numbers [Array<String, Fixnum, Float>] the numbers to be rendered
|
36
36
|
# @param &block [Proc] optional, can be used to format the rendered string
|
37
37
|
#
|
38
38
|
# @return [String]
|
data/lib/sparkr/cli.rb
CHANGED
@@ -2,8 +2,43 @@
|
|
2
2
|
|
3
3
|
module Sparkr
|
4
4
|
class CLI
|
5
|
+
# Helper method to run an instance with the given +args+
|
6
|
+
#
|
7
|
+
# @see #run
|
8
|
+
# @return [CLI] the instance that ran
|
5
9
|
def self.run(*args)
|
6
|
-
|
10
|
+
instance = new
|
11
|
+
instance.run(*args)
|
12
|
+
instance
|
13
|
+
end
|
14
|
+
|
15
|
+
# Runs sparkr with the given +args+
|
16
|
+
# @return [void]
|
17
|
+
def run(*args)
|
18
|
+
if args.empty?
|
19
|
+
puts help
|
20
|
+
else
|
21
|
+
sparkline = Sparkline.new(args.map(&:to_f))
|
22
|
+
puts sparkline.to_s
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
# Returns usage information
|
29
|
+
def help
|
30
|
+
"""
|
31
|
+
USAGE:
|
32
|
+
sparkr [-h|--help] VALUE,...
|
33
|
+
|
34
|
+
EXAMPLES:
|
35
|
+
sparkr 1 5 22 13 53
|
36
|
+
▁▁▃▂█
|
37
|
+
sparkr 0,30,55,80,33,150
|
38
|
+
▁▂▃▄▂█
|
39
|
+
echo 9 13 5 17 1 | sparkr
|
40
|
+
▄▆▂█▁
|
41
|
+
"""
|
7
42
|
end
|
8
43
|
end
|
9
44
|
end
|
data/lib/sparkr/sparkline.rb
CHANGED
@@ -46,23 +46,17 @@ module Sparkr
|
|
46
46
|
# # => "▁█" (colored, which you can't see)
|
47
47
|
#
|
48
48
|
# @return [Sparkline] itself
|
49
|
-
def format
|
50
|
-
|
51
|
-
|
52
|
-
if block.arity == 2
|
53
|
-
new_ticks << yield(tick, @original_numbers[index])
|
54
|
-
elsif block.arity == 3
|
55
|
-
new_ticks << yield(tick, @original_numbers[index], index)
|
56
|
-
end
|
49
|
+
def format
|
50
|
+
@ticks = @ticks.map.with_index do |tick, index|
|
51
|
+
yield tick, @original_numbers[index], index
|
57
52
|
end
|
58
|
-
@ticks = new_ticks
|
59
53
|
self
|
60
54
|
end
|
61
55
|
|
62
56
|
# Returns the normalized equivalent of a given list
|
63
57
|
#
|
64
|
-
# normalize_numbers([3,4,7])
|
65
|
-
# # => [0,1,4]
|
58
|
+
# normalize_numbers([3, 4, 7])
|
59
|
+
# # => [0, 1, 4]
|
66
60
|
#
|
67
61
|
# @return [Fixnum] the normalized equivalent of the given +_numbers+
|
68
62
|
def normalize_numbers(_numbers)
|
@@ -90,7 +84,7 @@ module Sparkr
|
|
90
84
|
TICKS.size - 1
|
91
85
|
end
|
92
86
|
|
93
|
-
# @param sep [String,nil] separator used to join the bars of the sparkline
|
87
|
+
# @param sep [String, nil] separator used to join the bars of the sparkline
|
94
88
|
# @return [String] the sparkline, seperated by +sep+ (defaults to '')
|
95
89
|
def to_s(sep = nil)
|
96
90
|
@ticks.join(sep || DEFAULT_SEPARATOR)
|
data/lib/sparkr/version.rb
CHANGED
data/test/sparkr/cli_test.rb
CHANGED
@@ -3,12 +3,23 @@
|
|
3
3
|
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
4
4
|
|
5
5
|
describe ::Sparkr::CLI do
|
6
|
-
it "should
|
6
|
+
it ".run should work with array of numbers as strings" do
|
7
|
+
string_numbers = %w(1 2 3 4 100 5 10 20 50 300)
|
7
8
|
out, err = capture_io do
|
8
|
-
::Sparkr::CLI.run(
|
9
|
+
::Sparkr::CLI.run(*string_numbers)
|
9
10
|
end
|
10
11
|
refute out.empty?, "there should be some output"
|
11
12
|
assert err.empty?, "there should be no errors"
|
12
13
|
assert_equal "▁▁▁▁▃▁▁▁▂█\n", out
|
13
14
|
end
|
15
|
+
|
16
|
+
it ".run should print usage information if args are missing" do
|
17
|
+
string_numbers = %w()
|
18
|
+
out, err = capture_io do
|
19
|
+
::Sparkr::CLI.run(*string_numbers)
|
20
|
+
end
|
21
|
+
refute out.empty?, "there should be some output"
|
22
|
+
assert err.empty?, "there should be no errors"
|
23
|
+
assert_match /USAGE\:/, out
|
24
|
+
end
|
14
25
|
end
|
@@ -10,7 +10,7 @@ describe ::Sparkr::Sparkline do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
it "format should work with arity == 2" do
|
13
|
-
sparkline = Sparkr::Sparkline.new([5.5,20])
|
13
|
+
sparkline = Sparkr::Sparkline.new([5.5, 20])
|
14
14
|
sparkline.format do |tick, number|
|
15
15
|
if number < 6.0
|
16
16
|
tick = tick + "-"
|
@@ -22,7 +22,7 @@ describe ::Sparkr::Sparkline do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
it "format should work with arity == 3" do
|
25
|
-
sparkline = Sparkr::Sparkline.new([5.5,20])
|
25
|
+
sparkline = Sparkr::Sparkline.new([5.5, 20])
|
26
26
|
sparkline.format do |tick, number, index|
|
27
27
|
if index == 1
|
28
28
|
tick = tick + "-"
|
data/test/sparkr_test.rb
CHANGED
@@ -4,23 +4,22 @@ require File.expand_path(File.dirname(__FILE__) + '/test_helper')
|
|
4
4
|
|
5
5
|
describe ::Sparkr do
|
6
6
|
it "should find work like holman/spark" do
|
7
|
-
assert_sparkline '▁▂▃▄▅▆▇█', [1,2,3,4,5,6,7,8]
|
8
|
-
assert_sparkline '▁▂█▅▂', [1,5,22,13,5]
|
9
|
-
assert_sparkline '▁█', [5.5,20]
|
10
|
-
assert_sparkline '▁▁▁▁▃▁▁▁▂█', [1,2,3,4,100,5,10,20,50,300]
|
11
|
-
assert_sparkline '▁▄█', [1,50,100]
|
12
|
-
assert_sparkline '▁▃█', [2,4,8]
|
13
|
-
assert_sparkline '▁▂▃▄▂█', [0,30,55,80,33,150]
|
14
|
-
assert_sparkline '▁▂▄▆█', [1,2,3,4,5]
|
7
|
+
assert_sparkline '▁▂▃▄▅▆▇█', [1, 2, 3, 4, 5, 6, 7, 8]
|
8
|
+
assert_sparkline '▁▂█▅▂', [1, 5, 22, 13, 5]
|
9
|
+
assert_sparkline '▁█', [5.5, 20]
|
10
|
+
assert_sparkline '▁▁▁▁▃▁▁▁▂█', [1, 2, 3, 4, 100, 5, 10, 20, 50, 300]
|
11
|
+
assert_sparkline '▁▄█', [1, 50, 100]
|
12
|
+
assert_sparkline '▁▃█', [2, 4, 8]
|
13
|
+
assert_sparkline '▁▂▃▄▂█', [0, 30, 55, 80, 33, 150]
|
14
|
+
assert_sparkline '▁▂▄▆█', [1, 2, 3, 4, 5]
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should find work with equal numbers" do
|
18
18
|
assert_sparkline '▁▁', [10, 10]
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
21
|
it ".sparkline should work with arity == 2" do
|
23
|
-
sparkline = Sparkr.sparkline([5.5,20]) do |tick, number|
|
22
|
+
sparkline = Sparkr.sparkline([5.5, 20]) do |tick, number|
|
24
23
|
if number < 6.0
|
25
24
|
tick = tick + "-"
|
26
25
|
else
|
@@ -31,7 +30,7 @@ describe ::Sparkr do
|
|
31
30
|
end
|
32
31
|
|
33
32
|
it ".sparkline should work with arity == 3" do
|
34
|
-
sparkline = Sparkr.sparkline([5.5,20]) do |tick, number, index|
|
33
|
+
sparkline = Sparkr.sparkline([5.5, 20]) do |tick, number, index|
|
35
34
|
if index == 1
|
36
35
|
tick = tick + "-"
|
37
36
|
else
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sparkr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- René Föhring
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -55,6 +55,8 @@ files:
|
|
55
55
|
- README.md
|
56
56
|
- Rakefile
|
57
57
|
- bin/sparkr
|
58
|
+
- examples/issues.rb
|
59
|
+
- examples/issues_colored.rb
|
58
60
|
- lib/sparkr.rb
|
59
61
|
- lib/sparkr/cli.rb
|
60
62
|
- lib/sparkr/sparkline.rb
|
@@ -84,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
86
|
version: '0'
|
85
87
|
requirements: []
|
86
88
|
rubyforge_project:
|
87
|
-
rubygems_version: 2.0.
|
89
|
+
rubygems_version: 2.0.3
|
88
90
|
signing_key:
|
89
91
|
specification_version: 4
|
90
92
|
summary: '["ASCII", "Sparklines", "in", "Ruby"]'
|