oj 3.17.6 → 3.17.8

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,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Loaded on first use of JSON::GenericObject so that requiring Oj does not
4
+ # also require ostruct, which is no longer a default gem as of Ruby 4.0.
5
+ begin
6
+ require 'ostruct'
7
+ rescue LoadError
8
+ raise LoadError.new("JSON::GenericObject requires 'ostruct'. Add it to your Gemfile or install it with `gem install ostruct`.")
9
+ end
10
+
11
+ module JSON
12
+ # Taken directly from the json gem. Shamelessly copied. It is similar in
13
+ # some ways to the Oj::Bag class or the Oj::EasyHash class.
14
+ class GenericObject < OpenStruct
15
+ class << self
16
+ alias [] new
17
+
18
+ def json_creatable?
19
+ @json_creatable
20
+ end
21
+
22
+ attr_writer :json_creatable
23
+
24
+ def json_create(data)
25
+ data = data.dup
26
+ data.delete JSON.create_id
27
+ self[data]
28
+ end
29
+
30
+ def from_hash(object)
31
+ case
32
+ when object.respond_to?(:to_hash)
33
+ result = new
34
+ object.to_hash.each do |key, value|
35
+ result[key] = from_hash(value)
36
+ end
37
+ result
38
+ when object.respond_to?(:to_ary)
39
+ object.to_ary.map { |a| from_hash(a) }
40
+ else
41
+ object
42
+ end
43
+ end
44
+
45
+ def load(source, proc = nil, opts = {})
46
+ result = ::JSON.load(source, proc, opts.merge(:object_class => self))
47
+ result.nil? ? new : result
48
+ end
49
+
50
+ def dump(obj, *args)
51
+ ::JSON.dump(obj, *args)
52
+ end
53
+
54
+ end # self
55
+
56
+ self.json_creatable = false
57
+
58
+ def to_hash
59
+ table
60
+ end
61
+
62
+ def [](name)
63
+ __send__(name)
64
+ end unless method_defined?(:[])
65
+
66
+ def []=(name, value)
67
+ __send__("#{name}=", value)
68
+ end unless method_defined?(:[]=)
69
+
70
+ def |(other)
71
+ self.class[other.to_hash.merge(to_hash)]
72
+ end
73
+
74
+ def as_json(*)
75
+ { JSON.create_id => self.class.name }.merge to_hash
76
+ end
77
+
78
+ def to_json(*a)
79
+ as_json.to_json(*a)
80
+ end
81
+ end
82
+ end # JSON
data/lib/oj/json.rb CHANGED
@@ -1,4 +1,3 @@
1
- require 'ostruct'
2
1
  require 'oj/state'
3
2
 
4
3
  if defined?(JSON::PRETTY_STATE_PROTOTYPE)
@@ -113,76 +112,7 @@ unless defined?(JSON::PRETTY_STATE_PROTOTYPE)
113
112
  self.parser = ::JSON::Ext::Parser
114
113
  self.generator = ::JSON::Ext::Generator
115
114
 
116
- # Taken directly from the json gem. Shamelessly copied. It is similar in
117
- # some ways to the Oj::Bag class or the Oj::EasyHash class.
118
- class GenericObject < OpenStruct
119
- class << self
120
- alias [] new
121
-
122
- def json_creatable?
123
- @json_creatable
124
- end
125
-
126
- attr_writer :json_creatable
127
-
128
- def json_create(data)
129
- data = data.dup
130
- data.delete JSON.create_id
131
- self[data]
132
- end
133
-
134
- def from_hash(object)
135
- case
136
- when object.respond_to?(:to_hash)
137
- result = new
138
- object.to_hash.each do |key, value|
139
- result[key] = from_hash(value)
140
- end
141
- result
142
- when object.respond_to?(:to_ary)
143
- object.to_ary.map { |a| from_hash(a) }
144
- else
145
- object
146
- end
147
- end
148
-
149
- def load(source, proc = nil, opts = {})
150
- result = ::JSON.load(source, proc, opts.merge(:object_class => self))
151
- result.nil? ? new : result
152
- end
153
-
154
- def dump(obj, *args)
155
- ::JSON.dump(obj, *args)
156
- end
157
-
158
- end # self
159
-
160
- self.json_creatable = false
161
-
162
- def to_hash
163
- table
164
- end
165
-
166
- def [](name)
167
- __send__(name)
168
- end unless method_defined?(:[])
169
-
170
- def []=(name, value)
171
- __send__("#{name}=", value)
172
- end unless method_defined?(:[]=)
173
-
174
- def |(other)
175
- self.class[other.to_hash.merge(to_hash)]
176
- end
177
-
178
- def as_json(*)
179
- { JSON.create_id => self.class.name }.merge to_hash
180
- end
181
-
182
- def to_json(*a)
183
- as_json.to_json(*a)
184
- end
185
- end
115
+ autoload :GenericObject, 'oj/generic_object'
186
116
 
187
117
  end # JSON
188
118
  end
data/lib/oj/mimic.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  require 'bigdecimal'
4
- require 'ostruct'
5
4
 
6
5
  module Oj
7
6
 
data/lib/oj/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Oj
2
2
  # Current version of the module.
3
- VERSION = '3.17.6'
3
+ VERSION = '3.17.8'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oj
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.17.6
4
+ version: 3.17.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Ohler
@@ -37,6 +37,20 @@ dependencies:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
39
  version: '5'
40
+ - !ruby/object:Gem::Dependency
41
+ name: ostruct
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0.2'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0.2'
40
54
  - !ruby/object:Gem::Dependency
41
55
  name: rake-compiler
42
56
  requirement: !ruby/object:Gem::Requirement
@@ -71,20 +85,6 @@ dependencies:
71
85
  - - "~>"
72
86
  - !ruby/object:Gem::Version
73
87
  version: '3.0'
74
- - !ruby/object:Gem::Dependency
75
- name: ostruct
76
- requirement: !ruby/object:Gem::Requirement
77
- requirements:
78
- - - ">="
79
- - !ruby/object:Gem::Version
80
- version: '0.2'
81
- type: :runtime
82
- prerelease: false
83
- version_requirements: !ruby/object:Gem::Requirement
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- version: '0.2'
88
88
  description: The fastest JSON parser and object serializer.
89
89
  email: peter@ohler.com
90
90
  executables: []
@@ -184,6 +184,7 @@ files:
184
184
  - lib/oj/bag.rb
185
185
  - lib/oj/easy_hash.rb
186
186
  - lib/oj/error.rb
187
+ - lib/oj/generic_object.rb
187
188
  - lib/oj/json.rb
188
189
  - lib/oj/mimic.rb
189
190
  - lib/oj/saj.rb