pizzazz 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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: