lutaml-model 0.3.1 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|