oj 2.17.4 → 2.17.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #!/usr/bin/env ruby
4
+ # encoding: UTF-8
5
+
6
+ $: << File.dirname(__FILE__)
7
+
8
+ require 'helper'
9
+
10
+
@@ -0,0 +1,46 @@
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
@@ -0,0 +1,32 @@
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
+ }
@@ -0,0 +1,24 @@
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
+ }
@@ -0,0 +1,111 @@
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)
@@ -0,0 +1,11 @@
1
+ %w(lib ext test).each do |dir|
2
+ $LOAD_PATH.unshift File.expand_path("../../#{dir}", __FILE__)
3
+ end
4
+ require 'oj'
5
+ require 'json'
6
+
7
+ Oj::Doc.open([{:name => "T-Shirt"}].to_json) do |doc|
8
+ doc.each_child do |child|
9
+ p child.fetch("name")
10
+ end
11
+ end
@@ -0,0 +1,24 @@
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 'oj'
12
+
13
+ Oj.mimic_JSON()
14
+
15
+ class Foo
16
+ def as_json
17
+ { foo: 'bar' }
18
+ end
19
+ end
20
+
21
+ opts = {}
22
+
23
+ puts Foo.new.to_json
24
+ puts Foo.new.to_json(opts)
@@ -0,0 +1,48 @@
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]'))
@@ -0,0 +1,27 @@
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
@@ -1,19 +1,16 @@
1
1
  #!/usr/bin/env ruby
2
2
  # encoding: UTF-8
3
3
 
4
- $VERBOSE = true
5
-
6
4
  %w(lib ext test).each do |dir|
7
5
  $LOAD_PATH.unshift File.expand_path("../../#{dir}", __FILE__)
8
6
  end
9
7
 
10
- require 'rubygems' if RUBY_VERSION.start_with?('1.8.')
11
8
  require 'oj'
12
9
 
13
- Oj.mimic_JSON
14
-
15
- #puts Oj.default_options
16
-
17
- range = ("01".."12")
18
10
 
19
- puts Oj.dump(range)
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
@@ -0,0 +1,50 @@
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
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ $: << File.dirname(__FILE__)
5
+
6
+ %w(lib ext test).each do |dir|
7
+ $LOAD_PATH.unshift File.expand_path("../../#{dir}", __FILE__)
8
+ end
9
+
10
+ require 'oj'
11
+
12
+ s = %|{"response":[{"id":7250,"from_id":1382722,"owner_id":1382722,"date":1415964230,"post_type":"post","text":"Сдается комната в 2-х комнатной квартире с декабря месяца в Люберцах. (р-он Красная Горка)\nСдается желательно семейной паре (можно рассмотреть и другие варианты). \nв комнате одна большая . Стол, Шкаф, комод.\nДля проживания все есть. в Соседней комнате проживают два парня (из Чувашии)\nДо города можно доехать на маршрутке (20 мин.) на против дома остановка, на электричке (до электрички 15-20 мин. пешком) или на автобусе\nЦена 15 тыс. за комнату + коммунальные услуги\nЗвоните 8\/903\/012-34-25 венера","comments":{"count":0},"likes":{"count":1},"reposts":{"count":0}}]}|
13
+
14
+ r = Oj.load(s)
15
+
16
+ text = r["response"][0]["text"]
17
+ puts "#{text}"
18
+ puts "#{text.encoding}"
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ # Ubuntu does not accept arguments to ruby when called using env. To get warnings to show up the -w options is
5
+ # required. That can be set in the RUBYOPT environment variable.
6
+ # export RUBYOPT=-w
7
+
8
+ $VERBOSE = true
9
+
10
+ $: << File.join(File.dirname(__FILE__), "../lib")
11
+ $: << File.join(File.dirname(__FILE__), "../ext")
12
+
13
+ require 'oj'
14
+
15
+ A = Struct.new(:a,:b,:c,:d)
16
+ B = Struct.new(:e,:f)
17
+
18
+ obj = [A.new(55, B.new(1, 'X'), B.new(2, 'Y'), 3)]
19
+
20
+ s = Oj.dump(obj, :mode => :object)
21
+
22
+ 100000.times do
23
+ Oj.load(s, :mode => :object)
24
+ # ds = Oj.dump(o, :mode => :object)
25
+ # if ds != s
26
+ # puts ds
27
+ # raise "holy crap"
28
+ # end
29
+ end