aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/json/encoders
diff options
context:
space:
mode:
authorSam Stephenson <sam@37signals.com>2005-12-27 03:11:03 +0000
committerSam Stephenson <sam@37signals.com>2005-12-27 03:11:03 +0000
commite567a5eb1afe1ac38f1da37f1c1e3922bbf79d2a (patch)
tree47baca37670f0ad23d803c2f939199147efe4287 /activesupport/lib/active_support/json/encoders
parent0b55ce7191b167d67ec7ccc7eb8db2e5fac4f2e1 (diff)
downloadrails-e567a5eb1afe1ac38f1da37f1c1e3922bbf79d2a.tar.gz
rails-e567a5eb1afe1ac38f1da37f1c1e3922bbf79d2a.tar.bz2
rails-e567a5eb1afe1ac38f1da37f1c1e3922bbf79d2a.zip
Add ActiveSupport::JSON and Object#to_json for converting Ruby objects to JSON strings
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3356 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activesupport/lib/active_support/json/encoders')
-rw-r--r--activesupport/lib/active_support/json/encoders/core.rb61
1 files changed, 61 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/json/encoders/core.rb b/activesupport/lib/active_support/json/encoders/core.rb
new file mode 100644
index 0000000000..003c938be4
--- /dev/null
+++ b/activesupport/lib/active_support/json/encoders/core.rb
@@ -0,0 +1,61 @@
+module ActiveSupport
+ module JSON #:nodoc:
+ module Encoders
+ define_encoder Object do |object|
+ object.instance_values.to_json
+ end
+
+ define_encoder TrueClass do
+ 'true'
+ end
+
+ define_encoder FalseClass do
+ 'false'
+ end
+
+ define_encoder NilClass do
+ 'null'
+ end
+
+ define_encoder String do |string|
+ returning value = '"' do
+ string.each_char do |char|
+ value << case
+ when char == "\010": '\b'
+ when char == "\f": '\f'
+ when char == "\n": '\n'
+ when char == "\r": '\r'
+ when char == "\t": '\t'
+ when char == '"': '\"'
+ when char == '\\': '\\\\'
+ when char.length > 1: "\\u#{'%04x' % char.unpack('U').first}"
+ else; char
+ end
+ end
+ value << '"'
+ end
+ end
+
+ define_encoder Numeric do |numeric|
+ numeric.to_s
+ end
+
+ define_encoder Symbol do |symbol|
+ symbol.to_s.to_json
+ end
+
+ define_encoder Enumerable do |enumerable|
+ "[#{enumerable.map { |value| value.to_json } * ', '}]"
+ end
+
+ define_encoder Hash do |hash|
+ returning result = '{' do
+ result << hash.map do |pair|
+ pair.map { |value| value.to_json } * ': '
+ end * ', '
+ result << '}'
+ end
+ end
+ end
+ end
+end