pizzazz 0.2.1 → 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 +4 -4
- data/Readme.markdown +6 -1
- data/lib/pizzazz/colorer.rb +40 -14
- data/lib/pizzazz/version.rb +1 -1
- data/test/units/colorer_test.rb +60 -34
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e02cd57798e3c118c87002a9752f03997178b32
|
4
|
+
data.tar.gz: 50b693e72a290357a01276a67b35963d84b9c8d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8dc4e76f1867e50470ba4574932b21757fc980f33524e95073e4db140290c4981d7f580c33ed073b7e5fd1df7290617c4d95c9de52c5b8c3ea696779d11b56b
|
7
|
+
data.tar.gz: 990143e7286b36a6498ad5890af316d002476aed00bb796eff640aec3ed4f1349b0399f5f517f30470be606147ef2d50b83e3a9b85b5d31274174208fe18d3fd
|
data/Readme.markdown
CHANGED
@@ -48,6 +48,8 @@ Pizzazz.ify(all_of_the_things, array_limit: 'etc', value_omission: '... (continu
|
|
48
48
|
|
49
49
|
You can also supply `omit_root_container` and `prefix`, a string that's added to the beginning of each line of the output, is really nice for doing custom things. Both options can be used independently as well.
|
50
50
|
|
51
|
+
By defauly, hash keys are sorted alphabetically. You can disable this with `sort_keys: false`.
|
52
|
+
|
51
53
|
|
52
54
|
### HTML
|
53
55
|
|
@@ -66,6 +68,9 @@ If you want it wrapped in `<pre class="pizzazz">` (and call `html_safe` if possi
|
|
66
68
|
Pizzazz.ify_html(object)
|
67
69
|
```
|
68
70
|
|
71
|
+
By default, Pizzazz will convert any links starting with `http` to `<a>` tags. You can disable this by passing `detect_links: false`.
|
72
|
+
|
73
|
+
|
69
74
|
### Stylesheet
|
70
75
|
|
71
76
|
If you're using the asset pipeline, you can simply require `pizzazz` to get my stylesheet. Be sure your `<pre>` has the `pizzazz` class. If you use `ify_html` it will automatically do this.
|
@@ -73,7 +78,7 @@ If you're using the asset pipeline, you can simply require `pizzazz` to get my s
|
|
73
78
|
|
74
79
|
## Supported Ruby Versions
|
75
80
|
|
76
|
-
Pizzazz is tested under
|
81
|
+
Pizzazz is tested under 2.0.0, 2.2.4, JRuby 1.7.2 (1.9 mode), and Rubinius 2.0.0 (1.9 mode).
|
77
82
|
|
78
83
|
|
79
84
|
## Contributing
|
data/lib/pizzazz/colorer.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
|
3
3
|
require 'erb'
|
4
|
+
require 'uri'
|
4
5
|
|
5
6
|
module Pizzazz
|
6
7
|
class Colorer
|
@@ -15,6 +16,8 @@ module Pizzazz
|
|
15
16
|
@tab = options[:tab] || ' '
|
16
17
|
@prefix = options[:prefix]
|
17
18
|
@omit_root_container = options[:omit_root_container] || false
|
19
|
+
@detect_links = options[:detect_links] == nil ? true : options[:detect_links]
|
20
|
+
@sort_keys = options[:sort_keys] == nil ? true : options[:sort_keys]
|
18
21
|
end
|
19
22
|
|
20
23
|
def ify
|
@@ -25,14 +28,17 @@ module Pizzazz
|
|
25
28
|
return output unless @prefix
|
26
29
|
|
27
30
|
# Add prefix
|
31
|
+
prefix = %Q{<span class="prefix">#{@prefix}</span>}
|
28
32
|
lines = output.split("\n")
|
29
|
-
|
33
|
+
prefix + lines.join("\n#{prefix}")
|
30
34
|
end
|
31
35
|
|
32
36
|
private
|
33
37
|
|
38
|
+
URL_PATTERN = /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,})([\/\w \.-]*)*\/?$/i
|
39
|
+
|
34
40
|
def tab
|
35
|
-
@tab * @indent
|
41
|
+
%Q{<span class="control tab">#{@tab * @indent}</span>}
|
36
42
|
end
|
37
43
|
|
38
44
|
def truncate(string)
|
@@ -47,7 +53,11 @@ module Pizzazz
|
|
47
53
|
|
48
54
|
case object
|
49
55
|
when String
|
50
|
-
|
56
|
+
if @detect_links && is_link?(object)
|
57
|
+
%Q{<span class="string link"><a href="#{object}" rel="external"><span class="quote opening">"</span><span class="text">#{truncate(::ERB::Util.h(object.gsub("\n", '\n')))}</span><span class="quote closing">"</span></a></span>}
|
58
|
+
else
|
59
|
+
%Q{<span class="string"><span class="quote opening">"</span>#{truncate(::ERB::Util.h(object.gsub("\n", '\n')))}<span class="quote closing">"</span></span>}
|
60
|
+
end
|
51
61
|
|
52
62
|
when Time
|
53
63
|
%Q{<span class="string">#{object.to_json}</span>}
|
@@ -65,36 +75,45 @@ module Pizzazz
|
|
65
75
|
%Q{<span class="number">#{object}</span>}
|
66
76
|
|
67
77
|
when Hash
|
68
|
-
return omit_container ? '' : '{}' if object.length == 0
|
78
|
+
return omit_container ? '' : '<span class="control curly-bracket opening">{</span><span class="control curly-bracket closing">}</span>' if object.length == 0
|
69
79
|
|
70
80
|
string = if omit_container
|
71
81
|
''
|
72
82
|
else
|
73
83
|
@indent += 1
|
74
|
-
"{
|
84
|
+
%Q[<span class="control curly-bracket opening">{</span>\n]
|
75
85
|
end
|
76
86
|
|
77
87
|
rows = []
|
78
|
-
object.keys.collect(&:to_s)
|
88
|
+
keys = object.keys.collect(&:to_s)
|
89
|
+
|
90
|
+
keys.sort! if @sort_keys
|
91
|
+
|
92
|
+
keys.each do |key|
|
79
93
|
value = (object[key] != nil ? object[key] : object[key.to_sym])
|
80
|
-
|
94
|
+
row = %Q{<span class="string key"><span class="control quote opening">"</span>#{key}<span class="control quote closing">"</span></span><span class="control colon">:</span> #{node(value)}}
|
95
|
+
|
96
|
+
# Hopefully most keys will be sane since there are probably JSON
|
97
|
+
row = %Q{<span class="key-#{key}">#{row}</span>}
|
98
|
+
|
99
|
+
rows << tab + row
|
81
100
|
end
|
82
|
-
string << rows.join("
|
101
|
+
string << rows.join(%Q{<span class="control comma">,</span>\n})
|
83
102
|
|
84
103
|
unless omit_container
|
85
104
|
@indent -= 1
|
86
|
-
string <<
|
105
|
+
string << %Q[\n#{tab}<span class="control curley-bracket closing">}</span>]
|
87
106
|
end
|
88
107
|
|
89
108
|
string
|
90
109
|
|
91
110
|
when Array
|
92
|
-
return omit_container ? '' : '[]' if object.length == 0
|
111
|
+
return omit_container ? '' : '<span class="control square-bracket opening">[</span><span class="control square-bracket closing">]</span>' if object.length == 0
|
93
112
|
string = if omit_container
|
94
113
|
''
|
95
114
|
else
|
96
115
|
@indent += 1
|
97
|
-
"[
|
116
|
+
%Q{<span class="control square-bracket opening">[</span>\n}
|
98
117
|
end
|
99
118
|
|
100
119
|
rows = []
|
@@ -104,18 +123,25 @@ module Pizzazz
|
|
104
123
|
end
|
105
124
|
|
106
125
|
if @array_limit > 0 and object.length > @array_limit
|
107
|
-
rows << tab + (object[0].is_a?(Hash) ? "{
|
126
|
+
rows << tab + (object[0].is_a?(Hash) ? %Q[<span class="control curley-bracket opening">{</span> <span class="array-omission">#{@array_omission}</span> <span class="control curley-bracket closing">}</span>] : %Q{<span class="array-omission">#{@array_omission}</span>})
|
108
127
|
end
|
109
128
|
|
110
|
-
string << rows.join("
|
129
|
+
string << rows.join(%Q{<span class="control comma">,</span>\n})
|
111
130
|
|
112
131
|
unless omit_container
|
113
132
|
@indent -= 1
|
114
|
-
string <<
|
133
|
+
string << %Q{\n#{tab}<span class="control square-bracket closing">]</span>}
|
115
134
|
end
|
116
135
|
|
117
136
|
string
|
118
137
|
end
|
119
138
|
end
|
139
|
+
|
140
|
+
def is_link?(string)
|
141
|
+
scheme = URI.parse(string).scheme
|
142
|
+
scheme == 'http' || scheme == 'https'
|
143
|
+
rescue
|
144
|
+
false
|
145
|
+
end
|
120
146
|
end
|
121
147
|
end
|
data/lib/pizzazz/version.rb
CHANGED
data/test/units/colorer_test.rb
CHANGED
@@ -5,69 +5,95 @@ require 'test_helper'
|
|
5
5
|
class TestColorer < Pizzazz::TestCase
|
6
6
|
def test_that_it_colors_hashes
|
7
7
|
colored = Pizzazz.ify({:foo => 'bar'})
|
8
|
-
assert_equal colored, %q{{
|
9
|
-
|
10
|
-
}}
|
8
|
+
assert_equal colored, %q{<span class="control curly-bracket opening">{</span>
|
9
|
+
<span class="control tab"> </span><span class="key-foo"><span class="string key"><span class="control quote opening">"</span>foo<span class="control quote closing">"</span></span><span class="control colon">:</span> <span class="string"><span class="quote opening">"</span>bar<span class="quote closing">"</span></span></span>
|
10
|
+
<span class="control tab"></span><span class="control curley-bracket closing">}</span>}
|
11
11
|
end
|
12
12
|
|
13
13
|
def test_new_lines
|
14
14
|
colored = Pizzazz.ify({:message => "hello\nworld"})
|
15
|
-
assert_equal colored, %q{{
|
16
|
-
|
17
|
-
}}
|
15
|
+
assert_equal colored, %q{<span class="control curly-bracket opening">{</span>
|
16
|
+
<span class="control tab"> </span><span class="key-message"><span class="string key"><span class="control quote opening">"</span>message<span class="control quote closing">"</span></span><span class="control colon">:</span> <span class="string"><span class="quote opening">"</span>hello\nworld<span class="quote closing">"</span></span></span>
|
17
|
+
<span class="control tab"></span><span class="control curley-bracket closing">}</span>}
|
18
18
|
end
|
19
19
|
|
20
20
|
def test_tabs
|
21
21
|
colored = Pizzazz.ify({:foo => 'bar'}, tab: '||||')
|
22
|
-
assert_equal colored, %q{{
|
23
|
-
|
24
|
-
}}
|
22
|
+
assert_equal colored, %q{<span class="control curly-bracket opening">{</span>
|
23
|
+
<span class="control tab">||||</span><span class="key-foo"><span class="string key"><span class="control quote opening">"</span>foo<span class="control quote closing">"</span></span><span class="control colon">:</span> <span class="string"><span class="quote opening">"</span>bar<span class="quote closing">"</span></span></span>
|
24
|
+
<span class="control tab"></span><span class="control curley-bracket closing">}</span>}
|
25
25
|
end
|
26
26
|
|
27
27
|
def test_prefix
|
28
28
|
colored = Pizzazz.ify({:foo => 'bar'}, prefix: '**')
|
29
|
-
assert_equal colored, %q{
|
30
|
-
|
31
|
-
|
29
|
+
assert_equal colored, %q{<span class="prefix">**</span><span class="control curly-bracket opening">{</span>
|
30
|
+
<span class="prefix">**</span><span class="control tab"> </span><span class="key-foo"><span class="string key"><span class="control quote opening">"</span>foo<span class="control quote closing">"</span></span><span class="control colon">:</span> <span class="string"><span class="quote opening">"</span>bar<span class="quote closing">"</span></span></span>
|
31
|
+
<span class="prefix">**</span><span class="control tab"></span><span class="control curley-bracket closing">}</span>}
|
32
32
|
end
|
33
33
|
|
34
34
|
def test_omit_root_container
|
35
35
|
colored = Pizzazz.ify({:foo => 'bar'}, omit_root_container: true)
|
36
|
-
assert_equal colored, %q{<span class="string key">"foo"</span
|
36
|
+
assert_equal colored, %q{<span class="control tab"></span><span class="key-foo"><span class="string key"><span class="control quote opening">"</span>foo<span class="control quote closing">"</span></span><span class="control colon">:</span> <span class="string"><span class="quote opening">"</span>bar<span class="quote closing">"</span></span></span>}
|
37
37
|
|
38
38
|
colored = Pizzazz.ify([1, 2], omit_root_container: true)
|
39
|
-
assert_equal colored, %q{<span class="number">1</span
|
40
|
-
<span class="number">2</span>}
|
39
|
+
assert_equal colored, %q{<span class="control tab"></span><span class="number">1</span><span class="control comma">,</span>
|
40
|
+
<span class="control tab"></span><span class="number">2</span>}
|
41
41
|
end
|
42
42
|
|
43
43
|
def test_that_it_truncates_arrays
|
44
44
|
colored = Pizzazz.ify({:numbers => [1, 2, 3]}, :array_limit => 2)
|
45
|
-
assert_equal colored, %q{{
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
]
|
51
|
-
}}
|
45
|
+
assert_equal colored, %q{<span class="control curly-bracket opening">{</span>
|
46
|
+
<span class="control tab"> </span><span class="key-numbers"><span class="string key"><span class="control quote opening">"</span>numbers<span class="control quote closing">"</span></span><span class="control colon">:</span> <span class="control square-bracket opening">[</span>
|
47
|
+
<span class="control tab"> </span><span class="number">1</span><span class="control comma">,</span>
|
48
|
+
<span class="control tab"> </span><span class="number">2</span><span class="control comma">,</span>
|
49
|
+
<span class="control tab"> </span><span class="array-omission">…</span>
|
50
|
+
<span class="control tab"> </span><span class="control square-bracket closing">]</span></span>
|
51
|
+
<span class="control tab"></span><span class="control curley-bracket closing">}</span>}
|
52
52
|
|
53
53
|
colored = Pizzazz.ify({:numbers => [1, 2, 3]}, :array_limit => 1, :array_omission => 'hello')
|
54
|
-
assert_equal colored, %q{{
|
55
|
-
|
56
|
-
|
57
|
-
hello
|
58
|
-
]
|
59
|
-
}}
|
54
|
+
assert_equal colored, %q{<span class="control curly-bracket opening">{</span>
|
55
|
+
<span class="control tab"> </span><span class="key-numbers"><span class="string key"><span class="control quote opening">"</span>numbers<span class="control quote closing">"</span></span><span class="control colon">:</span> <span class="control square-bracket opening">[</span>
|
56
|
+
<span class="control tab"> </span><span class="number">1</span><span class="control comma">,</span>
|
57
|
+
<span class="control tab"> </span><span class="array-omission">hello</span>
|
58
|
+
<span class="control tab"> </span><span class="control square-bracket closing">]</span></span>
|
59
|
+
<span class="control tab"></span><span class="control curley-bracket closing">}</span>}
|
60
60
|
end
|
61
61
|
|
62
62
|
def test_that_it_truncates_values
|
63
63
|
colored = Pizzazz.ify({:wooden => 'baseball bat'}, :value_limit => 5)
|
64
|
-
assert_equal colored, %q{{
|
65
|
-
|
66
|
-
}}
|
64
|
+
assert_equal colored, %q{<span class="control curly-bracket opening">{</span>
|
65
|
+
<span class="control tab"> </span><span class="key-wooden"><span class="string key"><span class="control quote opening">"</span>wooden<span class="control quote closing">"</span></span><span class="control colon">:</span> <span class="string"><span class="quote opening">"</span>base…<span class="quote closing">"</span></span></span>
|
66
|
+
<span class="control tab"></span><span class="control curley-bracket closing">}</span>}
|
67
67
|
|
68
68
|
colored = Pizzazz.ify({:wooden => 'baseball bat'}, :value_limit => 9, :value_omission => '!')
|
69
|
-
assert_equal colored, %q{{
|
70
|
-
|
71
|
-
}}
|
69
|
+
assert_equal colored, %q{<span class="control curly-bracket opening">{</span>
|
70
|
+
<span class="control tab"> </span><span class="key-wooden"><span class="string key"><span class="control quote opening">"</span>wooden<span class="control quote closing">"</span></span><span class="control colon">:</span> <span class="string"><span class="quote opening">"</span>baseball!<span class="quote closing">"</span></span></span>
|
71
|
+
<span class="control tab"></span><span class="control curley-bracket closing">}</span>}
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_link
|
75
|
+
colored = Pizzazz.ify({:website => 'http://soff.es'})
|
76
|
+
assert_equal colored, %q{<span class="control curly-bracket opening">{</span>
|
77
|
+
<span class="control tab"> </span><span class="key-website"><span class="string key"><span class="control quote opening">"</span>website<span class="control quote closing">"</span></span><span class="control colon">:</span> <span class="string link"><a href="http://soff.es" rel="external"><span class="quote opening">"</span><span class="text">http://soff.es</span><span class="quote closing">"</span></a></span></span>
|
78
|
+
<span class="control tab"></span><span class="control curley-bracket closing">}</span>}
|
79
|
+
|
80
|
+
colored = Pizzazz.ify({:website => 'http://soff.es'}, :detect_links => false)
|
81
|
+
assert_equal colored, %q{<span class="control curly-bracket opening">{</span>
|
82
|
+
<span class="control tab"> </span><span class="key-website"><span class="string key"><span class="control quote opening">"</span>website<span class="control quote closing">"</span></span><span class="control colon">:</span> <span class="string"><span class="quote opening">"</span>http://soff.es<span class="quote closing">"</span></span></span>
|
83
|
+
<span class="control tab"></span><span class="control curley-bracket closing">}</span>}
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_sort_keys
|
87
|
+
colored = Pizzazz.ify({:b => 'foo', :a => 'bar'})
|
88
|
+
assert_equal colored, %q{<span class="control curly-bracket opening">{</span>
|
89
|
+
<span class="control tab"> </span><span class="key-a"><span class="string key"><span class="control quote opening">"</span>a<span class="control quote closing">"</span></span><span class="control colon">:</span> <span class="string"><span class="quote opening">"</span>bar<span class="quote closing">"</span></span></span><span class="control comma">,</span>
|
90
|
+
<span class="control tab"> </span><span class="key-b"><span class="string key"><span class="control quote opening">"</span>b<span class="control quote closing">"</span></span><span class="control colon">:</span> <span class="string"><span class="quote opening">"</span>foo<span class="quote closing">"</span></span></span>
|
91
|
+
<span class="control tab"></span><span class="control curley-bracket closing">}</span>}
|
92
|
+
|
93
|
+
colored = Pizzazz.ify({:b => 'foo', :a => 'bar'}, :sort_keys => false)
|
94
|
+
assert_equal colored, %q{<span class="control curly-bracket opening">{</span>
|
95
|
+
<span class="control tab"> </span><span class="key-b"><span class="string key"><span class="control quote opening">"</span>b<span class="control quote closing">"</span></span><span class="control colon">:</span> <span class="string"><span class="quote opening">"</span>foo<span class="quote closing">"</span></span></span><span class="control comma">,</span>
|
96
|
+
<span class="control tab"> </span><span class="key-a"><span class="string key"><span class="control quote opening">"</span>a<span class="control quote closing">"</span></span><span class="control colon">:</span> <span class="string"><span class="quote opening">"</span>bar<span class="quote closing">"</span></span></span>
|
97
|
+
<span class="control tab"></span><span class="control curley-bracket closing">}</span>}
|
72
98
|
end
|
73
99
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pizzazz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Soffes
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Add some pizzazz to your documentation
|
14
14
|
email:
|