Sha256: df5364823d9b36c43b7bb9b86c17d98bbefb398d898ec7c73d7edbee01182be2

Contents?: true

Size: 1.3 KB

Versions: 1

Compression:

Stored size: 1.3 KB

Contents

require 'multi_json'
require 'rollbar/json/oj'
require 'rollbar/json/default'

begin
  require 'oj'
rescue LoadError
end

module Rollbar
  module JSON
    extend self

    attr_writer :options_module

    def dump(object)
      with_adapter { MultiJson.dump(object, adapter_options) }
    end

    def load(string)
      with_adapter { MultiJson.load(string, adapter_options) }
    end

    def with_adapter(&block)
      MultiJson.with_adapter(detect_multi_json_adapter, &block)
    end

    def detect_multi_json_adapter
      options = {}
      options[:adapter] = :oj if defined?(::Oj)

      MultiJson.current_adapter(options)
    end

    def adapter_options
      options_module.options
    end

    def options_module
      @options_module ||= find_options_module
    end

    def find_options_module
      module_name = multi_json_adapter_module_name

      begin
        const_get(module_name)
      rescue NameError
        Default
      end
    end

    # MultiJson adapters have this name structure:
    # "MultiJson::Adapters::{AdapterModule}"
    #
    # Ex: MultiJson::Adapters::Oj
    # Ex: MultiJson::Adapters::JsonGem
    #
    # In this method we just get the last module name.
    def multi_json_adapter_module_name
      MultiJson.current_adapter.name[/^MultiJson::Adapters::(.*)$/, 1]
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rollbar-2.4.0 lib/rollbar/json.rb