module MultiJson::Options

def default_dump_options

def default_dump_options
  @default_dump_options ||= {}
end

def default_load_options

def default_load_options
  @default_load_options ||= {}
end

def dump_options(*args)

def dump_options(*args)
  get_options :dump_options, *args
end

def dump_options=(options)

def dump_options=(options)
  MultiJson.reset_cached_options!
  @dump_options = options
end

def get_options(ivar, *args)

def get_options(ivar, *args)
  defaults = send("default_#{ivar}")
  return defaults unless instance_variable_defined?("@#{ivar}")
  value = instance_variable_get("@#{ivar}")
  if value.respond_to?(:call) and value.arity
    value.arity == 0 ? value[] : value[*args]
  elsif Hash === value or value.respond_to?(:to_hash)
    value.to_hash
  else
    defaults
  end
end

def load_options(*args)

def load_options(*args)
  get_options :load_options, *args
end

def load_options=(options)

def load_options=(options)
  MultiJson.reset_cached_options!
  @load_options = options
end