oxml 0.5.0 → 0.6.0.rc1
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 +4 -4
- data/lib/oxml/builder.rb +1 -1
- data/lib/oxml/parser.rb +18 -3
- data/lib/oxml/version.rb +1 -1
- data/lib/oxml.rb +13 -1
- metadata +21 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 479fdde9590894564065ab9b4793e7a5ae47698d2b33d737925a2035c4b00e75
|
4
|
+
data.tar.gz: 14d023101beda337c6899e3b458f11f3f1e08bdca38c83b35a827875a49f9bce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e7b901282659b50bd1b0d19194dd510cad27e868318116342abc8822c17d47f32d6fcd3ad8db0c80be4ea08f73ec1bcc9d4b7d251863642299ed2ffc9de5d90
|
7
|
+
data.tar.gz: '072924a32a01c48cfb60083d2dd6ba46d8d5d32e5981886db388c45edec2e85af7c9c03bd345dd21ba1bf8187ae181fda8fddc1f0e9a5a72641db075ffc4eeff'
|
data/lib/oxml/builder.rb
CHANGED
data/lib/oxml/parser.rb
CHANGED
@@ -19,6 +19,9 @@ module OXML
|
|
19
19
|
@delete_namespace_attributes = options.fetch(:delete_namespace_attributes, false)
|
20
20
|
@advanced_typecasting = options.fetch(:advanced_typecasting, false)
|
21
21
|
@skip_soap_elements = options.fetch(:skip_soap_elements, false)
|
22
|
+
@symbolize_keys = options.fetch(:symbolize_keys, true)
|
23
|
+
@strip_whitespace = options.fetch(:strip_whitespace, false)
|
24
|
+
@normalize_whitespace = options.fetch(:normalize_whitespace, false)
|
22
25
|
end
|
23
26
|
|
24
27
|
def to_h
|
@@ -44,11 +47,13 @@ module OXML
|
|
44
47
|
@arr.push(@memo)
|
45
48
|
|
46
49
|
if @strip_namespaces && name.start_with?('@')
|
47
|
-
@name = name.to_sym
|
50
|
+
@name = @symbolize_keys ? name.to_sym : name
|
48
51
|
elsif @strip_namespaces
|
49
|
-
|
52
|
+
processed_name = Utils.snakecase(name).split(':').last
|
53
|
+
@name = @map[name] ||= (@symbolize_keys ? processed_name.to_sym : processed_name)
|
50
54
|
else
|
51
|
-
|
55
|
+
processed_name = Utils.snakecase(name)
|
56
|
+
@name = @map[name] ||= (@symbolize_keys ? processed_name.to_sym : processed_name)
|
52
57
|
end
|
53
58
|
|
54
59
|
@memo = {}
|
@@ -67,6 +72,16 @@ module OXML
|
|
67
72
|
end
|
68
73
|
|
69
74
|
def text(value)
|
75
|
+
# Apply whitespace optimizations only when explicitly enabled
|
76
|
+
if @strip_whitespace && value.is_a?(String)
|
77
|
+
value = value.strip
|
78
|
+
return if value.empty?
|
79
|
+
end
|
80
|
+
|
81
|
+
if @normalize_whitespace && value.is_a?(String)
|
82
|
+
value = value.gsub(/\s+/, ' ').strip
|
83
|
+
end
|
84
|
+
|
70
85
|
if @arr.last[@name].is_a?(Array)
|
71
86
|
@arr.last[@name].pop unless value == @memo
|
72
87
|
@arr.last[@name] << cast(value)
|
data/lib/oxml/version.rb
CHANGED
data/lib/oxml.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'stringio'
|
3
4
|
require 'ox'
|
4
5
|
|
5
6
|
require_relative 'oxml/version'
|
@@ -8,16 +9,27 @@ require_relative 'oxml/parser'
|
|
8
9
|
require_relative 'oxml/builder'
|
9
10
|
|
10
11
|
module OXML
|
12
|
+
IO_OPTIMIZATION_THRESHOLD = 1_048_576 # 1MB in bytes
|
13
|
+
|
11
14
|
module_function
|
12
15
|
|
13
16
|
def parse(xml, options = {})
|
14
17
|
handler = Parser.new(options)
|
15
18
|
Ox.default_options = { encoding: 'UTF-8', skip: :skip_return}
|
16
|
-
|
19
|
+
|
20
|
+
xml_input = optimize_xml_input(xml)
|
21
|
+
Ox.sax_parse(handler, xml_input)
|
17
22
|
handler.to_h
|
18
23
|
end
|
19
24
|
|
20
25
|
def build(hash)
|
21
26
|
Builder.new(hash).to_s
|
22
27
|
end
|
28
|
+
|
29
|
+
# Use StringIO for large strings to reduce memory allocation
|
30
|
+
def optimize_xml_input(xml)
|
31
|
+
return xml unless xml.is_a?(String) && xml.bytesize > IO_OPTIMIZATION_THRESHOLD
|
32
|
+
|
33
|
+
StringIO.new(xml)
|
34
|
+
end
|
23
35
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oxml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- xkwd
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-09-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ox
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.14'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '13.2'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '13.2'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rspec
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,8 +66,8 @@ dependencies:
|
|
52
66
|
- - ">="
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
|
-
description: Fast XML to Hash parser and Hash to XML builder, built on top of
|
56
|
-
Ox gem (native C extension)
|
69
|
+
description: Fast Ruby XML to Hash parser and Hash to XML builder, built on top of
|
70
|
+
the Ox gem (a native C extension)
|
57
71
|
email:
|
58
72
|
executables: []
|
59
73
|
extensions: []
|
@@ -79,12 +93,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
79
93
|
version: '2.6'
|
80
94
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
95
|
requirements:
|
82
|
-
- - "
|
96
|
+
- - ">"
|
83
97
|
- !ruby/object:Gem::Version
|
84
|
-
version:
|
98
|
+
version: 1.3.1
|
85
99
|
requirements: []
|
86
100
|
rubygems_version: 3.2.3
|
87
101
|
signing_key:
|
88
102
|
specification_version: 4
|
89
|
-
summary: Fast XML to Hash parser
|
103
|
+
summary: Fast Ruby XML to Hash parser and Hash to XML builder
|
90
104
|
test_files: []
|