oj 2.17.4 → 2.17.5

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.
@@ -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