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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4a5abdcb3ab344b17998a03f36ffe90ab00d8e14
4
- data.tar.gz: 0ac871174b20d066203df09e91b0d8731bb047a8
3
+ metadata.gz: 0e02cd57798e3c118c87002a9752f03997178b32
4
+ data.tar.gz: 50b693e72a290357a01276a67b35963d84b9c8d9
5
5
  SHA512:
6
- metadata.gz: d1243df8be7888e63821a31aa864b6fb6d4b49c99213b11a939d3e29964c3c4f465223d330b995b42bd2b0c1c040126cd9cd02bf279d118ee5a481d0b3ecdd7b
7
- data.tar.gz: 4fa41a7dc86bd142ea9c03a739d80147ed2fce3a4cad9eb478f4cb5a2cb4d163eec99e1bc9ff674bf34bf0e45168502dbecff09f879f6eec017cebf75318ac20
6
+ metadata.gz: c8dc4e76f1867e50470ba4574932b21757fc980f33524e95073e4db140290c4981d7f580c33ed073b7e5fd1df7290617c4d95c9de52c5b8c3ea696779d11b56b
7
+ data.tar.gz: 990143e7286b36a6498ad5890af316d002476aed00bb796eff640aec3ed4f1349b0399f5f517f30470be606147ef2d50b83e3a9b85b5d31274174208fe18d3fd
@@ -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 1.9.2, 2.0.0, 2.2.4, JRuby 1.7.2 (1.9 mode), and Rubinius 2.0.0 (1.9 mode).
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
@@ -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
- @prefix + lines.join("\n#{@prefix}")
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
- %Q{<span class="string">"#{truncate(::ERB::Util.h(object.gsub("\n", '\n')))}"</span>}
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
- "{\n"
84
+ %Q[<span class="control curly-bracket opening">{</span>\n]
75
85
  end
76
86
 
77
87
  rows = []
78
- object.keys.collect(&:to_s).sort.each do |key|
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
- rows << %Q{#{tab}<span class="string key">"#{key}"</span>: #{node(value)}}
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(",\n")
101
+ string << rows.join(%Q{<span class="control comma">,</span>\n})
83
102
 
84
103
  unless omit_container
85
104
  @indent -= 1
86
- string << "\n#{tab}}"
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
- "[\n"
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) ? "{ #{@array_omission} }" : @array_omission)
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(",\n")
129
+ string << rows.join(%Q{<span class="control comma">,</span>\n})
111
130
 
112
131
  unless omit_container
113
132
  @indent -= 1
114
- string << "\n#{tab}]"
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
@@ -1,3 +1,3 @@
1
1
  module Pizzazz
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -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
- <span class="string key">"foo"</span>: <span class="string">"bar"</span>
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
- <span class="string key">"message"</span>: <span class="string">"hello\nworld"</span>
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
- ||||<span class="string key">"foo"</span>: <span class="string">"bar"</span>
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
- ** <span class="string key">"foo"</span>: <span class="string">"bar"</span>
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>: <span class="string">"bar"</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
- <span class="string key">"numbers"</span>: [
47
- <span class="number">1</span>,
48
- <span class="number">2</span>,
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
- <span class="string key">"numbers"</span>: [
56
- <span class="number">1</span>,
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
- <span class="string key">"wooden"</span>: <span class="string">"base"</span>
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
- <span class="string key">"wooden"</span>: <span class="string">"baseball!"</span>
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.2.1
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-14 00:00:00.000000000 Z
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: