# JSON compatibility layer, largely plagarized from yajl-rubyrequire'ffi_yajl'unlessdefined?(FFI_Yajl::Parser)warn"ffi-yajl/json_gem is deprecated, these monkeypatches will be dropped shortly"moduleJSONclassJSONError<StandardError;endunlessdefined?(JSON::JSONError)classGeneratorError<JSONError;endunlessdefined?(JSON::GeneratorError)classParserError<JSONError;endunlessdefined?(JSON::ParserError)defself.generate(obj,opts=nil)opts||={}options_map={}ifopts.has_key?(:indent)options_map[:pretty]=trueoptions_map[:indent]=opts[:indent]endFFI_Yajl::Encoder.encode(obj,options_map)rescueFFI_Yajl::EncodeError=>eraiseJSON::GeneratorError,e.messageenddefself.pretty_generate(obj,opts=nil)opts||={}options_map={}options_map[:pretty]=trueoptions_map[:indent]=opts[:indent]ifopts.has_key?(:indent)FFI_Yajl::Encoder.encode(obj,options_map).chomprescueFFI_Yajl::EncodeError=>eraiseJSON::GeneratorError,e.messageenddefself.dump(obj,io=nil,*args)FFI_Yajl::Encoder.encode(obj,io)rescueFFI_Yajl::EncodeError=>eraiseJSON::GeneratorError,e.messageenddefself.default_options@default_options||={:symbolize_keys=>false}enddefself.parse(str,opts=JSON.default_options)FFI_Yajl::Parser.parse(str,opts)rescueFFI_Yajl::ParseError=>eraiseJSON::ParserError,e.messageenddefself.load(input,*args)FFI_Yajl::Parser.parse(input,default_options)rescueFFI_Yajl::ParseError=>eraiseJSON::ParserError,e.messageendendclassArraydefto_json(*opts,&block)FFI_Yajl::Encoder.encode(self,*opts)endendclassHashdefto_json(*opts,&block)FFI_Yajl::Encoder.encode(self,*opts)endendclassFixnumdefto_json(*opts,&block)FFI_Yajl::Encoder.encode(self,*opts)endendclassFloatdefto_json(*opts,&block)FFI_Yajl::Encoder.encode(self,*opts)endendclassStringdefto_json(*opts,&block)FFI_Yajl::Encoder.encode(self,*opts)endendclassTrueClassdefto_json(*opts,&block)FFI_Yajl::Encoder.encode(self,*opts)endendclassFalseClassdefto_json(*opts,&block)FFI_Yajl::Encoder.encode(self,*opts)endendclassNilClassdefto_json(*opts,&block)FFI_Yajl::Encoder.encode(self,*opts)endendclassDatedefto_json(*opts,&block)FFI_Yajl::Encoder.encode(self,*opts)endendclassTimedefto_json(*opts,&block)FFI_Yajl::Encoder.encode(self,*opts)endendclassDateTimedefto_json(*opts,&block)FFI_Yajl::Encoder.encode(self,*opts)endendmodule::KerneldefJSON(object,opts={})ifobject.respond_to?:to_sJSON.parse(object.to_s,JSON.default_options.merge(opts))elseJSON.generate(object,opts)endendendclassObjectunlessdefined?(ActiveSupport)defto_json(*args,&block)"\"#{to_s}\""endendend