require 'rubygems'
require 'json'
require 'benchmark'
require 'activerecord'

class Time
  JSON_REGEXP = /\A(\d{4})-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)\z/
  JSON_FORMAT = "%Y-%m-%d %H:%M:%S"

  def self.json_create(serialized)
    if serialized['data'] =~ JSON_REGEXP
      Time.utc $1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i
    else
      puts serialized['data']
    end
  end

  def to_json(*args)
    { 'json_class' => self.class.name, 'data' => strftime(JSON_FORMAT) }.to_json(*args)
  end
end

class A < Hash
end

obj = A[
  'name' => 'first name and etc' * 10,
  'joy' => 'lksado0  as90usdlsdfanldsafomfd f dsfjsdadsaf dfs ,dfsodsfn sdfp9df dfsldfsldfs,mnewo9[aends,mndsfaosdnfsad]' * 100,
  'now' => Time.utc(2010,02,11,17,24,19)
]

ser_obj, new_obj = nil, nil

Benchmark.bm do |x|
  x.report 'JSON   ' do
    100.times do
      ser_obj = obj.to_json
    end
    10000.times do
      new_obj = JSON.parse(ser_obj)
    end
    puts "Bad bad" unless new_obj == obj
  end

  x.report 'Marshal' do
    100.times do
      ser_obj = [Marshal.dump(Hash[obj])].pack('m*')
    end
    10000.times do
      new_obj = Marshal.load(ser_obj.unpack('m')[0])
    end
    raise "Bad bad" unless new_obj == obj
  end
end

#http://github.com/zena/property

