PERF: Use Oj for serializing JSON. (#7820)

PERF: Use Oj for serializing JSON. (#7820)

diff --git a/config/initializers/100-oj.rb b/config/initializers/100-oj.rb
index 4e51c78..0936bea 100644
--- a/config/initializers/100-oj.rb
+++ b/config/initializers/100-oj.rb
@@ -1,4 +1,8 @@
 # frozen_string_literal: true
 
+Oj::Rails.set_encoder()
+Oj::Rails.set_decoder()
+Oj::Rails.optimize()
+
 # Not sure why it's not using this by default!
 MultiJson.engine = :oj
diff --git a/spec/integrity/oj_spec.rb b/spec/integrity/oj_spec.rb
new file mode 100644
index 0000000..9a02b27
--- /dev/null
+++ b/spec/integrity/oj_spec.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+require "rails_helper"
+
+describe 'Oj' do
+  it "is enabled" do
+    classes = Set.new
+    tracer = TracePoint.new(:c_call) { |tp| classes << tp.defined_class }
+    tracer.enable { ActiveModel::ArraySerializer.new([1, 2, 3]).to_json }
+
+    expect(classes).to include(Oj::Rails::Encoder)
+  end
+
+  it "escapes HTML entities the same as ActiveSupport" do
+    expect("<b>hello</b>".to_json).to eq("\"\\u003cb\\u003ehello\\u003c/b\\u003e\"")
+    expect('"hello world"'.to_json). to eq('"\"hello world\""')
+    expect("\u2028\u2029><&".to_json).to eq('"\u2028\u2029\u003e\u003c\u0026"')
+  end
+end

GitHub sha: 1942ba1d

1 Like