nokogiri-happymapper 0.8.1 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +0 -3
- data/lib/happymapper/element.rb +2 -2
- data/lib/happymapper/supported_types.rb +3 -5
- data/lib/happymapper/version.rb +1 -1
- data/lib/happymapper.rb +44 -52
- metadata +98 -107
- data/spec/features/after_parse_callbacks_spec.rb +0 -32
- data/spec/features/attribute_default_value_spec.rb +0 -48
- data/spec/features/attributes_spec.rb +0 -35
- data/spec/features/has_many_empty_array_spec.rb +0 -44
- data/spec/features/ignay_spec.rb +0 -92
- data/spec/features/inheritance_spec.rb +0 -121
- data/spec/features/mixed_namespaces_spec.rb +0 -60
- data/spec/features/parse_with_object_to_update_spec.rb +0 -116
- data/spec/features/same_tag_different_meaning_spec.rb +0 -44
- data/spec/features/to_xml_spec.rb +0 -205
- data/spec/features/to_xml_with_namespaces_spec.rb +0 -237
- data/spec/features/wildcard_tag_name_spec.rb +0 -110
- data/spec/features/wrap_spec.rb +0 -87
- data/spec/features/xpath_spec.rb +0 -84
- data/spec/fixtures/address.xml +0 -9
- data/spec/fixtures/ambigous_items.xml +0 -22
- data/spec/fixtures/analytics.xml +0 -61
- data/spec/fixtures/analytics_profile.xml +0 -127
- data/spec/fixtures/atom.xml +0 -19
- data/spec/fixtures/commit.xml +0 -52
- data/spec/fixtures/current_weather.xml +0 -89
- data/spec/fixtures/current_weather_missing_elements.xml +0 -18
- data/spec/fixtures/default_namespace_combi.xml +0 -6
- data/spec/fixtures/dictionary.xml +0 -20
- data/spec/fixtures/family_tree.xml +0 -21
- data/spec/fixtures/inagy.xml +0 -85
- data/spec/fixtures/lastfm.xml +0 -355
- data/spec/fixtures/multiple_namespaces.xml +0 -170
- data/spec/fixtures/multiple_primitives.xml +0 -5
- data/spec/fixtures/optional_attributes.xml +0 -6
- data/spec/fixtures/pita.xml +0 -133
- data/spec/fixtures/posts.xml +0 -23
- data/spec/fixtures/product_default_namespace.xml +0 -18
- data/spec/fixtures/product_no_namespace.xml +0 -10
- data/spec/fixtures/product_single_namespace.xml +0 -10
- data/spec/fixtures/quarters.xml +0 -19
- data/spec/fixtures/radar.xml +0 -21
- data/spec/fixtures/set_config_options.xml +0 -3
- data/spec/fixtures/statuses.xml +0 -422
- data/spec/fixtures/subclass_namespace.xml +0 -50
- data/spec/fixtures/unformatted_address.xml +0 -1
- data/spec/fixtures/wrapper.xml +0 -11
- data/spec/happymapper/anonymous_mapper_spec.rb +0 -158
- data/spec/happymapper/attribute_spec.rb +0 -12
- data/spec/happymapper/item_spec.rb +0 -177
- data/spec/happymapper_spec.rb +0 -1208
- data/spec/spec_helper.rb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df07426975e91e50aa2aec4abd1583c85021a314296b10b06079e09126198120
|
4
|
+
data.tar.gz: 910f91cb9ed649317e82605c8571c9a59744e23d53a327e2b228f32a8f275758
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e2c3a0b37ab88d2887b6c5b3e6043c33606102a2e8389e591f259d26b5bd1cc973dcdcb73316b287c0132f2ce5e9c9f4fd3ecfa8904f779eccc5833bfab4342
|
7
|
+
data.tar.gz: ba72beaa7d76b55268c0da2e0957604a280d66cba3b334a6fc4a0ee483afc21e3f696d5fd0c5c5ac6d103f94f9a6cab9b20c6541fd5ef36043b5a28a59aa9e05
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.9.0 / 2022-01-21
|
4
|
+
|
5
|
+
* Add official support for Ruby 2.7, 3.0 and 3.1
|
6
|
+
* Drop support for Ruby 2.3, 2.4 and 2.5
|
7
|
+
* Fix handling of attributes and elements with `state_when_nil` set
|
8
|
+
([#165](https://github.com/mvz/happymapper/pull/165))
|
9
|
+
|
3
10
|
## 0.8.1 / 2019-03-18
|
4
11
|
|
5
12
|
* Allow requiring `nokogiri-happymapper`
|
data/README.md
CHANGED
@@ -7,9 +7,6 @@ This project is a fork of the great work done first by
|
|
7
7
|
[jnunemaker](https://github.com/jnunemaker/happymapper).
|
8
8
|
|
9
9
|
[![Gem Version](https://badge.fury.io/rb/nokogiri-happymapper.svg)](https://badge.fury.io/rb/nokogiri-happymapper)
|
10
|
-
[![Build Status](https://travis-ci.org/mvz/happymapper.svg?branch=master)](https://travis-ci.org/mvz/happymapper)
|
11
|
-
[![Coverage Status](https://coveralls.io/repos/github/mvz/happymapper/badge.svg?branch=master)](https://coveralls.io/github/mvz/happymapper?branch=master)
|
12
|
-
[![Depfu](https://badges.depfu.com/badges/1707c8c2322e2ed267cf88bd4fb12b66/overview.svg)](https://depfu.com/github/mvz/happymapper)
|
13
10
|
[![Maintainability](https://api.codeclimate.com/v1/badges/491015f82bd2a45fd9d3/maintainability)](https://codeclimate.com/github/mvz/happymapper/maintainability)
|
14
11
|
|
15
12
|
## Major Differences
|
data/lib/happymapper/element.rb
CHANGED
@@ -41,8 +41,8 @@ module HappyMapper
|
|
41
41
|
result.attribute_nodes.each do |xml_attribute|
|
42
42
|
next unless (attribute_options = options[:attributes][xml_attribute.name.to_sym])
|
43
43
|
|
44
|
-
attribute_value = Attribute.new(xml_attribute.name.to_sym, *attribute_options)
|
45
|
-
|
44
|
+
attribute_value = Attribute.new(xml_attribute.name.to_sym, *attribute_options)
|
45
|
+
.from_xml_node(result, namespace, xpath_options)
|
46
46
|
|
47
47
|
method_name = xml_attribute.name.tr('-', '_')
|
48
48
|
value.define_singleton_method(method_name) { attribute_value }
|
@@ -103,11 +103,9 @@ module HappyMapper
|
|
103
103
|
register_type Float, &:to_f
|
104
104
|
|
105
105
|
register_type Time do |value|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
Time.at(value.to_i)
|
110
|
-
end
|
106
|
+
Time.parse(value.to_s)
|
107
|
+
rescue StandardError
|
108
|
+
Time.at(value.to_i)
|
111
109
|
end
|
112
110
|
|
113
111
|
register_type DateTime do |value|
|
data/lib/happymapper/version.rb
CHANGED
data/lib/happymapper.rb
CHANGED
@@ -8,6 +8,7 @@ require 'happymapper/anonymous_mapper'
|
|
8
8
|
|
9
9
|
module HappyMapper
|
10
10
|
class Boolean; end
|
11
|
+
|
11
12
|
class XmlContent; end
|
12
13
|
|
13
14
|
def self.parse(xml_content)
|
@@ -249,15 +250,19 @@ module HappyMapper
|
|
249
250
|
# onto this class. They get/set the value by passing thru to the anonymous class.
|
250
251
|
passthrus = wrapper.attributes + wrapper.elements
|
251
252
|
passthrus.each do |item|
|
253
|
+
method_name = item.method_name
|
252
254
|
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
253
|
-
def #{
|
254
|
-
@#{name} ||=
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
255
|
+
def #{method_name} # def property
|
256
|
+
@#{name} ||= # @wrapper ||=
|
257
|
+
wrapper_anonymous_classes['#{wrapper_key}'].new # wrapper_anonymous_classes['#<Class:0x0000555b7d0b9220>'].new
|
258
|
+
@#{name}.#{method_name} # @wrapper.property
|
259
|
+
end # end
|
260
|
+
|
261
|
+
def #{method_name}=(value) # def property=(value)
|
262
|
+
@#{name} ||= # @wrapper ||=
|
263
|
+
wrapper_anonymous_classes['#{wrapper_key}'].new # wrapper_anonymous_classes['#<Class:0x0000555b7d0b9220>'].new
|
264
|
+
@#{name}.#{method_name} = value # @wrapper.property = value
|
265
|
+
end # end
|
261
266
|
RUBY
|
262
267
|
end
|
263
268
|
|
@@ -460,7 +465,7 @@ module HappyMapper
|
|
460
465
|
# attr_writer :xml_value, or attr_accessor :xml_value then we want to
|
461
466
|
# assign the current xml that we just parsed to the xml_value
|
462
467
|
|
463
|
-
if obj.respond_to?(
|
468
|
+
if obj.respond_to?(:xml_value=)
|
464
469
|
obj.xml_value = node.to_xml(save_with: Nokogiri::XML::Node::SaveOptions::AS_XML)
|
465
470
|
end
|
466
471
|
|
@@ -468,7 +473,7 @@ module HappyMapper
|
|
468
473
|
# attr_write :xml_content, or attr_accessor :xml_content then we want to
|
469
474
|
# assign the child xml that we just parsed to the xml_content
|
470
475
|
|
471
|
-
if obj.respond_to?(
|
476
|
+
if obj.respond_to?(:xml_content=)
|
472
477
|
node = node.children if node.respond_to?(:children)
|
473
478
|
obj.xml_content = node.to_xml(save_with: Nokogiri::XML::Node::SaveOptions::AS_XML)
|
474
479
|
end
|
@@ -554,15 +559,11 @@ module HappyMapper
|
|
554
559
|
# When a content has been defined we add the resulting value
|
555
560
|
# the output xml
|
556
561
|
#
|
557
|
-
if (content = self.class.defined_content)
|
558
|
-
|
559
|
-
|
560
|
-
value = send(content.name)
|
561
|
-
value = apply_on_save_action(content, value)
|
562
|
-
|
563
|
-
builder.text(value)
|
564
|
-
end
|
562
|
+
if (content = self.class.defined_content) && !content.options[:read_only]
|
563
|
+
value = send(content.name)
|
564
|
+
value = apply_on_save_action(content, value)
|
565
565
|
|
566
|
+
builder.text(value)
|
566
567
|
end
|
567
568
|
|
568
569
|
#
|
@@ -636,33 +637,27 @@ module HappyMapper
|
|
636
637
|
# when it comes to saving the xml document; so we will not go into any of
|
637
638
|
# the below process
|
638
639
|
#
|
639
|
-
if attribute.options[:read_only]
|
640
|
-
[]
|
641
|
-
else
|
640
|
+
next if attribute.options[:read_only]
|
642
641
|
|
643
|
-
|
644
|
-
|
642
|
+
value = send(attribute.method_name)
|
643
|
+
value = nil if value == attribute.default
|
645
644
|
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
645
|
+
#
|
646
|
+
# Apply any on_save lambda/proc or value defined on the attribute.
|
647
|
+
#
|
648
|
+
value = apply_on_save_action(attribute, value)
|
650
649
|
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
attribute_namespace = attribute.options[:namespace]
|
657
|
-
["#{attribute_namespace ? "#{attribute_namespace}:" : ''}#{attribute.tag}", value]
|
658
|
-
else
|
659
|
-
[]
|
660
|
-
end
|
650
|
+
#
|
651
|
+
# Attributes that have a nil value should be ignored unless they explicitly
|
652
|
+
# state that they should be expressed in the output.
|
653
|
+
#
|
654
|
+
next if value.nil? && !attribute.options[:state_when_nil]
|
661
655
|
|
662
|
-
|
663
|
-
|
656
|
+
attribute_namespace = attribute.options[:namespace]
|
657
|
+
["#{attribute_namespace ? "#{attribute_namespace}:" : ''}#{attribute.tag}", value]
|
658
|
+
end.compact
|
664
659
|
|
665
|
-
|
660
|
+
attributes.to_h
|
666
661
|
end
|
667
662
|
|
668
663
|
#
|
@@ -674,9 +669,9 @@ module HappyMapper
|
|
674
669
|
# which means that it is the default namespace of the code.
|
675
670
|
#
|
676
671
|
def register_namespaces_with_builder(builder)
|
677
|
-
return unless self.class.instance_variable_get(
|
672
|
+
return unless self.class.instance_variable_get(:@registered_namespaces)
|
678
673
|
|
679
|
-
self.class.instance_variable_get(
|
674
|
+
self.class.instance_variable_get(:@registered_namespaces).sort.each do |name, href|
|
680
675
|
name = nil if name == 'xmlns'
|
681
676
|
builder.doc.root.add_namespace(name, href)
|
682
677
|
end
|
@@ -726,29 +721,26 @@ module HappyMapper
|
|
726
721
|
element.options[:namespace],
|
727
722
|
element.options[:tag] || nil)
|
728
723
|
|
729
|
-
elsif !item.nil?
|
724
|
+
elsif !item.nil? || element.options[:state_when_nil]
|
730
725
|
|
731
726
|
item_namespace = element.options[:namespace] || self.class.namespace || default_namespace
|
732
727
|
|
733
728
|
#
|
734
|
-
# When a value exists
|
729
|
+
# When a value exists or the tag should always be emitted,
|
730
|
+
# we should append the value for the tag
|
735
731
|
#
|
736
732
|
if item_namespace
|
737
733
|
xml[item_namespace].send("#{tag}_", item.to_s)
|
738
734
|
else
|
739
735
|
xml.send("#{tag}_", item.to_s)
|
740
736
|
end
|
741
|
-
|
742
|
-
elsif element.options[:state_when_nil]
|
743
|
-
|
744
|
-
#
|
745
|
-
# Normally a nil value would be ignored, however if specified then
|
746
|
-
# an empty element will be written to the xml
|
747
|
-
#
|
748
|
-
xml.send("#{tag}_", '')
|
749
737
|
end
|
750
738
|
end
|
751
739
|
end
|
740
|
+
|
741
|
+
def wrapper_anonymous_classes
|
742
|
+
self.class.instance_variable_get(:@wrapper_anonymous_classes)
|
743
|
+
end
|
752
744
|
end
|
753
745
|
|
754
746
|
require 'happymapper/supported_types'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nokogiri-happymapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Damien Le Berrigaud
|
@@ -11,10 +11,10 @@ authors:
|
|
11
11
|
- Etienne Vallette d'Osia
|
12
12
|
- Franklin Webber
|
13
13
|
- Matijs van Zuijlen
|
14
|
-
autorequire:
|
14
|
+
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date:
|
17
|
+
date: 2022-01-21 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: nokogiri
|
@@ -30,20 +30,48 @@ dependencies:
|
|
30
30
|
- - "~>"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '1.5'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: pry
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 0.14.0
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 0.14.0
|
33
47
|
- !ruby/object:Gem::Dependency
|
34
48
|
name: rake
|
35
49
|
requirement: !ruby/object:Gem::Requirement
|
36
50
|
requirements:
|
37
51
|
- - "~>"
|
38
52
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
53
|
+
version: '13.0'
|
40
54
|
type: :development
|
41
55
|
prerelease: false
|
42
56
|
version_requirements: !ruby/object:Gem::Requirement
|
43
57
|
requirements:
|
44
58
|
- - "~>"
|
45
59
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
60
|
+
version: '13.0'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rake-manifest
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 0.2.0
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 0.2.0
|
47
75
|
- !ruby/object:Gem::Dependency
|
48
76
|
name: rspec
|
49
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,20 +86,76 @@ dependencies:
|
|
58
86
|
- - "~>"
|
59
87
|
- !ruby/object:Gem::Version
|
60
88
|
version: '3.0'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: rubocop
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: 1.25.0
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 1.25.0
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: rubocop-packaging
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.5.0
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 0.5.0
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: rubocop-performance
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 1.13.0
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: 1.13.0
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: rubocop-rspec
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - "~>"
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: 2.7.0
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - "~>"
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: 2.7.0
|
61
145
|
- !ruby/object:Gem::Dependency
|
62
146
|
name: simplecov
|
63
147
|
requirement: !ruby/object:Gem::Requirement
|
64
148
|
requirements:
|
65
149
|
- - "~>"
|
66
150
|
- !ruby/object:Gem::Version
|
67
|
-
version: 0.
|
151
|
+
version: 0.21.1
|
68
152
|
type: :development
|
69
153
|
prerelease: false
|
70
154
|
version_requirements: !ruby/object:Gem::Requirement
|
71
155
|
requirements:
|
72
156
|
- - "~>"
|
73
157
|
- !ruby/object:Gem::Version
|
74
|
-
version: 0.
|
158
|
+
version: 0.21.1
|
75
159
|
description: Object to XML Mapping Library, using Nokogiri (fork from John Nunemaker's
|
76
160
|
Happymapper)
|
77
161
|
email: matijs@matijs.net
|
@@ -94,58 +178,12 @@ files:
|
|
94
178
|
- lib/happymapper/text_node.rb
|
95
179
|
- lib/happymapper/version.rb
|
96
180
|
- lib/nokogiri-happymapper.rb
|
97
|
-
- spec/features/after_parse_callbacks_spec.rb
|
98
|
-
- spec/features/attribute_default_value_spec.rb
|
99
|
-
- spec/features/attributes_spec.rb
|
100
|
-
- spec/features/has_many_empty_array_spec.rb
|
101
|
-
- spec/features/ignay_spec.rb
|
102
|
-
- spec/features/inheritance_spec.rb
|
103
|
-
- spec/features/mixed_namespaces_spec.rb
|
104
|
-
- spec/features/parse_with_object_to_update_spec.rb
|
105
|
-
- spec/features/same_tag_different_meaning_spec.rb
|
106
|
-
- spec/features/to_xml_spec.rb
|
107
|
-
- spec/features/to_xml_with_namespaces_spec.rb
|
108
|
-
- spec/features/wildcard_tag_name_spec.rb
|
109
|
-
- spec/features/wrap_spec.rb
|
110
|
-
- spec/features/xpath_spec.rb
|
111
|
-
- spec/fixtures/address.xml
|
112
|
-
- spec/fixtures/ambigous_items.xml
|
113
|
-
- spec/fixtures/analytics.xml
|
114
|
-
- spec/fixtures/analytics_profile.xml
|
115
|
-
- spec/fixtures/atom.xml
|
116
|
-
- spec/fixtures/commit.xml
|
117
|
-
- spec/fixtures/current_weather.xml
|
118
|
-
- spec/fixtures/current_weather_missing_elements.xml
|
119
|
-
- spec/fixtures/default_namespace_combi.xml
|
120
|
-
- spec/fixtures/dictionary.xml
|
121
|
-
- spec/fixtures/family_tree.xml
|
122
|
-
- spec/fixtures/inagy.xml
|
123
|
-
- spec/fixtures/lastfm.xml
|
124
|
-
- spec/fixtures/multiple_namespaces.xml
|
125
|
-
- spec/fixtures/multiple_primitives.xml
|
126
|
-
- spec/fixtures/optional_attributes.xml
|
127
|
-
- spec/fixtures/pita.xml
|
128
|
-
- spec/fixtures/posts.xml
|
129
|
-
- spec/fixtures/product_default_namespace.xml
|
130
|
-
- spec/fixtures/product_no_namespace.xml
|
131
|
-
- spec/fixtures/product_single_namespace.xml
|
132
|
-
- spec/fixtures/quarters.xml
|
133
|
-
- spec/fixtures/radar.xml
|
134
|
-
- spec/fixtures/set_config_options.xml
|
135
|
-
- spec/fixtures/statuses.xml
|
136
|
-
- spec/fixtures/subclass_namespace.xml
|
137
|
-
- spec/fixtures/unformatted_address.xml
|
138
|
-
- spec/fixtures/wrapper.xml
|
139
|
-
- spec/happymapper/anonymous_mapper_spec.rb
|
140
|
-
- spec/happymapper/attribute_spec.rb
|
141
|
-
- spec/happymapper/item_spec.rb
|
142
|
-
- spec/happymapper_spec.rb
|
143
|
-
- spec/spec_helper.rb
|
144
181
|
homepage: http://github.com/mvz/happymapper
|
145
182
|
licenses:
|
146
183
|
- MIT
|
147
|
-
metadata:
|
148
|
-
|
184
|
+
metadata:
|
185
|
+
rubygems_mfa_required: 'true'
|
186
|
+
post_install_message:
|
149
187
|
rdoc_options: []
|
150
188
|
require_paths:
|
151
189
|
- lib
|
@@ -153,62 +191,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
153
191
|
requirements:
|
154
192
|
- - ">="
|
155
193
|
- !ruby/object:Gem::Version
|
156
|
-
version: 2.
|
194
|
+
version: 2.6.0
|
157
195
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
158
196
|
requirements:
|
159
197
|
- - ">="
|
160
198
|
- !ruby/object:Gem::Version
|
161
199
|
version: '0'
|
162
200
|
requirements: []
|
163
|
-
rubygems_version: 3.
|
164
|
-
signing_key:
|
201
|
+
rubygems_version: 3.3.3
|
202
|
+
signing_key:
|
165
203
|
specification_version: 4
|
166
204
|
summary: Provides a simple way to map XML to Ruby Objects and back again.
|
167
|
-
test_files:
|
168
|
-
- spec/features/after_parse_callbacks_spec.rb
|
169
|
-
- spec/features/attribute_default_value_spec.rb
|
170
|
-
- spec/features/attributes_spec.rb
|
171
|
-
- spec/features/has_many_empty_array_spec.rb
|
172
|
-
- spec/features/ignay_spec.rb
|
173
|
-
- spec/features/inheritance_spec.rb
|
174
|
-
- spec/features/mixed_namespaces_spec.rb
|
175
|
-
- spec/features/parse_with_object_to_update_spec.rb
|
176
|
-
- spec/features/same_tag_different_meaning_spec.rb
|
177
|
-
- spec/features/to_xml_spec.rb
|
178
|
-
- spec/features/to_xml_with_namespaces_spec.rb
|
179
|
-
- spec/features/wildcard_tag_name_spec.rb
|
180
|
-
- spec/features/wrap_spec.rb
|
181
|
-
- spec/features/xpath_spec.rb
|
182
|
-
- spec/fixtures/address.xml
|
183
|
-
- spec/fixtures/ambigous_items.xml
|
184
|
-
- spec/fixtures/analytics.xml
|
185
|
-
- spec/fixtures/analytics_profile.xml
|
186
|
-
- spec/fixtures/atom.xml
|
187
|
-
- spec/fixtures/commit.xml
|
188
|
-
- spec/fixtures/current_weather.xml
|
189
|
-
- spec/fixtures/current_weather_missing_elements.xml
|
190
|
-
- spec/fixtures/default_namespace_combi.xml
|
191
|
-
- spec/fixtures/dictionary.xml
|
192
|
-
- spec/fixtures/family_tree.xml
|
193
|
-
- spec/fixtures/inagy.xml
|
194
|
-
- spec/fixtures/lastfm.xml
|
195
|
-
- spec/fixtures/multiple_namespaces.xml
|
196
|
-
- spec/fixtures/multiple_primitives.xml
|
197
|
-
- spec/fixtures/optional_attributes.xml
|
198
|
-
- spec/fixtures/pita.xml
|
199
|
-
- spec/fixtures/posts.xml
|
200
|
-
- spec/fixtures/product_default_namespace.xml
|
201
|
-
- spec/fixtures/product_no_namespace.xml
|
202
|
-
- spec/fixtures/product_single_namespace.xml
|
203
|
-
- spec/fixtures/quarters.xml
|
204
|
-
- spec/fixtures/radar.xml
|
205
|
-
- spec/fixtures/set_config_options.xml
|
206
|
-
- spec/fixtures/statuses.xml
|
207
|
-
- spec/fixtures/subclass_namespace.xml
|
208
|
-
- spec/fixtures/unformatted_address.xml
|
209
|
-
- spec/fixtures/wrapper.xml
|
210
|
-
- spec/happymapper/anonymous_mapper_spec.rb
|
211
|
-
- spec/happymapper/attribute_spec.rb
|
212
|
-
- spec/happymapper/item_spec.rb
|
213
|
-
- spec/happymapper_spec.rb
|
214
|
-
- spec/spec_helper.rb
|
205
|
+
test_files: []
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe 'after_parse callbacks', type: :feature do
|
6
|
-
module AfterParseSpec
|
7
|
-
class Address
|
8
|
-
include HappyMapper
|
9
|
-
element :street, String
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
after do
|
14
|
-
AfterParseSpec::Address.after_parse_callbacks.clear
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'callbacks with the newly created object' do
|
18
|
-
from_cb = nil
|
19
|
-
called = false
|
20
|
-
cb1 = proc { |object| from_cb = object }
|
21
|
-
cb2 = proc { called = true }
|
22
|
-
AfterParseSpec::Address.after_parse(&cb1)
|
23
|
-
AfterParseSpec::Address.after_parse(&cb2)
|
24
|
-
|
25
|
-
object = AfterParseSpec::Address.parse fixture_file('address.xml')
|
26
|
-
|
27
|
-
aggregate_failures do
|
28
|
-
expect(from_cb).to eq(object)
|
29
|
-
expect(called).to eq(true)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe 'Attribute Default Value', type: :feature do
|
6
|
-
context 'when given a default value' do
|
7
|
-
class Meal
|
8
|
-
include HappyMapper
|
9
|
-
tag 'meal'
|
10
|
-
attribute :type, String, default: 'omnivore'
|
11
|
-
end
|
12
|
-
|
13
|
-
let(:default_meal_type) { 'omnivore' }
|
14
|
-
|
15
|
-
context 'when no value has been specified' do
|
16
|
-
it 'returns the default value' do
|
17
|
-
meal = Meal.parse('<meal />')
|
18
|
-
expect(meal.type).to eq default_meal_type
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
context 'when saving to xml' do
|
23
|
-
let(:expected_xml) { %(<?xml version="1.0"?>\n<meal/>\n) }
|
24
|
-
|
25
|
-
it 'the default value is not included' do
|
26
|
-
meal = Meal.new
|
27
|
-
expect(meal.to_xml).to eq expected_xml
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context 'when a new, non-nil value has been set' do
|
32
|
-
let(:expected_xml) { %(<?xml version="1.0"?>\n<meal type="kosher"/>\n) }
|
33
|
-
|
34
|
-
it 'returns the new value' do
|
35
|
-
meal = Meal.parse('<meal />')
|
36
|
-
meal.type = 'vegan'
|
37
|
-
|
38
|
-
expect(meal.type).not_to eq default_meal_type
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'saves the new value to the xml' do
|
42
|
-
meal = Meal.new
|
43
|
-
meal.type = 'kosher'
|
44
|
-
expect(meal.to_xml).to eq expected_xml
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe 'Attribute Method Conversion', type: :feature do
|
6
|
-
module AttributeMethodConversion
|
7
|
-
class Document
|
8
|
-
include HappyMapper
|
9
|
-
|
10
|
-
has_many :link, String, attributes: { 'data-src': String, type: String, href: String }
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
let(:xml_document) do
|
15
|
-
%(<document>
|
16
|
-
<link data-src='http://cooking.com/roastbeef' type='recipe'>Roast Beef</link>
|
17
|
-
</document>)
|
18
|
-
end
|
19
|
-
|
20
|
-
let(:document) do
|
21
|
-
AttributeMethodConversion::Document.parse(xml_document, single: true)
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'link' do
|
25
|
-
expect(document.link).to eq ['Roast Beef']
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'link.data_src' do
|
29
|
-
expect(document.link.first.data_src).to eq 'http://cooking.com/roastbeef'
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'link.type' do
|
33
|
-
expect(document.link.first.type).to eq 'recipe'
|
34
|
-
end
|
35
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
module Sheep
|
6
|
-
class Item
|
7
|
-
include HappyMapper
|
8
|
-
end
|
9
|
-
|
10
|
-
class Navigator
|
11
|
-
include HappyMapper
|
12
|
-
tag 'navigator'
|
13
|
-
|
14
|
-
# This is purposefully set to have the name 'items' with the tag 'item'.
|
15
|
-
# The idea is that it should not find the empty items contained within the
|
16
|
-
# xml and return an empty array. This exercises the order of how nodes
|
17
|
-
# are searched for within an XML document.
|
18
|
-
has_many :items, Item, tag: 'item'
|
19
|
-
|
20
|
-
has_many :items_with_a_different_name, Item, tag: 'item'
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
RSpec.describe 'empty arrays of items based on tags', type: :feature do
|
25
|
-
let(:xml) do
|
26
|
-
<<-XML
|
27
|
-
<navigator>
|
28
|
-
<items/>
|
29
|
-
</navigator>
|
30
|
-
XML
|
31
|
-
end
|
32
|
-
|
33
|
-
let(:navigator) do
|
34
|
-
Sheep::Navigator.parse(xml)
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'returns an empty array' do
|
38
|
-
expect(navigator.items_with_a_different_name).to be_empty
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'looks for items based on the element tag, not the element name' do
|
42
|
-
expect(navigator.items).to be_empty
|
43
|
-
end
|
44
|
-
end
|