oj-introspect 0.5.0 → 0.6.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0a72b92485dbfef2a4b2fe110e3209d277c1cb98a356648d5c37d65015906b1b
4
- data.tar.gz: 9d8047afdd2b9434fd257f05eb3bafef180c57a3b7c8e5a873bdf954dfd2dfab
3
+ metadata.gz: 718229e62c9fde37495f36cb674b79025c626a934d188698a0e2c87937566809
4
+ data.tar.gz: 490a556129f5d13bc29c1b422e0af6cded6d97c88ead6b953ada4abf06ada594
5
5
  SHA512:
6
- metadata.gz: 42c8c6afb2256ae41a156892379fa8535f3944f457105db6d6f6b1581008dccc2ba76e413eef725428ea70d384b69ae3d6a8657d745a3eedda7997d1da13910a
7
- data.tar.gz: 12446b7a5f18442a2dd7695823b08ebe331a71d707583342f8b9d7034a0acef529df8368cf490b2928da6ae4d31f673783075b3a24d3f302b6dbe8aab34a8db9
6
+ metadata.gz: 92ddcdc95170deef8d6854a879c5c910181ab6a16bbdb175e8d92ab67169ca80ee36d7ddfdcbf3aa45c036955c60d6642c53e45d9bbed3f3584aac61335c83cf
7
+ data.tar.gz: a45c33ee35937db46ee01819b25264b9d7e9336a014a93edaba0cf878b5ad5d3a4a3303f8357b9848253d2953a50c2679469cc52e62ceabeb462da2616f43338
data/.gitignore CHANGED
@@ -13,3 +13,4 @@
13
13
  *.bundle
14
14
  Makefile
15
15
  *.o
16
+ *.so
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- oj-introspect (0.5.0)
5
- oj (>= 3.13.22)
4
+ oj-introspect (0.6.0)
5
+ oj (>= 3.13.23)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
@@ -11,7 +11,7 @@ GEM
11
11
  coderay (1.1.3)
12
12
  diff-lcs (1.5.0)
13
13
  method_source (1.0.0)
14
- oj (3.13.22)
14
+ oj (3.13.23)
15
15
  pry (0.14.1)
16
16
  coderay (~> 1.1)
17
17
  method_source (~> 1.0)
@@ -26,6 +26,8 @@ typedef struct _introspect_S {
26
26
  void (*delegated_open_object_key_func)(struct _ojParser *p);
27
27
  void (*delegated_open_array_key_func)(struct _ojParser *p);
28
28
  void (*delegated_close_object_func)(struct _ojParser *p);
29
+ void (*delegated_close_object_key_func)(struct _ojParser *p);
30
+ void (*delegated_close_array_key_func)(struct _ojParser *p);
29
31
  } * IntrospectDelegate;
30
32
 
31
33
  static void dfree(ojParser p) {
@@ -61,6 +63,7 @@ static VALUE option(ojParser p, const char *key, VALUE value) {
61
63
  IntrospectDelegate d = (IntrospectDelegate)p->ctx;
62
64
 
63
65
  if(strcmp(key, "filter=") == 0) {
66
+ Check_Type(value, T_STRING);
64
67
  copy_ruby_str(&d->filter, value); // We need to copy the value as GC can free it later.
65
68
 
66
69
  return Qtrue;
@@ -144,8 +147,6 @@ static void set_introspection_values(ojParser p) {
144
147
 
145
148
  if(!d->introspect) return;
146
149
 
147
- switch_introspection(d);
148
-
149
150
  volatile VALUE obj = rb_hash_new();
150
151
  rb_hash_aset(obj, ID2SYM(rb_intern("start_byte")), INT2FIX(pop(p)));
151
152
  rb_hash_aset(obj, ID2SYM(rb_intern("end_byte")), INT2FIX(p->cur));
@@ -159,6 +160,24 @@ static void close_object_introspected(ojParser p) {
159
160
  set_introspection_values(p);
160
161
  }
161
162
 
163
+ // We switch introspection off only for object and array keys.
164
+ static void close_object_key_introspected(ojParser p) {
165
+ IntrospectDelegate d = (IntrospectDelegate)p->ctx;
166
+ d->delegated_close_object_func(p);
167
+
168
+ if(d->introspect) {
169
+ set_introspection_values(p);
170
+ switch_introspection(d);
171
+ }
172
+ }
173
+
174
+ static void close_array_key_introspected(ojParser p) {
175
+ IntrospectDelegate d = (IntrospectDelegate)p->ctx;
176
+ d->delegated_close_array_key_func(p);
177
+
178
+ if(d->introspect) switch_introspection(d);
179
+ }
180
+
162
181
  static void init_introspect_parser(ojParser p, VALUE ropts) {
163
182
  IntrospectDelegate d = ALLOC(struct _introspect_S);
164
183
 
@@ -174,12 +193,7 @@ static void init_introspect_parser(ojParser p, VALUE ropts) {
174
193
  d->delegated_option_func = p->option;
175
194
  p->option = option;
176
195
 
177
- // We are cheating with the mark, free, and options functions. Since struct
178
- // _usual is the first member of struct _introspect the cast to Usual in the
179
- // usual.c mark() function should still work just fine.
180
-
181
- // PCO - do you need the location of sub-objects and arrays or just top
182
- // level objects?
196
+ // Wrap original functions to collect byte offsets
183
197
  Funcs f = &p->funcs[TOP_FUN];
184
198
  d->delegated_open_object_func = f->open_object;
185
199
  d->delegated_close_object_func = f->close_object;
@@ -193,9 +207,12 @@ static void init_introspect_parser(ojParser p, VALUE ropts) {
193
207
  f = &p->funcs[OBJECT_FUN];
194
208
  d->delegated_open_array_key_func = f->open_array;
195
209
  d->delegated_open_object_key_func = f->open_object;
210
+ d->delegated_close_array_key_func = f->close_array;
211
+ d->delegated_close_object_key_func = f->close_object;
196
212
  f->open_array = open_array_key_introspected;
197
213
  f->open_object = open_object_key_introspected;
198
- f->close_object = close_object_introspected;
214
+ f->close_array = close_array_key_introspected;
215
+ f->close_object = close_object_key_introspected;
199
216
 
200
217
  // Init stack
201
218
  d->byte_offsets.current = 0;
@@ -208,18 +225,6 @@ static void init_introspect_parser(ojParser p, VALUE ropts) {
208
225
  oj_parser_set_option(p, ropts);
209
226
  }
210
227
 
211
- VALUE oj_get_parser_introspect() {
212
- VALUE oj_parser = oj_parser_new();
213
- struct _ojParser *p;
214
- Data_Get_Struct(oj_parser, struct _ojParser, p);
215
-
216
- init_introspect_parser(p, Qnil);
217
-
218
- rb_gc_register_address(&oj_parser);
219
-
220
- return oj_parser;
221
- }
222
-
223
228
  static VALUE rb_new_introspect_parser(int argc, VALUE *argv, VALUE self) {
224
229
  rb_check_arity(argc, 0, 1);
225
230
 
@@ -1,5 +1,5 @@
1
1
  module Oj
2
2
  class Introspect
3
- VERSION = "0.5.0"
3
+ VERSION = "0.6.0"
4
4
  end
5
5
  end
@@ -24,5 +24,5 @@ Gem::Specification.new do |spec|
24
24
  spec.require_paths = ["lib"]
25
25
  spec.extensions = ["ext/oj-introspect/extconf.rb"]
26
26
 
27
- spec.add_dependency "oj", ">=3.13.22"
27
+ spec.add_dependency "oj", ">=3.13.23"
28
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oj-introspect
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mehmet Emin INAC
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-11-04 00:00:00.000000000 Z
11
+ date: 2022-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 3.13.22
19
+ version: 3.13.23
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 3.13.22
26
+ version: 3.13.23
27
27
  description: Embeds start and end byte offsets of JSON objects into generated Ruby
28
28
  hashes.
29
29
  email: