diff options
| author | Charlie Sharpsteen | 2011-11-10 12:21:35 -0800 |
|---|---|---|
| committer | Charlie Sharpsteen | 2011-11-13 12:14:55 -0800 |
| commit | 605dedb816f0ed2f7e3d49138b869686c8401e6d (patch) | |
| tree | cfc8b58c9f497fff9df9b206081255538a3b5c1d /Library/Homebrew/vendor/multi_json/engines | |
| parent | f5c9333a0d42e86ac82fedfeefd89a1f18772629 (diff) | |
| download | homebrew-605dedb816f0ed2f7e3d49138b869686c8401e6d.tar.bz2 | |
Vendor Library: multi-json 1.0.3
Multi-JSON is a library that provides encode/decode support for casting Ruby
objects to JSON strings and back again. This version of the library has been
tested against ruby versions 1.8.6 and later.
Having a JSON encoder/decoder in the toolbox helps now that the GitHub API only
returns results in JSON format.
Diffstat (limited to 'Library/Homebrew/vendor/multi_json/engines')
4 files changed, 108 insertions, 0 deletions
diff --git a/Library/Homebrew/vendor/multi_json/engines/json_gem.rb b/Library/Homebrew/vendor/multi_json/engines/json_gem.rb new file mode 100644 index 000000000..dd2b1d499 --- /dev/null +++ b/Library/Homebrew/vendor/multi_json/engines/json_gem.rb @@ -0,0 +1,21 @@ +require 'json' unless defined?(::JSON) + +module MultiJson + module Engines + # Use the JSON gem to encode/decode. + class JsonGem + ParseError = ::JSON::ParserError + + def self.decode(string, options = {}) #:nodoc: + opts = {} + opts[:symbolize_names] = options[:symbolize_keys] + string = string.read if string.respond_to?(:read) + ::JSON.parse(string, opts) + end + + def self.encode(object) #:nodoc: + object.to_json + end + end + end +end diff --git a/Library/Homebrew/vendor/multi_json/engines/json_pure.rb b/Library/Homebrew/vendor/multi_json/engines/json_pure.rb new file mode 100644 index 000000000..f89da0171 --- /dev/null +++ b/Library/Homebrew/vendor/multi_json/engines/json_pure.rb @@ -0,0 +1,21 @@ +require 'json/pure' unless defined?(::JSON) + +module MultiJson + module Engines + # Use JSON pure to encode/decode. + class JsonPure + ParseError = ::JSON::ParserError + + def self.decode(string, options = {}) #:nodoc: + opts = {} + opts[:symbolize_names] = options[:symbolize_keys] + string = string.read if string.respond_to?(:read) + ::JSON.parse(string, opts) + end + + def self.encode(object) #:nodoc: + object.to_json + end + end + end +end diff --git a/Library/Homebrew/vendor/multi_json/engines/ok_json.rb b/Library/Homebrew/vendor/multi_json/engines/ok_json.rb new file mode 100644 index 000000000..c06f80123 --- /dev/null +++ b/Library/Homebrew/vendor/multi_json/engines/ok_json.rb @@ -0,0 +1,48 @@ +require "multi_json/vendor/ok_json" unless defined?(::OkJson) + +module MultiJson + module Engines + class OkJson + ParseError = ::OkJson::Error + + def self.decode(string, options = {}) #:nodoc: + string = string.read if string.respond_to?(:read) + result = ::OkJson.decode(string) + options[:symbolize_keys] ? symbolize_keys(result) : result + end + + def self.encode(object) #:nodoc: + ::OkJson.valenc(stringify_keys(object)) + end + + def self.symbolize_keys(object) #:nodoc: + modify_keys(object) do |key| + key.is_a?(String) ? key.to_sym : key + end + end + + def self.stringify_keys(object) #:nodoc: + modify_keys(object) do |key| + key.is_a?(Symbol) ? key.to_s : key + end + end + + def self.modify_keys(object, &modifier) #:nodoc: + case object + when Array + object.map do |value| + modify_keys(value, &modifier) + end + when Hash + object.inject({}) do |result, (key, value)| + new_key = modifier.call(key) + new_value = modify_keys(value, &modifier) + result.merge! new_key => new_value + end + else + object + end + end + end + end +end diff --git a/Library/Homebrew/vendor/multi_json/engines/yajl.rb b/Library/Homebrew/vendor/multi_json/engines/yajl.rb new file mode 100644 index 000000000..8dfe4b1aa --- /dev/null +++ b/Library/Homebrew/vendor/multi_json/engines/yajl.rb @@ -0,0 +1,18 @@ +require 'yajl' unless defined?(Yajl) + +module MultiJson + module Engines + # Use the Yajl-Ruby library to encode/decode. + class Yajl + ParseError = ::Yajl::ParseError + + def self.decode(string, options = {}) #:nodoc: + ::Yajl::Parser.new(:symbolize_keys => options[:symbolize_keys]).parse(string) + end + + def self.encode(object) #:nodoc: + ::Yajl::Encoder.new.encode(object) + end + end + end +end |
