ox 2.14.0 → 2.14.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '059b3f1db82648104560fe8087b57d8c7e1ee082ed953a53afcdf3f8762b0a3e'
4
- data.tar.gz: 344eac455d082e55935804cc45a7f399ebce83be700c1895a4679f28cd3b635a
3
+ metadata.gz: f3288687ada02ee5a8c19fbde18da50329577718b7db9650a3cf544e423d3c20
4
+ data.tar.gz: 711f74754b5e417028c8b6c1956eda6c6483ca7a1ce906bbdb64a60c36169de4
5
5
  SHA512:
6
- metadata.gz: f4a109a5e5d97594c1c266bfd071af26aedf94acaf08d11c55ea03981fef97bff44d762c3df2b6b21da8559d928e7aac1d6d3421fbe0af56fb2eec10975449a6
7
- data.tar.gz: c82c7d2ca8fb54eb4f04d7da7b1b5527ef47e89905fcdd3b9ab9b5407bee6c9f3a55ea253472e212810e10cec71627a9cd84dcbb69f1c3db2bdee2e86651f6bd
6
+ metadata.gz: 3ed4c311f6e5100b36db59aa46eaf5870479bee44ac733bd844591b87205da49437f715c504f0e048a73e7c0f82c953e74e5fe08772a723561c7b2c5ec30ef20
7
+ data.tar.gz: 2149589a87c214dbbc5b999c4ae3123a106813d453b1f0e9c9b387d2356668d6b84de964b0e82a47f695810a776cb5e9960490ca6d391a4c77cbb1b6c8a39204
data/CHANGELOG.md CHANGED
@@ -2,7 +2,36 @@
2
2
 
3
3
  All changes to the Ox gem are documented here. Releases follow semantic versioning.
4
4
 
5
- ## [Unreleased]
5
+ ## [2.14.5] - 2021-06-04
6
+
7
+ ### Fixed
8
+
9
+ - Fixed RDoc for for Ox::Builder.
10
+
11
+ ## [2.14.4] - 2021-03-19
12
+
13
+ ### Fixed
14
+
15
+ - Really fixed code issue around HAVE_RB_ENC_ASSOCIATE.
16
+
17
+ ## [2.14.3] - 2021-03-12
18
+
19
+ ### Fixed
20
+
21
+ - Code issue around HAVE_RB_ENC_ASSOCIATE fixed.
22
+
23
+ ## [2.14.2] - 2021-03-07
24
+
25
+ ### Fixed
26
+
27
+ - Attribute keys for setting attributes no longer create seemily
28
+ duplicates if symbol and string keys are mixed.
29
+
30
+ ## [2.14.1] - 2021-01-11
31
+
32
+ ### Fixed
33
+
34
+ - In Ruby 3.0 Range objects are frozen. This version allows Ranges to be created on load.
6
35
 
7
36
  ## [2.14.0] - 2020-12-15
8
37
 
data/README.md CHANGED
@@ -1,8 +1,7 @@
1
1
  # Ox gem
2
2
  A fast XML parser and Object marshaller as a Ruby gem.
3
3
 
4
- [![Build Status](https://secure.travis-ci.org/ohler55/ox.svg?branch=master)](http://travis-ci.org/ohler55/ox) [![TideLift](https://tidelift.com/badges/github/ohler55/ox)](https://tidelift.com/subscription/pkg/rubygems-ox?utm_source=rubygems-ox&utm_medium=referral&utm_campaign=readme)
5
- [![Financial Contributors on Open Collective](https://opencollective.com/ohler/all/badge.svg?label=financial+contributors)](https://opencollective.com/ohler)
4
+ [![Build status](https://ci.appveyor.com/api/projects/status/pg2w4wspbrflbi8c?svg=true)](https://ci.appveyor.com/project/ohler55/ox)
6
5
 
7
6
  ## Installation
8
7
  gem install ox
@@ -17,10 +16,6 @@ A fast XML parser and Object marshaller as a Ruby gem.
17
16
 
18
17
  *RubyGems* *repo*: https://rubygems.org/gems/ox
19
18
 
20
- ## Follow @oxgem on Twitter
21
-
22
- [Follow @peterohler on Twitter](http://twitter.com/#!/peterohler) for announcements and news about the Ox gem.
23
-
24
19
  ## Support
25
20
 
26
21
  [Get supported Ox with a Tidelift Subscription.](https://tidelift.com/subscription/pkg/rubygems-ox?utm_source=rubygems-ox&utm_medium=referral&utm_campaign=readme) Security updates are [supported](https://tidelift.com/security).
@@ -79,7 +74,7 @@ callbacks. Unlike Nokogiri and LibXML, Ox can be tuned to use only the SAX
79
74
  callbacks that are of interest to the caller. (See the perf_sax.rb file for an
80
75
  example.)
81
76
 
82
- Ox is compatible with Ruby 1.8.7, 1.9.3, 2.1.2, 2.2.0 and RBX.
77
+ Ox is compatible with Ruby 2.3, 2.4, 2.5, 2.6, 2.7, 3.0.
83
78
 
84
79
  ### Object Dump Sample:
85
80
 
data/ext/ox/builder.c CHANGED
@@ -898,8 +898,7 @@ builder_pos(VALUE self) {
898
898
  *
899
899
  * Closes the current element.
900
900
  */
901
- static VALUE
902
- builder_pop(VALUE self) {
901
+ static VALUE builder_pop(VALUE self) {
903
902
  pop((Builder)DATA_PTR(self));
904
903
 
905
904
  return Qnil;
@@ -921,7 +920,12 @@ builder_close(VALUE self) {
921
920
  *
922
921
  * An XML builder.
923
922
  */
924
- void ox_init_builder(VALUE ox) {
923
+ void
924
+ ox_init_builder(VALUE ox) {
925
+ #if 0
926
+ // Just for rdoc.
927
+ ox = rb_define_module("Ox");
928
+ #endif
925
929
  builder_class = rb_define_class_under(ox, "Builder", rb_cObject);
926
930
  rb_define_module_function(builder_class, "new", builder_new, -1);
927
931
  rb_define_module_function(builder_class, "file", builder_file, -1);
data/ext/ox/dump.c CHANGED
@@ -838,7 +838,7 @@ dump_obj(ID aid, VALUE obj, int depth, Out out) {
838
838
  out->w_start(out, &e);
839
839
 
840
840
  for (i = 0; i < cnt; i++) {
841
- VALUE v = RSTRUCT_GET(obj, i);
841
+ VALUE v = RSTRUCT_GET(obj, (int)(i));
842
842
  dump_obj(rb_intern(ulong2str(i, num_buf + sizeof(num_buf) - 1)), v, d2, out);
843
843
  }
844
844
  out->w_end(out, &e);
data/ext/ox/gen_load.c CHANGED
@@ -116,18 +116,18 @@ create_prolog_doc(PInfo pi, const char *target, Attr attrs) {
116
116
  #endif
117
117
  rb_hash_aset(ah, sym, rb_str_new2(attrs->value));
118
118
  } else {
119
+ #if HAVE_RB_ENC_ASSOCIATE
119
120
  volatile VALUE rstr = rb_str_new2(attrs->name);
120
121
 
121
- #if HAVE_RB_ENC_ASSOCIATE
122
122
  if (0 != pi->options->rb_enc) {
123
123
  rb_enc_associate(rstr, pi->options->rb_enc);
124
124
  }
125
125
  rb_hash_aset(ah, rstr, rb_str_new2(attrs->value));
126
+ #endif
126
127
  }
127
128
  if (0 == strcmp("encoding", attrs->name)) {
128
129
  pi->options->rb_enc = rb_enc_find(attrs->value);
129
130
  }
130
- #endif
131
131
  }
132
132
  nodes = rb_ary_new();
133
133
  rb_ivar_set(doc, ox_attributes_id, ah);
data/ext/ox/obj_load.c CHANGED
@@ -42,10 +42,10 @@ static void fill_indent(PInfo pi, char *buf, size_t size);
42
42
 
43
43
 
44
44
  struct _parseCallbacks _ox_obj_callbacks = {
45
- instruct, /* instruct, */
46
- 0, /* add_doctype, */
47
- 0, /* add_comment, */
48
- 0, /* add_cdata, */
45
+ instruct, // instruct,
46
+ 0, // add_doctype,
47
+ 0, // add_comment,
48
+ 0, // add_cdata,
49
49
  add_text,
50
50
  add_element,
51
51
  end_element,
@@ -128,7 +128,7 @@ resolve_classname(VALUE mod, const char *class_name, Effort effort, VALUE base_c
128
128
  break;
129
129
  case StrictEffort:
130
130
  default:
131
- /* raise an error if name is not defined */
131
+ // raise an error if name is not defined
132
132
  clas = rb_const_get_at(mod, ci);
133
133
  break;
134
134
  }
@@ -183,7 +183,7 @@ parse_ulong(const char *s, PInfo pi) {
183
183
  return ULONG2NUM(n);
184
184
  }
185
185
 
186
- /* 2010-07-09T10:47:45.895826162+09:00 */
186
+ // 2010-07-09T10:47:45.895826162+09:00
187
187
  inline static VALUE
188
188
  parse_time(const char *text, VALUE clas) {
189
189
  VALUE t;
@@ -559,7 +559,7 @@ add_element(PInfo pi, const char *ename, Attr attrs, int hasChildren) {
559
559
  printf("%s%s\n", indent, buf);
560
560
  }
561
561
  }
562
- if (helper_stack_empty(&pi->helpers)) { /* top level object */
562
+ if (helper_stack_empty(&pi->helpers)) { // top level object
563
563
  if (0 != (id = get_id_from_attrs(pi, attrs))) {
564
564
  pi->circ_array = circ_array_new();
565
565
  }
@@ -580,7 +580,7 @@ add_element(PInfo pi, const char *ename, Attr attrs, int hasChildren) {
580
580
  h->obj = Qfalse;
581
581
  break;
582
582
  case StringCode:
583
- /* h->obj will be replaced by add_text if it is called */
583
+ // h->obj will be replaced by add_text if it is called
584
584
  h->obj = ox_empty_string;
585
585
  if (0 != pi->circ_array) {
586
586
  pi->id = get_id_from_attrs(pi, attrs);
@@ -597,8 +597,8 @@ add_element(PInfo pi, const char *ename, Attr attrs, int hasChildren) {
597
597
  case ComplexCode:
598
598
  case DateCode:
599
599
  case TimeCode:
600
- case RationalCode: /* sub elements read next */
601
- /* value will be read in the following add_text */
600
+ case RationalCode: // sub elements read next
601
+ // value will be read in the following add_text
602
602
  h->obj = Qundef;
603
603
  break;
604
604
  case String64Code:
@@ -620,7 +620,7 @@ add_element(PInfo pi, const char *ename, Attr attrs, int hasChildren) {
620
620
  }
621
621
  break;
622
622
  case RangeCode:
623
- h->obj = rb_range_new(ox_zero_fixnum, ox_zero_fixnum, Qfalse);
623
+ h->obj = rb_ary_new_from_args(3, Qnil, Qnil, Qfalse);
624
624
  break;
625
625
  case RawCode:
626
626
  if (hasChildren) {
@@ -700,12 +700,15 @@ end_element(PInfo pi, const char *ename) {
700
700
  Helper ph = helper_stack_peek(&pi->helpers);
701
701
 
702
702
  if (ox_empty_string == h->obj) {
703
- /* special catch for empty strings */
703
+ // special catch for empty strings
704
704
  h->obj = rb_str_new2("");
705
- }
706
- if (Qundef == h->obj) {
705
+ } else if (Qundef == h->obj) {
707
706
  set_error(&pi->err, "Invalid element for object mode", pi->str, pi->s);
708
707
  return;
708
+ } else if (RangeCode == h->type) { // Expect an array of 3 elements.
709
+ const VALUE *ap = RARRAY_PTR(h->obj);
710
+
711
+ h->obj = rb_range_new(*ap, *(ap + 1), Qtrue == *(ap + 2));
709
712
  }
710
713
  pi->obj = h->obj;
711
714
  if (0 != ph) {
@@ -740,11 +743,11 @@ end_element(PInfo pi, const char *ename) {
740
743
  break;
741
744
  case RangeCode:
742
745
  if (ox_beg_id == h->var) {
743
- RSTRUCT_SET(ph->obj, 0, h->obj);
746
+ rb_ary_store(ph->obj, 0, h->obj);
744
747
  } else if (ox_end_id == h->var) {
745
- RSTRUCT_SET(ph->obj, 1, h->obj);
748
+ rb_ary_store(ph->obj, 1, h->obj);
746
749
  } else if (ox_excl_id == h->var) {
747
- RSTRUCT_SET(ph->obj, 2, h->obj);
750
+ rb_ary_store(ph->obj, 2, h->obj);
748
751
  } else {
749
752
  set_error(&pi->err, "Invalid range attribute", pi->str, pi->s);
750
753
  return;
@@ -903,7 +906,7 @@ parse_xsd_time(const char *text, VALUE clas) {
903
906
  #endif
904
907
  }
905
908
 
906
- /* debug functions */
909
+ // debug functions
907
910
  static void
908
911
  fill_indent(PInfo pi, char *buf, size_t size) {
909
912
  size_t cnt;
data/lib/ox/hasattrs.rb CHANGED
@@ -13,7 +13,7 @@ module Ox
13
13
  @attributes = { } if !instance_variable_defined?(:@attributes) or @attributes.nil?
14
14
  @attributes
15
15
  end
16
-
16
+
17
17
  # Returns the value of an attribute.
18
18
  # - +attr+ [Symbol|String] attribute name or key to return the value for
19
19
  def [](attr)
@@ -27,9 +27,16 @@ module Ox
27
27
  def []=(attr, value)
28
28
  raise "argument to [] must be a Symbol or a String." unless attr.is_a?(Symbol) or attr.is_a?(String)
29
29
  @attributes = { } if !instance_variable_defined?(:@attributes) or @attributes.nil?
30
+ a_str = attr.to_s
31
+ a_sym = attr.to_sym
32
+ if @attributes.has_key?(a_str)
33
+ attr = a_str
34
+ elsif @attributes.has_key?(a_sym)
35
+ attr = a_sym
36
+ end
30
37
  @attributes[attr] = value.to_s
31
38
  end
32
-
39
+
33
40
  # Handles the 'easy' API that allows navigating a simple XML by
34
41
  # referencing attributes by name.
35
42
  # - +id+ [Symbol] element or attribute name
data/lib/ox/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
2
  module Ox
3
3
  # Current version of the module.
4
- VERSION = '2.14.0'
4
+ VERSION = '2.14.5'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ox
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.14.0
4
+ version: 2.14.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Ohler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-15 00:00:00.000000000 Z
11
+ date: 2021-06-04 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: "A fast XML parser and object serializer that uses only standard C lib.\n\nOptimized
14
14
  XML (Ox), as the name implies was written to provide speed optimized\nXML handling.
@@ -81,9 +81,12 @@ rdoc_options:
81
81
  - "--main"
82
82
  - README.md
83
83
  - "--title"
84
- - Ox Documentation
84
+ - Ox
85
85
  - "--exclude"
86
86
  - extconf.rb
87
+ - lib
88
+ - ext/ox
89
+ - README.md
87
90
  require_paths:
88
91
  - lib
89
92
  - ext
@@ -98,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
101
  - !ruby/object:Gem::Version
99
102
  version: '0'
100
103
  requirements: []
101
- rubygems_version: 3.1.2
104
+ rubygems_version: 3.2.3
102
105
  signing_key:
103
106
  specification_version: 4
104
107
  summary: A fast XML parser and object serializer.