Sha256: dc0ca8810ed546d3b42e98283859cc01d24a94d7a7f0877b3b58905bd9604228

Contents?: true

Size: 1.42 KB

Versions: 17

Compression:

Stored size: 1.42 KB

Contents

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

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

      if LanguageSupport.const_defined?(Rollbar::JSON, module_name, false)
        LanguageSupport.const_get(Rollbar::JSON, module_name, false)
      else
        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
      detect_multi_json_adapter.name[/^MultiJson::Adapters::(.*)$/, 1]
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
rollbar-2.19.2 lib/rollbar/json.rb
rollbar-2.19.1 lib/rollbar/json.rb
rollbar-2.19.0 lib/rollbar/json.rb
rollbar-2.18.2 lib/rollbar/json.rb
rollbar-2.18.0 lib/rollbar/json.rb
rollbar-2.17.0 lib/rollbar/json.rb
rollbar-2.16.4 lib/rollbar/json.rb
rollbar-2.16.3 lib/rollbar/json.rb
rollbar-2.16.2 lib/rollbar/json.rb
rollbar-2.16.0 lib/rollbar/json.rb
rollbar-2.15.6 lib/rollbar/json.rb
rollbar-2.15.5 lib/rollbar/json.rb
rollbar-2.15.4 lib/rollbar/json.rb
rollbar-2.15.3 lib/rollbar/json.rb
rollbar-2.15.2 lib/rollbar/json.rb
rollbar-2.15.1 lib/rollbar/json.rb
rollbar-2.15.0 lib/rollbar/json.rb