jason 0.4.0 → 0.5.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.
data/README.md CHANGED
@@ -47,6 +47,12 @@ You can configure the output format of the JSON:
47
47
  `:compact` will remove any unnecessary whitespace in the JSON while `:pretty`
48
48
  will indent the result JSON so that it looks, well, pretty.
49
49
 
50
+ You can add output listeners to jason so that you can run arbitrary code upon
51
+ the generated JSON. For example, if you'd like to log all of the JSON responses
52
+ in Rails:
53
+
54
+ Jason.output_listeners << lambda { |json| Rails.logger.info(json) }
55
+
50
56
  ## Usage with Rails ##
51
57
 
52
58
  Name your view template with the extension `jason`. Everything else is the same.
@@ -6,6 +6,7 @@ require 'strscan'
6
6
  module Jason
7
7
  class << self
8
8
  attr_writer :output_format
9
+ attr_writer :output_listeners
9
10
 
10
11
  # The output format of the JSON.
11
12
  #
@@ -16,6 +17,18 @@ module Jason
16
17
  def output_format
17
18
  @output_format ||= :compact
18
19
  end
20
+
21
+ # The output listeners for jason.
22
+ #
23
+ # All objects in this array are sent #call with the generated JSON whenever
24
+ # jason processes a buffer. This can be useful for logging output like so:
25
+ #
26
+ # Jason.output_listeners << lambda { |json| Rails.logger.info(json) }
27
+ #
28
+ # @returns [<#call>]
29
+ def output_listeners
30
+ @output_listeners ||= []
31
+ end
19
32
  end
20
33
 
21
34
  # Render a template.
@@ -48,19 +61,24 @@ module Jason
48
61
 
49
62
  # Process a rendered buffer.
50
63
  #
51
- # Removes any trailing commas and compresses the buffer.
64
+ # Removes any trailing commas and compresses the buffer. After generating the
65
+ # JSON, it calls each one of the output listeners with the generated JSON.
52
66
  #
53
- # Usually, you should not have to call this method.
67
+ # You should not have to directly call this method.
54
68
  #
55
69
  # @param [String] buffer
56
70
  def self.process(buffer)
57
71
  obj = JSON.load(remove_trailing_commas(buffer))
58
72
 
59
73
  if output_format == :pretty
60
- JSON.pretty_generate(obj)
74
+ json = JSON.pretty_generate(obj)
61
75
  else
62
- JSON.generate(obj)
76
+ json = JSON.generate(obj)
63
77
  end
78
+
79
+ output_listeners.each { |listener| listener.call(json) }
80
+
81
+ json
64
82
  end
65
83
 
66
84
  private
@@ -1,3 +1,3 @@
1
1
  module Jason
2
- VERSION = '0.4.0'
2
+ VERSION = '0.5.0'
3
3
  end
@@ -85,4 +85,19 @@ EOF
85
85
  assert_equal :pretty, Jason.output_format
86
86
  assert_equal "{\n \"foo\": [\n \"bar\"\n ]\n}", Jason.process('{"foo":["bar"]}')
87
87
  end
88
+
89
+ test '.output_listeners' do
90
+ assert_equal [], Jason.output_listeners
91
+
92
+ listener = mock
93
+ listener.expects(:call).with('{"foo":["bar"]}')
94
+ Jason.output_listeners << listener
95
+
96
+ Jason.process('{"foo":["bar"]}')
97
+ end
98
+
99
+ def teardown
100
+ Jason.output_format = :compact
101
+ Jason.output_listeners = []
102
+ end
88
103
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: jason
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.4.0
5
+ version: 0.5.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Alexander Kern
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-06 00:00:00 -07:00
13
+ date: 2011-06-07 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency