diff options
author | Sam Stephenson <sam@37signals.com> | 2005-12-27 03:11:03 +0000 |
---|---|---|
committer | Sam Stephenson <sam@37signals.com> | 2005-12-27 03:11:03 +0000 |
commit | e567a5eb1afe1ac38f1da37f1c1e3922bbf79d2a (patch) | |
tree | 47baca37670f0ad23d803c2f939199147efe4287 /activesupport/lib/active_support/json/encoders | |
parent | 0b55ce7191b167d67ec7ccc7eb8db2e5fac4f2e1 (diff) | |
download | rails-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.rb | 61 |
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 |