Class: Kiev::JSON

Inherits:
Object
  • Object
show all
Defined in:
lib/kiev/json.rb,
lib/kiev/json.rb

Constant Summary collapse

OJ_OPTIONS_3 =
{
  mode: :rails,
  use_as_json: true,
  use_to_json: true
}
OJ_OPTIONS_2 =

do not do freeze for Oj3 and Rails 4.1

{
  float_precision: 16,
  bigdecimal_as_decimal: false,
  nan: :null,
  time_format: :xmlschema,
  second_precision: 3,
  mode: :compat,
  use_as_json: true,
  use_to_json: true
}.freeze
OJ_OPTIONS =
(Oj::VERSION) && Oj::VERSION >= "3") ? OJ_OPTIONS_3 : OJ_OPTIONS_2
FAIL_JSON =
"{\"error_json\":\"failed to generate json\"}"
NO_JSON =
"{\"error_json\":\"no json backend\"}"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.engineObject

Returns the value of attribute engine.



8
9
10
# File 'lib/kiev/json.rb', line 8

def engine
  @engine
end

Class Method Details

.generate(obj) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
# 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) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# 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