class Kiev::JSON

Constants

FAIL_JSON
NO_JSON
OJ_OPTIONS
OJ_OPTIONS_2
OJ_OPTIONS_3

Attributes

engine[RW]

Public Class Methods

generate(obj) click to toggle source
# File lib/kiev/json.rb, line 51
def generate(obj)
  if engine == :oj
    oj_generate(obj)
  elsif engine == :activesupport
    activesupport_generate(obj)
  elsif engine == :json
    json_generate(obj)
  else
    NO_JSON.dup
  end
end
logstash(entry) click to toggle source
# File lib/kiev/json.rb, line 63
def logstash(entry)
  entry.each do |key, value|
    entry[key] = if value.respond_to?(:iso8601)
      value.iso8601(3)
    elsif !scalar?(value)
      generate(value)
    elsif value.is_a?(String) && value.encoding != Encoding::UTF_8
      value.encode(
        Encoding::UTF_8,
        invalid: :replace,
        undef: :replace,
        replace: "?"
      )
    elsif value.respond_to?(:infinite?) && value.infinite?
      nil
    else
      value
    end
  end

  generate(entry) << "\n"
end

Private Class Methods

activesupport_generate(obj) click to toggle source
# File lib/kiev/json.rb, line 105
def activesupport_generate(obj)
  ActiveSupport::JSON.encode(obj)
rescue Exception
  FAIL_JSON.dup
end
json_generate(obj) click to toggle source
# File lib/kiev/json.rb, line 111
def json_generate(obj)
  ::JSON.generate(obj, quirks_mode: true)
rescue Exception
  FAIL_JSON.dup
end
oj_generate(obj) click to toggle source
# File lib/kiev/json.rb, line 99
def oj_generate(obj)
  Oj.dump(obj, OJ_OPTIONS)
rescue Exception
  FAIL_JSON.dup
end
scalar?(value) click to toggle source

Arrays excluded here because Elastic indexes very picky: if you have array of mixed things it will complain

# File lib/kiev/json.rb, line 90
def scalar?(value)
  value.is_a?(String) ||
    value.is_a?(Numeric) ||
    value.is_a?(Symbol) ||
    value.is_a?(TrueClass) ||
    value.is_a?(FalseClass) ||
    value.is_a?(NilClass)
end