lutaml-model 0.3.1 → 0.3.3
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/.rubocop.yml +0 -5
- data/.rubocop_todo.yml +21 -101
- data/Gemfile +3 -18
- data/README.adoc +145 -6
- data/lib/lutaml/model/attribute.rb +15 -2
- data/lib/lutaml/model/config.rb +0 -1
- data/lib/lutaml/model/json_adapter/json_document.rb +20 -0
- data/lib/lutaml/model/json_adapter/json_object.rb +28 -0
- data/lib/lutaml/model/json_adapter/{multi_json.rb → multi_json_adapter.rb} +2 -3
- data/lib/lutaml/model/json_adapter/{standard.rb → standard_json_adapter.rb} +2 -3
- data/lib/lutaml/model/json_adapter.rb +1 -31
- data/lib/lutaml/model/key_value_mapping.rb +0 -1
- data/lib/lutaml/model/key_value_mapping_rule.rb +0 -1
- data/lib/lutaml/model/mapping_hash.rb +0 -2
- data/lib/lutaml/model/mapping_rule.rb +0 -1
- data/lib/lutaml/model/schema/json_schema.rb +0 -1
- data/lib/lutaml/model/schema/relaxng_schema.rb +0 -1
- data/lib/lutaml/model/schema/xsd_schema.rb +0 -1
- data/lib/lutaml/model/schema/yaml_schema.rb +0 -1
- data/lib/lutaml/model/schema.rb +0 -1
- data/lib/lutaml/model/serializable.rb +0 -1
- data/lib/lutaml/model/serialize.rb +22 -4
- data/lib/lutaml/model/toml_adapter/toml_document.rb +20 -0
- data/lib/lutaml/model/toml_adapter/toml_object.rb +28 -0
- data/lib/lutaml/model/toml_adapter/toml_rb_adapter.rb +2 -3
- data/lib/lutaml/model/toml_adapter/tomlib_adapter.rb +2 -3
- data/lib/lutaml/model/toml_adapter.rb +0 -31
- data/lib/lutaml/model/type/date_time.rb +20 -0
- data/lib/lutaml/model/type/json.rb +34 -0
- data/lib/lutaml/model/type/time_without_date.rb +4 -3
- data/lib/lutaml/model/type.rb +61 -124
- data/lib/lutaml/model/version.rb +1 -1
- data/lib/lutaml/model/xml_adapter/nokogiri_adapter.rb +9 -8
- data/lib/lutaml/model/xml_adapter/oga_adapter.rb +4 -5
- data/lib/lutaml/model/xml_adapter/ox_adapter.rb +14 -13
- data/lib/lutaml/model/xml_adapter/xml_attribute.rb +27 -0
- data/lib/lutaml/model/xml_adapter/xml_document.rb +185 -0
- data/lib/lutaml/model/xml_adapter/xml_element.rb +94 -0
- data/lib/lutaml/model/xml_adapter/xml_namespace.rb +49 -0
- data/lib/lutaml/model/xml_adapter.rb +0 -285
- data/lib/lutaml/model/xml_mapping.rb +7 -7
- data/lib/lutaml/model/xml_mapping_rule.rb +3 -4
- data/lib/lutaml/model/yaml_adapter/standard_yaml_adapter.rb +34 -0
- data/lib/lutaml/model/yaml_adapter/yaml_document.rb +20 -0
- data/lib/lutaml/model/yaml_adapter/yaml_object.rb +28 -0
- data/lib/lutaml/model/yaml_adapter.rb +1 -27
- data/lib/lutaml/model.rb +0 -5
- metadata +17 -5
- data/lib/lutaml/model/xml_namespace.rb +0 -47
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c1c49d91f74f3454b6a0e2aaf34bfef142630fa77e98a509535b53b156f603e7
|
4
|
+
data.tar.gz: 12880e7b701bf68c2a77efad6148daeac040a1956f1f1e1a0d790657c79f346c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08020dbbadaea322601ce9c0536cf3a49aeaa44679d8caf278995d0f7b1c41ba12761897db7f54390bb1288c84ccedc6a0a45bee980926fecca18927a17c8de7'
|
7
|
+
data.tar.gz: 363806235f0d4308f127d84590d1b2d2bf2af5adafd27974fa6a8600f5e67afac6efc27f3ee810eea95265d6764b6f4538672f18c5c9a3e243c31f236595fe21
|
data/.rubocop.yml
CHANGED
@@ -2,12 +2,8 @@ inherit_from:
|
|
2
2
|
- https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
|
3
3
|
- .rubocop_todo.yml
|
4
4
|
|
5
|
-
# local repo-specific modifications
|
6
|
-
# ...
|
7
|
-
#
|
8
5
|
require:
|
9
6
|
- rubocop-performance
|
10
|
-
- rubocop-rails
|
11
7
|
- rubocop-rake
|
12
8
|
- rubocop-rspec
|
13
9
|
|
@@ -15,5 +11,4 @@ AllCops:
|
|
15
11
|
TargetRubyVersion: 3.0
|
16
12
|
NewCops: enable
|
17
13
|
Exclude:
|
18
|
-
- 'lib/sts/mapper.rb'
|
19
14
|
- 'vendor/**/*'
|
data/.rubocop_todo.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on 2024-
|
3
|
+
# on 2024-08-16 03:28:27 UTC using RuboCop version 1.65.1.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
@@ -14,7 +14,7 @@ Gemspec/RequireMFA:
|
|
14
14
|
Exclude:
|
15
15
|
- 'lutaml-model.gemspec'
|
16
16
|
|
17
|
-
# Offense count:
|
17
|
+
# Offense count: 32
|
18
18
|
# This cop supports safe autocorrection (--autocorrect).
|
19
19
|
# Configuration parameters: Max, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns.
|
20
20
|
# URISchemes: http, https
|
@@ -22,10 +22,11 @@ Layout/LineLength:
|
|
22
22
|
Exclude:
|
23
23
|
- 'lib/lutaml/model/serialize.rb'
|
24
24
|
- 'lib/lutaml/model/type.rb'
|
25
|
-
- 'lib/lutaml/model/xml_adapter.rb'
|
26
25
|
- 'lib/lutaml/model/xml_adapter/nokogiri_adapter.rb'
|
27
26
|
- 'lib/lutaml/model/xml_adapter/ox_adapter.rb'
|
28
|
-
- '
|
27
|
+
- 'lib/lutaml/model/xml_adapter/xml_document.rb'
|
28
|
+
- 'spec/lutaml/model/delegation_spec.rb'
|
29
|
+
- 'spec/lutaml/model/serializable_spec.rb'
|
29
30
|
|
30
31
|
# Offense count: 20
|
31
32
|
# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes, Max.
|
@@ -33,9 +34,9 @@ Metrics/AbcSize:
|
|
33
34
|
Exclude:
|
34
35
|
- 'lib/lutaml/model/serialize.rb'
|
35
36
|
- 'lib/lutaml/model/type.rb'
|
36
|
-
- 'lib/lutaml/model/xml_adapter.rb'
|
37
37
|
- 'lib/lutaml/model/xml_adapter/nokogiri_adapter.rb'
|
38
38
|
- 'lib/lutaml/model/xml_adapter/ox_adapter.rb'
|
39
|
+
- 'lib/lutaml/model/xml_adapter/xml_document.rb'
|
39
40
|
|
40
41
|
# Offense count: 3
|
41
42
|
# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns, inherit_mode.
|
@@ -43,50 +44,35 @@ Metrics/AbcSize:
|
|
43
44
|
Metrics/BlockLength:
|
44
45
|
Max: 30
|
45
46
|
|
46
|
-
# Offense count:
|
47
|
+
# Offense count: 19
|
47
48
|
# Configuration parameters: AllowedMethods, AllowedPatterns, Max.
|
48
49
|
Metrics/CyclomaticComplexity:
|
49
50
|
Exclude:
|
50
51
|
- 'lib/lutaml/model/serialize.rb'
|
51
52
|
- 'lib/lutaml/model/type.rb'
|
52
|
-
- 'lib/lutaml/model/xml_adapter.rb'
|
53
53
|
- 'lib/lutaml/model/xml_adapter/nokogiri_adapter.rb'
|
54
54
|
- 'lib/lutaml/model/xml_adapter/ox_adapter.rb'
|
55
|
+
- 'lib/lutaml/model/xml_adapter/xml_document.rb'
|
55
56
|
|
56
|
-
# Offense count:
|
57
|
+
# Offense count: 27
|
57
58
|
# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns.
|
58
59
|
Metrics/MethodLength:
|
59
|
-
Max:
|
60
|
+
Max: 41
|
60
61
|
|
61
|
-
# Offense count:
|
62
|
+
# Offense count: 4
|
62
63
|
# Configuration parameters: CountKeywordArgs, MaxOptionalParameters.
|
63
64
|
Metrics/ParameterLists:
|
64
65
|
Max: 9
|
65
66
|
|
66
|
-
# Offense count:
|
67
|
+
# Offense count: 17
|
67
68
|
# Configuration parameters: AllowedMethods, AllowedPatterns, Max.
|
68
69
|
Metrics/PerceivedComplexity:
|
69
70
|
Exclude:
|
70
71
|
- 'lib/lutaml/model/serialize.rb'
|
71
72
|
- 'lib/lutaml/model/type.rb'
|
72
|
-
- 'lib/lutaml/model/xml_adapter.rb'
|
73
73
|
- 'lib/lutaml/model/xml_adapter/nokogiri_adapter.rb'
|
74
74
|
- 'lib/lutaml/model/xml_adapter/ox_adapter.rb'
|
75
|
-
|
76
|
-
# Offense count: 2
|
77
|
-
# This cop supports unsafe autocorrection (--autocorrect-all).
|
78
|
-
RSpec/BeEq:
|
79
|
-
Exclude:
|
80
|
-
- 'spec/lutaml/model/collection_spec.rb'
|
81
|
-
- 'spec/lutaml/model/simple_model_spec.rb'
|
82
|
-
|
83
|
-
# Offense count: 1
|
84
|
-
# This cop supports safe autocorrection (--autocorrect).
|
85
|
-
# Configuration parameters: EnforcedStyle.
|
86
|
-
# SupportedStyles: be, be_nil
|
87
|
-
RSpec/BeNil:
|
88
|
-
Exclude:
|
89
|
-
- 'spec/lutaml/model_spec.rb'
|
75
|
+
- 'lib/lutaml/model/xml_adapter/xml_document.rb'
|
90
76
|
|
91
77
|
# Offense count: 6
|
92
78
|
# Configuration parameters: Prefixes, AllowedPatterns.
|
@@ -97,22 +83,10 @@ RSpec/ContextWording:
|
|
97
83
|
- 'spec/lutaml/model/xml_adapter/oga_adapter_spec.rb'
|
98
84
|
- 'spec/lutaml/model/xml_adapter/ox_adapter_spec.rb'
|
99
85
|
|
100
|
-
# Offense count:
|
101
|
-
# This cop supports unsafe autocorrection (--autocorrect-all).
|
102
|
-
# Configuration parameters: SkipBlocks, EnforcedStyle, OnlyStaticConstants.
|
103
|
-
# SupportedStyles: described_class, explicit
|
104
|
-
RSpec/DescribedClass:
|
105
|
-
Exclude:
|
106
|
-
- 'spec/address_spec.rb'
|
107
|
-
- 'spec/lutaml/model/custom_serialization_spec.rb'
|
108
|
-
- 'spec/lutaml/model/defaults_spec.rb'
|
109
|
-
- 'spec/lutaml/model/render_nil_spec.rb'
|
110
|
-
- 'spec/person_spec.rb'
|
111
|
-
|
112
|
-
# Offense count: 60
|
86
|
+
# Offense count: 64
|
113
87
|
# Configuration parameters: CountAsOne.
|
114
88
|
RSpec/ExampleLength:
|
115
|
-
Max:
|
89
|
+
Max: 35
|
116
90
|
|
117
91
|
# Offense count: 2
|
118
92
|
# Configuration parameters: Max, AllowedIdentifiers, AllowedPatterns.
|
@@ -120,27 +94,19 @@ RSpec/IndexedLet:
|
|
120
94
|
Exclude:
|
121
95
|
- 'spec/address_spec.rb'
|
122
96
|
|
123
|
-
# Offense count: 3
|
124
|
-
# This cop supports safe autocorrection (--autocorrect).
|
125
|
-
# Configuration parameters: AutoCorrect.
|
126
|
-
RSpec/LetBeforeExamples:
|
127
|
-
Exclude:
|
128
|
-
- 'spec/lutaml/model/defaults_spec.rb'
|
129
|
-
- 'spec/person_spec.rb'
|
130
|
-
|
131
97
|
# Offense count: 4
|
132
98
|
RSpec/MultipleDescribes:
|
133
99
|
Exclude:
|
134
100
|
- 'spec/lutaml/model/json_adapter_spec.rb'
|
135
101
|
- 'spec/lutaml/model/toml_adapter_spec.rb'
|
102
|
+
- 'spec/lutaml/model/xml_adapter/xml_namespace_spec.rb'
|
136
103
|
- 'spec/lutaml/model/xml_adapter_spec.rb'
|
137
|
-
- 'spec/lutaml/model/xml_namespace_spec.rb'
|
138
104
|
|
139
|
-
# Offense count:
|
105
|
+
# Offense count: 63
|
140
106
|
RSpec/MultipleExpectations:
|
141
107
|
Max: 15
|
142
108
|
|
143
|
-
# Offense count:
|
109
|
+
# Offense count: 11
|
144
110
|
# Configuration parameters: AllowSubject.
|
145
111
|
RSpec/MultipleMemoizedHelpers:
|
146
112
|
Max: 9
|
@@ -149,59 +115,13 @@ RSpec/MultipleMemoizedHelpers:
|
|
149
115
|
RSpec/PendingWithoutReason:
|
150
116
|
Exclude:
|
151
117
|
- 'spec/lutaml/model/xml_adapter/oga_adapter_spec.rb'
|
118
|
+
- 'spec/lutaml/model/xml_adapter/xml_namespace_spec.rb'
|
152
119
|
- 'spec/lutaml/model/xml_adapter_spec.rb'
|
153
|
-
- 'spec/lutaml/model/xml_namespace_spec.rb'
|
154
|
-
|
155
|
-
# Offense count: 3
|
156
|
-
# This cop supports safe autocorrection (--autocorrect).
|
157
|
-
# Configuration parameters: AutoCorrect.
|
158
|
-
RSpec/ScatteredLet:
|
159
|
-
Exclude:
|
160
|
-
- 'spec/lutaml/model/defaults_spec.rb'
|
161
|
-
- 'spec/person_spec.rb'
|
162
120
|
|
163
|
-
# Offense count:
|
121
|
+
# Offense count: 1
|
164
122
|
# Configuration parameters: Include, CustomTransform, IgnoreMethods, IgnoreMetadata.
|
165
123
|
# Include: **/*_spec.rb
|
166
124
|
RSpec/SpecFilePathFormat:
|
167
125
|
Exclude:
|
126
|
+
- '**/spec/routing/**/*'
|
168
127
|
- 'spec/lutaml/model/collection_spec.rb'
|
169
|
-
- 'spec/lutaml/model/xml_adapter/nokogiri_adapter_spec.rb'
|
170
|
-
- 'spec/lutaml/model/xml_adapter/oga_adapter_spec.rb'
|
171
|
-
- 'spec/lutaml/model/xml_adapter/ox_adapter_spec.rb'
|
172
|
-
- 'spec/lutaml/model/yaml_adapter_spec.rb'
|
173
|
-
|
174
|
-
# Offense count: 2
|
175
|
-
# This cop supports unsafe autocorrection (--autocorrect-all).
|
176
|
-
# Configuration parameters: Whitelist, AllowedMethods, AllowedReceivers.
|
177
|
-
# Whitelist: find_by_sql, find_by_token_for
|
178
|
-
# AllowedMethods: find_by_sql, find_by_token_for
|
179
|
-
# AllowedReceivers: Gem::Specification, page
|
180
|
-
Rails/DynamicFindBy:
|
181
|
-
Exclude:
|
182
|
-
- 'lib/lutaml/model/xml_adapter/nokogiri_adapter.rb'
|
183
|
-
- 'lib/lutaml/model/xml_adapter/ox_adapter.rb'
|
184
|
-
|
185
|
-
# Offense count: 1
|
186
|
-
# This cop supports unsafe autocorrection (--autocorrect-all).
|
187
|
-
Rails/NegateInclude:
|
188
|
-
Exclude:
|
189
|
-
- 'lib/lutaml/model/serialize.rb'
|
190
|
-
|
191
|
-
# Offense count: 2
|
192
|
-
# This cop supports safe autocorrection (--autocorrect).
|
193
|
-
# Configuration parameters: NotNilAndNotEmpty, NotBlank, UnlessBlank.
|
194
|
-
Rails/Present:
|
195
|
-
Exclude:
|
196
|
-
- 'lib/lutaml/model/serialize.rb'
|
197
|
-
- 'lib/lutaml/model/xml_namespace.rb'
|
198
|
-
|
199
|
-
# Offense count: 6
|
200
|
-
# This cop supports unsafe autocorrection (--autocorrect-all).
|
201
|
-
# Configuration parameters: EnforcedStyle.
|
202
|
-
# SupportedStyles: strict, flexible
|
203
|
-
Rails/TimeZone:
|
204
|
-
Exclude:
|
205
|
-
- 'lib/lutaml/model/type.rb'
|
206
|
-
- 'lib/lutaml/model/type/time_without_date.rb'
|
207
|
-
- 'spec/person_spec.rb'
|
data/Gemfile
CHANGED
@@ -5,32 +5,17 @@ source "https://rubygems.org"
|
|
5
5
|
# Specify your gem's dependencies in lutaml-model.gemspec
|
6
6
|
gemspec
|
7
7
|
|
8
|
-
gem "rake", "~> 13.0"
|
9
|
-
|
10
|
-
gem "rspec", "~> 3.0"
|
11
|
-
|
12
|
-
gem "rubocop", "~> 1.21"
|
13
|
-
|
14
8
|
gem "equivalent-xml"
|
15
|
-
|
16
9
|
gem "multi_json"
|
17
|
-
|
18
10
|
gem "nokogiri"
|
19
|
-
|
20
11
|
gem "oga"
|
21
|
-
|
22
12
|
gem "ox"
|
23
|
-
|
24
13
|
gem "pry"
|
25
|
-
|
14
|
+
gem "rake", "~> 13.0"
|
15
|
+
gem "rspec", "~> 3.0"
|
16
|
+
gem "rubocop", "~> 1.21"
|
26
17
|
gem "rubocop-performance", require: false
|
27
|
-
|
28
|
-
gem "rubocop-rails", require: false
|
29
|
-
|
30
18
|
gem "rubocop-rake", require: false
|
31
|
-
|
32
19
|
gem "rubocop-rspec", require: false
|
33
|
-
|
34
20
|
gem "tomlib"
|
35
|
-
|
36
21
|
gem "toml-rb"
|
data/README.adoc
CHANGED
@@ -116,6 +116,68 @@ end
|
|
116
116
|
|
117
117
|
== Defining attributes
|
118
118
|
|
119
|
+
=== Supported attribute value types
|
120
|
+
|
121
|
+
Lutaml::Model supports the following attribute types, they can be
|
122
|
+
referred by a string, a symbol, or their class constant.
|
123
|
+
|
124
|
+
Syntax:
|
125
|
+
|
126
|
+
[source,ruby]
|
127
|
+
----
|
128
|
+
attribute :name_of_attribute, {symbol | string | class}
|
129
|
+
----
|
130
|
+
|
131
|
+
|===
|
132
|
+
| String | Symbol | Class name | Actual value class
|
133
|
+
|
134
|
+
| `String` | `:string` | `Lutaml::Model::Type::String` | `::String`
|
135
|
+
| `Integer` | `:integer` | `Lutaml::Model::Type::Integer` | `::Integer`
|
136
|
+
| `Float` | `:float` | `Lutaml::Model::Type::Float` | `::Float`
|
137
|
+
| `Date` | `:date` | `Lutaml::Model::Type::Date` | `::Date`
|
138
|
+
| `Time` | `:time` | `Lutaml::Model::Type::Time` | `::Time`
|
139
|
+
| `DateTime` | `:date_time` | `Lutaml::Model::Type::DateTime` | `::DateTime`
|
140
|
+
| `TimeWithoutDate` | `:time_without_date` | `Lutaml::Model::Type::TimeWithoutDate` | `::Time`
|
141
|
+
| `Boolean` | `:boolean` | `Lutaml::Model::Type::Boolean` | `Boolean`
|
142
|
+
| `Decimal` | `:decimal` | `Lutaml::Model::Type::Decimal` | `::BigDecimal`
|
143
|
+
| `Hash` | `:hash` | `Lutaml::Model::Type::Hash` | `::Hash`
|
144
|
+
| `Uuid` | `:uuid` | `Lutaml::Model::Type::Uuid` | `::String`
|
145
|
+
| `Symbol` | `:symbol` | `Lutaml::Model::Type::Symbol` | `Symbol`
|
146
|
+
| `Binary` | `:binary` | `Lutaml::Model::Type::Binary` | `Binary`
|
147
|
+
| `Url` | `:url` | `Lutaml::Model::Type::Url` | `::URI`
|
148
|
+
| `IpAddress` | `:ip_address` | `Lutaml::Model::Type::IpAddress` | `::IPAddr`
|
149
|
+
| `Json` | `:json` | `Lutaml::Model::Type::Json` | `::JSON`
|
150
|
+
|
151
|
+
|===
|
152
|
+
|
153
|
+
|
154
|
+
.Defining attributes with supported types via symbol, string and class
|
155
|
+
[example]
|
156
|
+
====
|
157
|
+
[source,ruby]
|
158
|
+
----
|
159
|
+
class Studio < Lutaml::Model::Serializable
|
160
|
+
# The following are equivalent
|
161
|
+
attribute :location, :string
|
162
|
+
attribute :potter, "String"
|
163
|
+
attribute :kiln, Lutaml::Model::Type::String
|
164
|
+
end
|
165
|
+
----
|
166
|
+
|
167
|
+
[source,ruby]
|
168
|
+
----
|
169
|
+
> s = Studio.new(location: 'London', potter: 'John Doe', kiln: 'Kiln 1')
|
170
|
+
> # <Studio:0x0000000104ac7240 @location="London", @potter="John Doe", @kiln="Kiln 1">
|
171
|
+
> s.location
|
172
|
+
> # "London"
|
173
|
+
> s.potter
|
174
|
+
> # "John Doe"
|
175
|
+
> s.kiln
|
176
|
+
> # "Kiln 1"
|
177
|
+
----
|
178
|
+
====
|
179
|
+
|
180
|
+
|
119
181
|
=== Attribute as a collection
|
120
182
|
|
121
183
|
Define attributes as collections (arrays or hashes) to store multiple values
|
@@ -339,6 +401,42 @@ end
|
|
339
401
|
----
|
340
402
|
====
|
341
403
|
|
404
|
+
If an element is mapped to a model object with the XML `root` tag name set, the
|
405
|
+
mapped tag name will be used as the root name, overriding the root name.
|
406
|
+
|
407
|
+
.The mapped tag name is used as the root name
|
408
|
+
[example]
|
409
|
+
====
|
410
|
+
[source,ruby]
|
411
|
+
----
|
412
|
+
class RecordDate < Lutaml::Model::Serializable
|
413
|
+
attribute :content, :string
|
414
|
+
|
415
|
+
xml do
|
416
|
+
root "recordDate"
|
417
|
+
map_content to: :content
|
418
|
+
end
|
419
|
+
end
|
420
|
+
|
421
|
+
class OriginInfo < Lutaml::Model::Serializable
|
422
|
+
attribute :date_issued, RecordDate, collection: true
|
423
|
+
|
424
|
+
xml do
|
425
|
+
root "originInfo"
|
426
|
+
map_element "dateIssued", to: :date_issued
|
427
|
+
end
|
428
|
+
end
|
429
|
+
----
|
430
|
+
|
431
|
+
[source,ruby]
|
432
|
+
----
|
433
|
+
> RecordDate.new(date: "2021-01-01").to_xml
|
434
|
+
> #<recordDate>2021-01-01</recordDate>
|
435
|
+
> OriginInfo.new(date_issued: [RecordDate.new(date: "2021-01-01")]).to_xml
|
436
|
+
> #<originInfo><dateIssued>2021-01-01</dateIssued></originInfo>
|
437
|
+
----
|
438
|
+
====
|
439
|
+
|
342
440
|
==== Mapping attributes
|
343
441
|
|
344
442
|
The `map_attribute` method maps an XML attribute to a data model attribute.
|
@@ -1200,6 +1298,28 @@ In this example:
|
|
1200
1298
|
Lutaml::Model uses an adapter pattern to support multiple libraries for each
|
1201
1299
|
serialization format.
|
1202
1300
|
|
1301
|
+
You will need to specify the configuration for the adapter you want to use. The
|
1302
|
+
easiest way is to copy and paste the following configuration into your code.
|
1303
|
+
|
1304
|
+
The default configuration is as follows:
|
1305
|
+
|
1306
|
+
[source,ruby]
|
1307
|
+
----
|
1308
|
+
require 'lutaml/model'
|
1309
|
+
require 'lutaml/model/xml_adapter/nokogiri_adapter'
|
1310
|
+
require 'lutaml/model/json_adapter/standard_json_adapter'
|
1311
|
+
require 'lutaml/model/toml_adapter/toml_rb_adapter'
|
1312
|
+
require 'lutaml/model/yaml_adapter/standard_yaml_adapter'
|
1313
|
+
|
1314
|
+
Lutaml::Model::Config.configure do |config|
|
1315
|
+
config.xml_adapter = Lutaml::Model::XmlAdapter::NokogiriAdapter
|
1316
|
+
config.yaml_adapter = Lutaml::Model::YamlAdapter::StandardYamlAdapter
|
1317
|
+
config.json_adapter = Lutaml::Model::JsonAdapter::StandardJsonAdapter
|
1318
|
+
config.toml_adapter = Lutaml::Model::TomlAdapter::TomlRbAdapter
|
1319
|
+
end
|
1320
|
+
----
|
1321
|
+
|
1322
|
+
|
1203
1323
|
=== XML
|
1204
1324
|
|
1205
1325
|
Lutaml::Model supports the following XML adapters:
|
@@ -1242,6 +1362,25 @@ end
|
|
1242
1362
|
----
|
1243
1363
|
|
1244
1364
|
|
1365
|
+
=== YAML
|
1366
|
+
|
1367
|
+
Lutaml::Model supports only one YAML adapter.
|
1368
|
+
|
1369
|
+
* YAML (default)
|
1370
|
+
|
1371
|
+
.Using the YAML adapter
|
1372
|
+
[source,ruby]
|
1373
|
+
----
|
1374
|
+
require 'lutaml/model'
|
1375
|
+
|
1376
|
+
Lutaml::Model::Config.configure do |config|
|
1377
|
+
require 'lutaml/model/yaml_adapter/standard_yaml_adapter'
|
1378
|
+
config.yaml_adapter = Lutaml::Model::YamlAdapter::StandardYamlAdapter
|
1379
|
+
end
|
1380
|
+
----
|
1381
|
+
|
1382
|
+
|
1383
|
+
|
1245
1384
|
=== JSON
|
1246
1385
|
|
1247
1386
|
Lutaml::Model supports the following JSON adapters:
|
@@ -1255,8 +1394,8 @@ Lutaml::Model supports the following JSON adapters:
|
|
1255
1394
|
require 'lutaml/model'
|
1256
1395
|
|
1257
1396
|
Lutaml::Model::Config.configure do |config|
|
1258
|
-
require 'lutaml/model/json_adapter/
|
1259
|
-
config.json_adapter = Lutaml::Model::JsonAdapter::
|
1397
|
+
require 'lutaml/model/json_adapter/standard_json_adapter'
|
1398
|
+
config.json_adapter = Lutaml::Model::JsonAdapter::StandardJsonAdapter
|
1260
1399
|
end
|
1261
1400
|
----
|
1262
1401
|
|
@@ -1266,8 +1405,8 @@ end
|
|
1266
1405
|
require 'lutaml/model'
|
1267
1406
|
|
1268
1407
|
Lutaml::Model::Config.configure do |config|
|
1269
|
-
require 'lutaml/model/json_adapter/
|
1270
|
-
config.json_adapter = Lutaml::Model::JsonAdapter::
|
1408
|
+
require 'lutaml/model/json_adapter/multi_json_adapter'
|
1409
|
+
config.json_adapter = Lutaml::Model::JsonAdapter::MultiJsonAdapter
|
1271
1410
|
end
|
1272
1411
|
----
|
1273
1412
|
|
@@ -1285,7 +1424,7 @@ require 'lutaml/model'
|
|
1285
1424
|
|
1286
1425
|
Lutaml::Model::Config.configure do |config|
|
1287
1426
|
require 'lutaml/model/toml_adapter/toml_rb_adapter'
|
1288
|
-
config.toml_adapter = Lutaml::Model::TomlAdapter::
|
1427
|
+
config.toml_adapter = Lutaml::Model::TomlAdapter::TomlRbAdapter
|
1289
1428
|
end
|
1290
1429
|
----
|
1291
1430
|
|
@@ -1295,7 +1434,7 @@ end
|
|
1295
1434
|
require 'lutaml/model'
|
1296
1435
|
|
1297
1436
|
Lutaml::Model::Config.configure do |config|
|
1298
|
-
config.toml_adapter = Lutaml::Model::TomlAdapter::
|
1437
|
+
config.toml_adapter = Lutaml::Model::TomlAdapter::TomlibAdapter
|
1299
1438
|
require 'lutaml/model/toml_adapter/tomlib_adapter'
|
1300
1439
|
end
|
1301
1440
|
----
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# lib/lutaml/model/attribute.rb
|
2
1
|
module Lutaml
|
3
2
|
module Model
|
4
3
|
class Attribute
|
@@ -6,7 +5,8 @@ module Lutaml
|
|
6
5
|
|
7
6
|
def initialize(name, type, options = {})
|
8
7
|
@name = name
|
9
|
-
@type = type
|
8
|
+
@type = cast_type(type)
|
9
|
+
|
10
10
|
@options = options
|
11
11
|
|
12
12
|
if collection? && !options[:default]
|
@@ -14,6 +14,19 @@ module Lutaml
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
+
def cast_type(type)
|
18
|
+
case type
|
19
|
+
when Class
|
20
|
+
type
|
21
|
+
when String
|
22
|
+
Type.const_get(type)
|
23
|
+
when Symbol
|
24
|
+
Type.const_get(type.to_s.split("_").collect(&:capitalize).join)
|
25
|
+
end
|
26
|
+
rescue NameError
|
27
|
+
raise ArgumentError, "Unknown Lutaml::Model::Type: #{type}"
|
28
|
+
end
|
29
|
+
|
17
30
|
def collection?
|
18
31
|
options[:collection] || false
|
19
32
|
end
|
data/lib/lutaml/model/config.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "json_object"
|
4
|
+
|
5
|
+
module Lutaml
|
6
|
+
module Model
|
7
|
+
module JsonAdapter
|
8
|
+
# Base class for JSON documents
|
9
|
+
class JsonDocument < JsonObject
|
10
|
+
def self.parse(json)
|
11
|
+
raise NotImplementedError, "Subclasses must implement `parse`."
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_json(*args)
|
15
|
+
raise NotImplementedError, "Subclasses must implement `to_json`."
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lutaml
|
4
|
+
module Model
|
5
|
+
module JsonAdapter
|
6
|
+
# Base class for JSON objects
|
7
|
+
class JsonObject
|
8
|
+
attr_reader :attributes
|
9
|
+
|
10
|
+
def initialize(attributes = {})
|
11
|
+
@attributes = attributes
|
12
|
+
end
|
13
|
+
|
14
|
+
def [](key)
|
15
|
+
@attributes[key]
|
16
|
+
end
|
17
|
+
|
18
|
+
def []=(key, value)
|
19
|
+
@attributes[key] = value
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_h
|
23
|
+
@attributes
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -1,11 +1,10 @@
|
|
1
|
-
# lib/lutaml/model/json_adapter/multi_json.rb
|
2
1
|
require "multi_json"
|
3
|
-
require_relative "
|
2
|
+
require_relative "json_document"
|
4
3
|
|
5
4
|
module Lutaml
|
6
5
|
module Model
|
7
6
|
module JsonAdapter
|
8
|
-
class
|
7
|
+
class MultiJsonAdapter < JsonDocument
|
9
8
|
def self.parse(json)
|
10
9
|
data = MultiJson.load(json)
|
11
10
|
new(data)
|
@@ -1,11 +1,10 @@
|
|
1
|
-
# lib/lutaml/model/json_adapter/standard.rb
|
2
1
|
require "json"
|
3
|
-
require_relative "
|
2
|
+
require_relative "json_document"
|
4
3
|
|
5
4
|
module Lutaml
|
6
5
|
module Model
|
7
6
|
module JsonAdapter
|
8
|
-
class
|
7
|
+
class StandardJsonAdapter < JsonDocument
|
9
8
|
def self.parse(json)
|
10
9
|
attributes = JSON.parse(json, create_additions: false)
|
11
10
|
new(attributes)
|
@@ -1,38 +1,8 @@
|
|
1
|
-
#
|
2
|
-
require "json"
|
1
|
+
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module Lutaml
|
5
4
|
module Model
|
6
5
|
module JsonAdapter
|
7
|
-
class JsonObject
|
8
|
-
attr_reader :attributes
|
9
|
-
|
10
|
-
def initialize(attributes = {})
|
11
|
-
@attributes = attributes
|
12
|
-
end
|
13
|
-
|
14
|
-
def [](key)
|
15
|
-
@attributes[key]
|
16
|
-
end
|
17
|
-
|
18
|
-
def []=(key, value)
|
19
|
-
@attributes[key] = value
|
20
|
-
end
|
21
|
-
|
22
|
-
def to_h
|
23
|
-
@attributes
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class Document < JsonObject
|
28
|
-
def self.parse(json)
|
29
|
-
raise NotImplementedError, "Subclasses must implement `parse`."
|
30
|
-
end
|
31
|
-
|
32
|
-
def to_json(*args)
|
33
|
-
raise NotImplementedError, "Subclasses must implement `to_json`."
|
34
|
-
end
|
35
|
-
end
|
36
6
|
end
|
37
7
|
end
|
38
8
|
end
|