oj 3.7.6 → 3.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/oj/encode.h +2 -0
- data/ext/oj/fast.c +1 -1
- data/ext/oj/object.c +0 -29
- data/ext/oj/oj.c +0 -16
- data/ext/oj/saj.c +1 -1
- data/ext/oj/stream_writer.c +11 -5
- data/lib/oj/version.rb +1 -1
- data/test/bar.rb +25 -0
- data/test/foo.rb +78 -2
- data/test/test_object.rb +24 -0
- data/test/test_writer.rb +19 -2
- data/test/zoo.rb +13 -0
- metadata +73 -107
- data/test/bug.rb +0 -51
- data/test/bug2.rb +0 -10
- data/test/bug3.rb +0 -46
- data/test/bug_fast.rb +0 -32
- data/test/bug_load.rb +0 -24
- data/test/crash.rb +0 -111
- data/test/example.rb +0 -11
- data/test/io.rb +0 -48
- data/test/isolated/test_mimic_rails_datetime.rb +0 -27
- data/test/mem.rb +0 -20
- data/test/mod.rb +0 -16
- data/test/omit.rb +0 -20
- data/test/rails.rb +0 -50
- data/test/rails_datetime_test.rb +0 -24
- data/test/russian.rb +0 -18
- data/test/struct.rb +0 -29
- data/test/test_serializer.rb +0 -59
- data/test/write_timebars.rb +0 -31
- data/test/x_test.rb +0 -185
data/test/bug.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# encoding: UTF-8
|
3
|
-
|
4
|
-
$: << File.dirname(__FILE__)
|
5
|
-
|
6
|
-
require 'helper'
|
7
|
-
|
8
|
-
class Handler
|
9
|
-
def initialize
|
10
|
-
@state = []
|
11
|
-
end
|
12
|
-
|
13
|
-
def hash_start
|
14
|
-
@state << {}
|
15
|
-
@state.last
|
16
|
-
end
|
17
|
-
|
18
|
-
def hash_end
|
19
|
-
@state.pop
|
20
|
-
end
|
21
|
-
|
22
|
-
def hash_set(h,k,v)
|
23
|
-
h.store(k,v)
|
24
|
-
end
|
25
|
-
|
26
|
-
def array_start
|
27
|
-
@state << []
|
28
|
-
@state.last
|
29
|
-
end
|
30
|
-
|
31
|
-
|
32
|
-
def array_end
|
33
|
-
@state.pop
|
34
|
-
end
|
35
|
-
|
36
|
-
def array_append(a,v)
|
37
|
-
a << v
|
38
|
-
end
|
39
|
-
|
40
|
-
def add_value(v)
|
41
|
-
p v
|
42
|
-
end
|
43
|
-
|
44
|
-
def error(message, line, column); p "ERROR: #{message}" end
|
45
|
-
end
|
46
|
-
|
47
|
-
$handler = Handler.new
|
48
|
-
|
49
|
-
IO.popen("cat tst") { |p| puts Oj.sc_parse($handler, p) }
|
50
|
-
|
51
|
-
#File.open('tst', 'r') { |file| Oj.sc_parse($handler, file) }
|
data/test/bug2.rb
DELETED
data/test/bug3.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
#!/usr/bin/env ruby
|
4
|
-
# encoding: UTF-8
|
5
|
-
|
6
|
-
$: << File.dirname(__FILE__)
|
7
|
-
%w(lib ext test).each do |dir|
|
8
|
-
$LOAD_PATH.unshift File.expand_path("../../#{dir}", __FILE__)
|
9
|
-
end
|
10
|
-
|
11
|
-
require 'oj'
|
12
|
-
require 'stringio'
|
13
|
-
|
14
|
-
class Parser < Oj::Saj
|
15
|
-
|
16
|
-
def parse(json)
|
17
|
-
Oj.saj_parse(self, StringIO.new(json))
|
18
|
-
end
|
19
|
-
|
20
|
-
def hash_start(key)
|
21
|
-
puts "START: #{key}"
|
22
|
-
end
|
23
|
-
|
24
|
-
def error(message, line, column)
|
25
|
-
puts "Error callback: #{message}"
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
parser = Parser.new
|
31
|
-
|
32
|
-
begin
|
33
|
-
# truncated JSON, Oj.saj_parse raises, #error not called
|
34
|
-
parser.parse('{"foo{"bar":')
|
35
|
-
rescue Exception => e
|
36
|
-
puts "*** #{e.class}: #{e.message}"
|
37
|
-
end
|
38
|
-
|
39
|
-
puts "\n\n"
|
40
|
-
|
41
|
-
begin
|
42
|
-
# invalid JSON, doesn't raise an error
|
43
|
-
parser.parse('{"foo":{"bar":}')
|
44
|
-
rescue Exception => e
|
45
|
-
puts "*** #{e.class}: #{e.message}"
|
46
|
-
end
|
data/test/bug_fast.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# encoding: UTF-8
|
3
|
-
|
4
|
-
%w(lib ext test).each do |dir|
|
5
|
-
$LOAD_PATH.unshift File.expand_path("../../#{dir}", __FILE__)
|
6
|
-
end
|
7
|
-
|
8
|
-
require 'oj'
|
9
|
-
|
10
|
-
def create_item(doc)
|
11
|
-
#puts "#{doc.fetch('/id')}: #{doc.fetch('/labels/it/value')} - #{doc.fetch('/descriptions/it/value')}"
|
12
|
-
doc.fetch('/id')
|
13
|
-
doc.fetch('/labels/it/value')
|
14
|
-
doc.fetch('/descriptions/it/value')
|
15
|
-
end
|
16
|
-
|
17
|
-
100.times { |i|
|
18
|
-
File.open('dump_10k.json') { |f|
|
19
|
-
f.each { |line|
|
20
|
-
#Oj::Doc.open(line) { |doc|
|
21
|
-
doc = Oj::Doc.open(line)
|
22
|
-
begin
|
23
|
-
create_item(doc) if doc.fetch('/type') == 'item'
|
24
|
-
rescue Exception => e
|
25
|
-
puts "*** #{e.class}: #{e.message}"
|
26
|
-
end
|
27
|
-
doc.close
|
28
|
-
#}
|
29
|
-
}
|
30
|
-
}
|
31
|
-
puts i
|
32
|
-
}
|
data/test/bug_load.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# encoding: UTF-8
|
3
|
-
|
4
|
-
%w(lib ext test).each do |dir|
|
5
|
-
$LOAD_PATH.unshift File.expand_path("../../#{dir}", __FILE__)
|
6
|
-
end
|
7
|
-
|
8
|
-
require 'oj'
|
9
|
-
|
10
|
-
def create_item(doc)
|
11
|
-
item_id = doc['source']
|
12
|
-
# ...
|
13
|
-
puts item_id
|
14
|
-
end
|
15
|
-
|
16
|
-
File.open('log.json') { |f|
|
17
|
-
Oj::load(f, mode: :compat) { |doc|
|
18
|
-
begin
|
19
|
-
create_item(doc) if doc['msgType'] == 1
|
20
|
-
rescue Exception => e
|
21
|
-
puts "*** #{e.class}: #{e.message}"
|
22
|
-
end
|
23
|
-
}
|
24
|
-
}
|
data/test/crash.rb
DELETED
@@ -1,111 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# encoding: UTF-8
|
3
|
-
|
4
|
-
$VERBOSE = true
|
5
|
-
|
6
|
-
%w(lib ext test).each do |dir|
|
7
|
-
$LOAD_PATH.unshift File.expand_path("../../#{dir}", __FILE__)
|
8
|
-
end
|
9
|
-
|
10
|
-
require 'sqlite3'
|
11
|
-
require 'active_record'
|
12
|
-
require 'oj'
|
13
|
-
require 'representable'
|
14
|
-
require 'representable/json'
|
15
|
-
require 'multi_json'
|
16
|
-
MultiJson.use(:oj)
|
17
|
-
Oj.default_options = {mode: :object, indent: 2}
|
18
|
-
|
19
|
-
#ActiveRecord::Base.logger = Logger.new(STDERR)
|
20
|
-
|
21
|
-
ActiveRecord::Base.establish_connection(
|
22
|
-
:adapter => "sqlite3",
|
23
|
-
:database => ":memory:"
|
24
|
-
)
|
25
|
-
|
26
|
-
ActiveRecord::Schema.define do
|
27
|
-
create_table :users do |t|
|
28
|
-
t.string "first_name"
|
29
|
-
t.string "last_name"
|
30
|
-
t.string "picture"
|
31
|
-
t.integer "state", null: false
|
32
|
-
t.integer "visible", default: 1, null: false
|
33
|
-
t.integer "role", null: false
|
34
|
-
t.string "position"
|
35
|
-
t.integer "responded", default: 0
|
36
|
-
t.string "slug"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
class User < ActiveRecord::Base
|
41
|
-
end
|
42
|
-
User.find_or_create_by(first_name: "John", last_name: "Smith",role:1,id:1,state: 0)
|
43
|
-
User.find_or_create_by(first_name: "John", last_name: "Smith",role:1,id:2,state: 0)
|
44
|
-
|
45
|
-
|
46
|
-
class PersonDecorator < Representable::Decorator
|
47
|
-
include Representable::JSON
|
48
|
-
include Representable::Hash
|
49
|
-
|
50
|
-
property :id
|
51
|
-
|
52
|
-
property :first_name
|
53
|
-
|
54
|
-
property :last_name,
|
55
|
-
default: nil
|
56
|
-
|
57
|
-
property :name,
|
58
|
-
getter: ->(_){ "#{first_name} #{last_name}".strip },
|
59
|
-
writeable: false
|
60
|
-
|
61
|
-
property :visible,
|
62
|
-
render_filter: lambda{ |value, _| !value.zero? },
|
63
|
-
parse_filter: lambda{ |value, _| value ? 1 : 0 },
|
64
|
-
default: 1
|
65
|
-
|
66
|
-
property :role,
|
67
|
-
render_filter: lambda{ |value, _| { 1 => 'staff', 2 => 'manager' }[value].to_s },
|
68
|
-
writeable: false
|
69
|
-
|
70
|
-
property :position
|
71
|
-
|
72
|
-
nested :image, skip_render: lambda{ |options| options[:represented].picture.nil? } do
|
73
|
-
property :picture, as: :url, writeable: false
|
74
|
-
end
|
75
|
-
|
76
|
-
end
|
77
|
-
|
78
|
-
class PersonViewModel
|
79
|
-
|
80
|
-
def initialize(person, organization)
|
81
|
-
@users = User.all
|
82
|
-
@person = person
|
83
|
-
@organization = organization
|
84
|
-
end
|
85
|
-
|
86
|
-
def to_json(options={})
|
87
|
-
PersonDecorator.represent(@users.to_a)
|
88
|
-
end
|
89
|
-
|
90
|
-
def json_with_decorator(options={})
|
91
|
-
PersonDecorator.new(person).to_json
|
92
|
-
end
|
93
|
-
|
94
|
-
def person
|
95
|
-
@person
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
class EmployeeViewModel < PersonViewModel
|
100
|
-
|
101
|
-
end
|
102
|
-
|
103
|
-
employee = User.find(1)
|
104
|
-
emp_json = EmployeeViewModel.new(employee,nil)
|
105
|
-
puts emp_json.to_json.to_json
|
106
|
-
puts emp_json.json_with_decorator
|
107
|
-
Oj.mimic_JSON
|
108
|
-
# when i use Oj.mimic_JSON script crash
|
109
|
-
# when i dont use Oj.mimic_JSON then dont use correct decorator
|
110
|
-
puts Oj.dump(emp_json)
|
111
|
-
puts Oj.dump(emp_json.to_json)
|
data/test/example.rb
DELETED
data/test/io.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# encoding: UTF-8
|
3
|
-
|
4
|
-
$: << File.dirname(__FILE__)
|
5
|
-
|
6
|
-
require 'helper'
|
7
|
-
|
8
|
-
class Handler
|
9
|
-
def initialize
|
10
|
-
@state = []
|
11
|
-
end
|
12
|
-
|
13
|
-
def hash_start
|
14
|
-
@state << {}
|
15
|
-
@state.last
|
16
|
-
end
|
17
|
-
|
18
|
-
def hash_end
|
19
|
-
@state.pop
|
20
|
-
end
|
21
|
-
|
22
|
-
def hash_set(h,k,v)
|
23
|
-
h.store(k,v)
|
24
|
-
end
|
25
|
-
|
26
|
-
def array_start
|
27
|
-
@state << []
|
28
|
-
@state.last
|
29
|
-
end
|
30
|
-
|
31
|
-
|
32
|
-
def array_end
|
33
|
-
@state.pop
|
34
|
-
end
|
35
|
-
|
36
|
-
def array_append(a,v)
|
37
|
-
a << v
|
38
|
-
end
|
39
|
-
|
40
|
-
def error(message, line, column); p "ERROR: #{message}" end
|
41
|
-
end
|
42
|
-
|
43
|
-
handler = Handler.new
|
44
|
-
def handler.add_value(v)
|
45
|
-
p v
|
46
|
-
end
|
47
|
-
|
48
|
-
Oj.sc_parse(handler, StringIO.new('{"a":"b","c":[1,2,{"d":"e"}]}[4,5,6]'))
|
@@ -1,27 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# encoding: UTF-8
|
3
|
-
|
4
|
-
$: << File.join(File.dirname(__FILE__), '..')
|
5
|
-
|
6
|
-
require 'helper'
|
7
|
-
require 'oj/active_support_helper'
|
8
|
-
|
9
|
-
class ObjectFolder < Minitest::Test
|
10
|
-
def setup
|
11
|
-
@default_options = Oj.default_options
|
12
|
-
end
|
13
|
-
|
14
|
-
def teardown
|
15
|
-
Oj.default_options = @default_options
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_as_json
|
19
|
-
Oj.mimic_JSON()
|
20
|
-
dt = DateTime.now()
|
21
|
-
|
22
|
-
json = dt.to_json()
|
23
|
-
|
24
|
-
puts json
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
data/test/mem.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# encoding: UTF-8
|
3
|
-
|
4
|
-
$: << File.join(File.dirname(__FILE__), "../lib")
|
5
|
-
$: << File.join(File.dirname(__FILE__), "../ext")
|
6
|
-
|
7
|
-
require 'oj'
|
8
|
-
|
9
|
-
h = {
|
10
|
-
'a' => 1,
|
11
|
-
'b' => 2,
|
12
|
-
'c' => 3,
|
13
|
-
'd' => 4,
|
14
|
-
'e' => 5,
|
15
|
-
}
|
16
|
-
|
17
|
-
10000.times do
|
18
|
-
GC.start
|
19
|
-
Oj.dump(h)
|
20
|
-
end
|
data/test/mod.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# encoding: UTF-8
|
3
|
-
|
4
|
-
%w(lib ext test).each do |dir|
|
5
|
-
$LOAD_PATH.unshift File.expand_path("../../#{dir}", __FILE__)
|
6
|
-
end
|
7
|
-
|
8
|
-
require 'oj'
|
9
|
-
|
10
|
-
|
11
|
-
Thread.new do
|
12
|
-
string_io = StringIO.new('{"foo":"bar"}')
|
13
|
-
Oj.load(string_io)
|
14
|
-
string_io.rewind
|
15
|
-
puts string_io.read
|
16
|
-
end.join
|
data/test/omit.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# encoding: UTF-8
|
3
|
-
|
4
|
-
$: << File.join(File.dirname(__FILE__), "../lib")
|
5
|
-
$: << File.join(File.dirname(__FILE__), "../ext")
|
6
|
-
|
7
|
-
require 'oj'
|
8
|
-
require 'stringio'
|
9
|
-
require 'parallel'
|
10
|
-
|
11
|
-
h = { a: 1, b: nil, c: 3 }
|
12
|
-
outputs = Parallel.map((0...30).to_a, in_process: 30) do |i|
|
13
|
-
io = StringIO.new('wb+')
|
14
|
-
Oj.to_stream(io, h, omit_nil: false)
|
15
|
-
io.string
|
16
|
-
end
|
17
|
-
|
18
|
-
outputs.each do |output|
|
19
|
-
puts output
|
20
|
-
end
|
data/test/rails.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# encoding: UTF-8
|
3
|
-
|
4
|
-
$VERBOSE = true
|
5
|
-
|
6
|
-
here = File.expand_path(File.dirname(__FILE__))
|
7
|
-
$: << File.dirname(__FILE__)
|
8
|
-
$: << File.join(File.dirname(here), 'ext')
|
9
|
-
$: << File.join(File.dirname(here), 'lib')
|
10
|
-
|
11
|
-
require "active_record"
|
12
|
-
require "minitest/autorun"
|
13
|
-
require "logger"
|
14
|
-
require 'sidekiq/testing'
|
15
|
-
require "rspec/mocks/minitest_integration"
|
16
|
-
require 'oj'
|
17
|
-
|
18
|
-
Oj.mimic_JSON
|
19
|
-
|
20
|
-
Sidekiq::Testing.inline!
|
21
|
-
|
22
|
-
# Ensure backward compatibility with Minitest 4
|
23
|
-
Minitest::Test = MiniTest::Unit::TestCase unless defined?(Minitest::Test)
|
24
|
-
|
25
|
-
# This connection will do for database-independent bug reports.
|
26
|
-
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
|
27
|
-
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
28
|
-
|
29
|
-
ActiveRecord::Schema.define do
|
30
|
-
create_table :posts, force: true do |t|
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
class Post < ActiveRecord::Base
|
35
|
-
end
|
36
|
-
|
37
|
-
class MyWorker
|
38
|
-
include Sidekiq::Worker
|
39
|
-
|
40
|
-
def perform(post)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
class BugTest < Minitest::Test
|
45
|
-
def test_as_json
|
46
|
-
Post.arel_table
|
47
|
-
dbl = instance_double("Post", id: 1)
|
48
|
-
MyWorker.perform_async dbl
|
49
|
-
end
|
50
|
-
end
|