dachsfisch 0.2.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9b770b4fa107d42b19b2cccbf725b0677d63176f2bae0754e8d3b566b642ab99
4
- data.tar.gz: a83446b885e9596e174f79e45337d08f97925f7bcb7ad76d8bbfa74c27a5228c
3
+ metadata.gz: 4b57f57926887bccdb029343e6f10257eed76667dbd6201623dca2e371949cd4
4
+ data.tar.gz: 8e078cf673d76acf54cd8b3aea7acdac70f53ffdfe1558a58193f981c5cd9416
5
5
  SHA512:
6
- metadata.gz: f15b9899108feb5971a743ac490bd1107849990a7a1381c581ef46e12adabdd484f559a8a099dd13e7e5414a9251c86466a01683376a5f63d920d5c9f4c9ab54
7
- data.tar.gz: 2e45884b0a96d04f39b72003e80bed357ea44d8846f470b7a46ef7da4642e29abfb8c28e17e626afd66f5010f6aeb3dede170f702cca5943ee6ae44627f01eaa
6
+ metadata.gz: 623c2ae1bd6671fce977ba88f392d8531cc2e63a008e440b74fb7d5b1fcce01bcfdec4727fb35f800ffc43a443e42f6d143d4d78c51f6e81b453e35981dc2f9c
7
+ data.tar.gz: 02b75ae568aa73b540af54f8ce3f1d7ba8829df216a3d6375b02a34deb8517f8ab4bc04e473f56e538d46bece3ee6889d3457e8c6f3a92e2fc9a202407b55d55
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dachsfisch (0.2.0)
4
+ dachsfisch (1.0.0)
5
5
  nokogiri (>= 1.14.1, < 2.0.0)
6
6
 
7
7
  GEM
@@ -22,7 +22,7 @@ GEM
22
22
  mini_portile2 (~> 2.8.2)
23
23
  racc (~> 1.4)
24
24
  parallel (1.23.0)
25
- parser (3.2.2.3)
25
+ parser (3.2.2.4)
26
26
  ast (~> 2.4.1)
27
27
  racc
28
28
  pry (0.14.2)
@@ -31,7 +31,7 @@ GEM
31
31
  racc (1.7.1)
32
32
  rainbow (3.1.1)
33
33
  rake (13.0.6)
34
- regexp_parser (2.8.1)
34
+ regexp_parser (2.8.2)
35
35
  rexml (3.2.6)
36
36
  rspec (3.12.0)
37
37
  rspec-core (~> 3.12.0)
@@ -48,12 +48,12 @@ GEM
48
48
  diff-lcs (>= 1.2.0, < 2.0)
49
49
  rspec-support (~> 3.12.0)
50
50
  rspec-support (3.12.1)
51
- rubocop (1.56.4)
51
+ rubocop (1.57.1)
52
52
  base64 (~> 0.1.1)
53
53
  json (~> 2.3)
54
54
  language_server-protocol (>= 3.17.0)
55
55
  parallel (~> 1.10)
56
- parser (>= 3.2.2.3)
56
+ parser (>= 3.2.2.4)
57
57
  rainbow (>= 2.2.2, < 4.0)
58
58
  regexp_parser (>= 1.8, < 3.0)
59
59
  rexml (>= 3.2.5, < 4.0)
@@ -80,7 +80,7 @@ GEM
80
80
  simplecov_json_formatter (~> 0.1)
81
81
  simplecov-html (0.12.3)
82
82
  simplecov_json_formatter (0.1.4)
83
- unicode-display_width (2.4.2)
83
+ unicode-display_width (2.5.0)
84
84
 
85
85
  PLATFORMS
86
86
  ruby
data/README.md CHANGED
@@ -22,6 +22,8 @@ The rules for converting XML documents to JSON using Badgerfish are:
22
22
  - CDATA sections become properties named `#1`, `#2`, etc.
23
23
 
24
24
  Please see our [examples](spec/support/examples.rb) for more details. Those rules are derived from [this list](http://dropbox.ashlock.us/open311/json-xml/).
25
+ Own additions:
26
+ - The order of nodes gets saved in `@@order` (JSON is unordered per definition)
25
27
 
26
28
  ## Installation
27
29
 
@@ -53,7 +55,7 @@ json = Dachsfisch::XML2JSONConverter.perform(xml: xml)
53
55
  ### JSON-to-XML
54
56
 
55
57
  ```ruby
56
- json = '{ "alice": { "$" : "bob" } }'
58
+ json = '{ "alice": { "$1": "bob", "@@order": ["$1"] }, "@@order": ["alice"] }'
57
59
  xml = Dachsfisch::JSON2XMLConverter.perform(json: json)
58
60
  ```
59
61
 
@@ -23,8 +23,8 @@ module Dachsfisch
23
23
  def add_element(xml, element)
24
24
  return unless element.is_a? Hash
25
25
 
26
- element.each do |key, value|
27
- add_node(xml, key, value) unless key.start_with?('@')
26
+ element['@@order']&.each do |key|
27
+ add_node(xml, key, element[key]) unless key.start_with?('@')
28
28
  end
29
29
  end
30
30
 
@@ -44,7 +44,7 @@ module Dachsfisch
44
44
  end
45
45
 
46
46
  def handle_attribute_and_namespaces(node, element)
47
- element.keys.filter {|element_key| element_key.start_with?('@') }.each do |attribute_key|
47
+ element.keys.filter {|element_key| element_key.start_with?(/@[^@]/) }.each do |attribute_key|
48
48
  if attribute_key.start_with? '@xmlns'
49
49
  element[attribute_key].each do |namespace_key, namespace|
50
50
  # add namespace of current scope to node. The root-ns($) gets 'xmlns' as key, named namespaces 'xmlns:name' respectively.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dachsfisch
4
- VERSION = '0.2.0'
4
+ VERSION = '1.0.0'
5
5
  end
@@ -14,20 +14,27 @@ module Dachsfisch
14
14
  @fragment.elements.deconstruct.each do |root|
15
15
  result[node_name(root)] = extract_node(root)
16
16
  end
17
+ add_order_to_hash result
17
18
  result.to_json
18
19
  end
19
20
 
20
21
  private
21
22
 
23
+ def add_order_to_hash(hash)
24
+ return if hash.keys.reject {|key| key.start_with?('@') }.empty?
25
+
26
+ hash['@@order'] = hash.keys.reject {|key| key.start_with?('@') }
27
+ end
28
+
22
29
  def extract_node(node)
23
30
  hash = {}
24
31
  active_namespaces = add_namespaces_to_active_namespaces(node)
25
32
  hash['@xmlns'] = active_namespaces unless active_namespaces.empty?
26
-
27
33
  handle_attributes(hash, node)
28
34
  node.children.each do |child|
29
35
  handle_content(hash, child)
30
36
  end
37
+ add_order_to_hash hash
31
38
  hash
32
39
  end
33
40
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dachsfisch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karol
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-03 00:00:00.000000000 Z
11
+ date: 2023-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri