xmlhasher 1.0.5 → 1.0.6

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: cf67f59279e556373a5f608b70b21e435eb64173316bf82ec7461bc444a193c4
4
- data.tar.gz: 446fd644b407a93c467dd8c24df75afe9308f04d15000b313ceec1898893ea2b
3
+ metadata.gz: bde73682245b3ba9ec69944e0dedb7488786205bf38ccfe6f64ac800fbad0f7b
4
+ data.tar.gz: cbf2f1830e2a7f649376e30408f78d3ef2f26c0e6cf5b1ec6f76da9ecc0e4764
5
5
  SHA512:
6
- metadata.gz: d4c32e4578bb6bae7c5e63b485e5dd84a304374fa35aa22f134a15b05faa663f29adaf5cb615afa63ec43f1a9d8a8a84bdaf9e8359610d9a86ae4ea625da43fc
7
- data.tar.gz: 22523c1d1089d9cf6add10df187b43175551138cb767be51c78ae1befe6dcba17a4bd6ce0a3b9f4b79ecadce1568309dab811d19c6bd5674e0ee43346acbf1d6
6
+ metadata.gz: '08450792f4de79c0cbd56e20e023739c5c2c095ba355048501912b1736c0efe3f455aa8ff5b880ad177fff7f92863a3bb9358335ed1012ce4f891d0bf51e3979'
7
+ data.tar.gz: 5373d3fb4e4f0b9644ed80d6d2957576dbfe0e97645f5a54f94e625721bd8142a5b583d0997677869bfd0ac3a1ee8a90ec7bf357532d538141909df09d5f7206
data/.rubocop.yml CHANGED
@@ -1,6 +1,3 @@
1
- AllCops:
2
- TargetRubyVersion: 2.5
3
-
4
1
  Style/Documentation:
5
2
  Enabled: false
6
3
 
@@ -25,3 +22,9 @@ Metrics/PerceivedComplexity:
25
22
  Style/MissingRespondToMissing:
26
23
  Exclude:
27
24
  - 'lib/xmlhasher.rb'
25
+
26
+ Naming/VariableNumber:
27
+ Enabled: false
28
+
29
+ Gemspec/RequiredRubyVersion:
30
+ Enabled: <%= ENV['CI'] != 'true' %>
data/.travis.yml CHANGED
@@ -1,10 +1,10 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.0.0
4
- - 2.2.3
5
- - 2.3.0
6
3
  - 2.5.1
7
4
  - 2.6.3
5
+ env:
6
+ - CI=true
8
7
  script:
8
+ - ./scripts/ci
9
9
  - gem build xmlhasher.gemspec
10
10
  - gem install xmlhasher-*
data/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  All changes to the XmlHasher gem are documented here. Releases follow semantic versioning.
4
4
 
5
+ ## [1.0.6] - 2021-03-10
6
+
7
+ - Resolve gem build warnings .
8
+ - Run tests on CI
9
+ - Little refactoring for Node hash builder.
10
+ - Use new ruby style guide and `rubocop` gem.
11
+
5
12
  ## [1.0.5] - 2019-06-16
6
13
 
7
14
  - Updated ox version.
data/Gemfile CHANGED
@@ -4,6 +4,8 @@ source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
6
 
7
+ gem 'rubocop', require: false if ENV['CI']
8
+
7
9
  group :test do
8
10
  gem 'coveralls', require: false
9
11
  gem 'minitest'
data/README.md CHANGED
@@ -44,7 +44,7 @@ end
44
44
  # alternatively, specify configuration options when instantiating a Parser
45
45
  parser = XmlHasher::Parser.new(
46
46
  :snakecase => true,
47
- :ignore_namespaces => true
47
+ :ignore_namespaces => true,
48
48
  :string_keys => false
49
49
  )
50
50
 
@@ -86,7 +86,7 @@ Note: benchmarks were generated on a 2015 Macbook Pro using Ruby 2.5.1
86
86
 
87
87
  ## Requirements
88
88
 
89
- * Ruby 1.9.3 or higher
89
+ * Ruby 2.0.0 or higher
90
90
 
91
91
  ## Copyright
92
92
  Copyright (c) 2013 Gene Drabkin.
data/lib/xmlhasher.rb CHANGED
@@ -22,5 +22,9 @@ module XmlHasher
22
22
 
23
23
  parser.send(method_name, *args, &block)
24
24
  end
25
+
26
+ def respond_to_missing?(method_name, include_private = false)
27
+ super
28
+ end
25
29
  end
26
30
  end
@@ -14,7 +14,9 @@ module XmlHasher
14
14
  private
15
15
 
16
16
  def options
17
- XmlHasher::Configurable::KEYS.each_with_object({}) { |key, hash| hash[key] = instance_variable_get(:"@#{key}"); }
17
+ XmlHasher::Configurable::KEYS.each_with_object({}) do |key, hash|
18
+ hash[key] = instance_variable_get(:"@#{key}")
19
+ end
18
20
  end
19
21
  end
20
22
  end
@@ -9,6 +9,8 @@ module XmlHasher
9
9
  @options = options
10
10
  @stack = []
11
11
  @transform_cache = {}
12
+
13
+ super()
12
14
  end
13
15
 
14
16
  def to_hash
@@ -51,7 +53,7 @@ module XmlHasher
51
53
 
52
54
  name = name.to_s.split(':').last if @options[:ignore_namespaces]
53
55
  name = Util.snakecase(name) if @options[:snakecase]
54
- name = name.to_sym unless @options[:string_keys]
56
+ name = @options[:string_keys] ? name.to_s : name.to_sym
55
57
  @transform_cache[orig_name] = name
56
58
  name
57
59
  end
@@ -11,19 +11,36 @@ module XmlHasher
11
11
  end
12
12
 
13
13
  def to_hash
14
- h = {}
15
- if text && !text.empty?
16
- h[name] = text
17
- else
18
- h[name] = attributes.each_with_object({}) { |(key, value), r| r[key] = value if !value.nil? && !value.to_s.empty?; }
19
- if children.size == 1
20
- h[name].merge!(children.first.to_hash)
21
- else
22
- h[name].merge!(children.group_by(&:name).each_with_object({}) { |(k, v), r| v.length == 1 ? r.merge!(v.first.to_hash) : r[k] = v.map { |c| c.to_hash[c.name] }; })
14
+ node_content = content
15
+ { name => node_content.empty? ? nil : node_content }
16
+ end
17
+
18
+ private
19
+
20
+ def content
21
+ return text if text && !text.empty?
22
+
23
+ attributes_to_hash.merge(children_to_hash)
24
+ end
25
+
26
+ def attributes_to_hash
27
+ attributes.each_with_object({}) do |(key, value), data|
28
+ next if value.nil? || value.to_s.empty?
29
+
30
+ data[key] = value
31
+ end
32
+ end
33
+
34
+ def children_to_hash
35
+ return children.first.to_hash if children.size == 1
36
+
37
+ children.group_by(&:name).each_with_object({}) do |(key, nodes), data|
38
+ next data.merge!(nodes.first.to_hash) if nodes.length == 1
39
+
40
+ data[key] = nodes.map do |node|
41
+ node.to_hash[node.name]
23
42
  end
24
43
  end
25
- h[name] = nil if h[name].empty?
26
- h
27
44
  end
28
45
  end
29
46
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module XmlHasher
4
- VERSION = '1.0.5'
4
+ VERSION = '1.0.6'
5
5
  end
data/scripts/ci ADDED
@@ -0,0 +1,26 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ init_ruby_version() {
6
+ echo "Using $(ruby -v)"
7
+ echo "$(cut -d'@' -f1 <<<"$(rvm current)")" > .ruby-version
8
+ }
9
+
10
+ run_code_quality_checks() {
11
+ if [[ "$(rvm current)" != *"2.0.0"* ]]; then
12
+ bundle exec rubocop .
13
+ fi
14
+ }
15
+
16
+ run_tests() {
17
+ bundle exec rake test
18
+ }
19
+
20
+ main() {
21
+ init_ruby_version &&
22
+ run_code_quality_checks &&
23
+ run_tests
24
+ }
25
+
26
+ main
data/xmlhasher.gemspec CHANGED
@@ -23,12 +23,12 @@ Gem::Specification.new do |spec|
23
23
  spec.required_rubygems_version = '>= 1.3.6'
24
24
 
25
25
  spec.add_dependency 'escape_utils', '~> 1.2'
26
- spec.add_dependency 'ox', '~> 2.11.0'
26
+ spec.add_dependency 'ox', '~> 2.11'
27
27
 
28
- spec.add_development_dependency 'bundler'
28
+ spec.add_development_dependency 'bundler', '>= 1.6', '< 3'
29
29
  spec.add_development_dependency 'coveralls', '~> 0.8.21'
30
30
  spec.add_development_dependency 'minitest', '~> 5.10'
31
- spec.add_development_dependency 'rake'
31
+ spec.add_development_dependency 'rake', '~> 12'
32
32
  spec.add_development_dependency 'simplecov', '~> 0.14.1'
33
33
  spec.add_development_dependency 'test-unit', '~> 3.2'
34
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xmlhasher
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gene Drabkin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-16 00:00:00.000000000 Z
11
+ date: 2021-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: escape_utils
@@ -30,28 +30,34 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 2.11.0
33
+ version: '2.11'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 2.11.0
40
+ version: '2.11'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '1.6'
48
+ - - "<"
49
+ - !ruby/object:Gem::Version
50
+ version: '3'
48
51
  type: :development
49
52
  prerelease: false
50
53
  version_requirements: !ruby/object:Gem::Requirement
51
54
  requirements:
52
55
  - - ">="
53
56
  - !ruby/object:Gem::Version
54
- version: '0'
57
+ version: '1.6'
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: '3'
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: coveralls
57
63
  requirement: !ruby/object:Gem::Requirement
@@ -84,16 +90,16 @@ dependencies:
84
90
  name: rake
85
91
  requirement: !ruby/object:Gem::Requirement
86
92
  requirements:
87
- - - ">="
93
+ - - "~>"
88
94
  - !ruby/object:Gem::Version
89
- version: '0'
95
+ version: '12'
90
96
  type: :development
91
97
  prerelease: false
92
98
  version_requirements: !ruby/object:Gem::Requirement
93
99
  requirements:
94
- - - ">="
100
+ - - "~>"
95
101
  - !ruby/object:Gem::Version
96
- version: '0'
102
+ version: '12'
97
103
  - !ruby/object:Gem::Dependency
98
104
  name: simplecov
99
105
  requirement: !ruby/object:Gem::Requirement
@@ -148,6 +154,7 @@ files:
148
154
  - lib/xmlhasher/parser.rb
149
155
  - lib/xmlhasher/util.rb
150
156
  - lib/xmlhasher/version.rb
157
+ - scripts/ci
151
158
  - xmlhasher.gemspec
152
159
  homepage: https://github.com/cloocher/xmlhasher
153
160
  licenses:
@@ -168,8 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
168
175
  - !ruby/object:Gem::Version
169
176
  version: 1.3.6
170
177
  requirements: []
171
- rubyforge_project:
172
- rubygems_version: 2.7.6
178
+ rubygems_version: 3.1.2
173
179
  signing_key:
174
180
  specification_version: 4
175
181
  summary: XmlHasher converts XML to Ruby Hash