lutaml-model 0.3.1 → 0.3.2

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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +0 -5
  3. data/.rubocop_todo.yml +20 -101
  4. data/Gemfile +3 -18
  5. data/README.adoc +109 -6
  6. data/lib/lutaml/model/attribute.rb +15 -2
  7. data/lib/lutaml/model/config.rb +0 -1
  8. data/lib/lutaml/model/json_adapter/json_document.rb +20 -0
  9. data/lib/lutaml/model/json_adapter/json_object.rb +28 -0
  10. data/lib/lutaml/model/json_adapter/{multi_json.rb → multi_json_adapter.rb} +2 -3
  11. data/lib/lutaml/model/json_adapter/{standard.rb → standard_json_adapter.rb} +2 -3
  12. data/lib/lutaml/model/json_adapter.rb +1 -31
  13. data/lib/lutaml/model/key_value_mapping.rb +0 -1
  14. data/lib/lutaml/model/key_value_mapping_rule.rb +0 -1
  15. data/lib/lutaml/model/mapping_hash.rb +0 -2
  16. data/lib/lutaml/model/mapping_rule.rb +0 -1
  17. data/lib/lutaml/model/schema/json_schema.rb +0 -1
  18. data/lib/lutaml/model/schema/relaxng_schema.rb +0 -1
  19. data/lib/lutaml/model/schema/xsd_schema.rb +0 -1
  20. data/lib/lutaml/model/schema/yaml_schema.rb +0 -1
  21. data/lib/lutaml/model/schema.rb +0 -1
  22. data/lib/lutaml/model/serializable.rb +0 -1
  23. data/lib/lutaml/model/serialize.rb +22 -4
  24. data/lib/lutaml/model/toml_adapter/toml_document.rb +20 -0
  25. data/lib/lutaml/model/toml_adapter/toml_object.rb +28 -0
  26. data/lib/lutaml/model/toml_adapter/toml_rb_adapter.rb +2 -3
  27. data/lib/lutaml/model/toml_adapter/tomlib_adapter.rb +2 -3
  28. data/lib/lutaml/model/toml_adapter.rb +0 -31
  29. data/lib/lutaml/model/type/date_time.rb +20 -0
  30. data/lib/lutaml/model/type/json.rb +34 -0
  31. data/lib/lutaml/model/type/time_without_date.rb +4 -3
  32. data/lib/lutaml/model/type.rb +61 -124
  33. data/lib/lutaml/model/version.rb +1 -1
  34. data/lib/lutaml/model/xml_adapter/nokogiri_adapter.rb +5 -6
  35. data/lib/lutaml/model/xml_adapter/oga_adapter.rb +4 -5
  36. data/lib/lutaml/model/xml_adapter/ox_adapter.rb +8 -9
  37. data/lib/lutaml/model/xml_adapter/xml_attribute.rb +27 -0
  38. data/lib/lutaml/model/xml_adapter/xml_document.rb +184 -0
  39. data/lib/lutaml/model/xml_adapter/xml_element.rb +94 -0
  40. data/lib/lutaml/model/xml_adapter/xml_namespace.rb +49 -0
  41. data/lib/lutaml/model/xml_adapter.rb +0 -285
  42. data/lib/lutaml/model/xml_mapping.rb +1 -1
  43. data/lib/lutaml/model/xml_mapping_rule.rb +3 -4
  44. data/lib/lutaml/model/yaml_adapter/standard_yaml_adapter.rb +34 -0
  45. data/lib/lutaml/model/yaml_adapter/yaml_document.rb +20 -0
  46. data/lib/lutaml/model/yaml_adapter/yaml_object.rb +28 -0
  47. data/lib/lutaml/model/yaml_adapter.rb +1 -27
  48. data/lib/lutaml/model.rb +0 -5
  49. metadata +17 -5
  50. data/lib/lutaml/model/xml_namespace.rb +0 -47
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 91bd7beffbcc68f12d2db941b64bb6c353598505f775e8b45b878070de028f89
4
- data.tar.gz: 85462da21104e72066652ae84d7260d8675e6d3027cdb1d0c90e51476e88834f
3
+ metadata.gz: f9a3608f755616317667038ebd8f71368c23dcf935a7b07ad33d8efd1fa1df23
4
+ data.tar.gz: 9a69a3a03c401fa4a0eff423315dc979e4f5b87c28b28bf4b4d10b7f118b6a77
5
5
  SHA512:
6
- metadata.gz: 2ed73bf2c0ba1a646dbab5ea4f35171786e043f3bd593aec08ee1f07ec4dd3350b2839b93091df4fbf4bfd13ee6db31a22af31d7207b43691f4e530e72f0f303
7
- data.tar.gz: c7b31f2cabd5aea847414bfaa0a7d53b48b2be43059c3501aeac41917844ef128e482072c87ab63a92930f1115e1f7cab22e23dd9e424a2c9d066a4221094f27
6
+ metadata.gz: 612d55df7ef46e1266b6d6e2fa4a6e451862252895a8f8b66b0a1f42bb96d289fc28c160ee1e2d609bc4ebc4ce8db00d14a1fca3061e8465a2f867403f5672b0
7
+ data.tar.gz: 20235f85e8719fceb5a048dfcebf9f80e0a1c3c2d3bc2f6779fd0e1480d77c989adcc1bdedc661e440dbd861e7cf04682321626693281ac9c21920d45310f6b6
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-07-31 10:20:40 UTC using RuboCop version 1.64.1.
3
+ # on 2024-08-15 09:04:06 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: 15
17
+ # Offense count: 28
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,10 @@ 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
- - 'spec/lutaml/model/xml_namespace_spec.rb'
27
+ - 'lib/lutaml/model/xml_adapter/xml_document.rb'
28
+ - 'spec/lutaml/model/delegation_spec.rb'
29
29
 
30
30
  # Offense count: 20
31
31
  # Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes, Max.
@@ -33,9 +33,9 @@ Metrics/AbcSize:
33
33
  Exclude:
34
34
  - 'lib/lutaml/model/serialize.rb'
35
35
  - 'lib/lutaml/model/type.rb'
36
- - 'lib/lutaml/model/xml_adapter.rb'
37
36
  - 'lib/lutaml/model/xml_adapter/nokogiri_adapter.rb'
38
37
  - 'lib/lutaml/model/xml_adapter/ox_adapter.rb'
38
+ - 'lib/lutaml/model/xml_adapter/xml_document.rb'
39
39
 
40
40
  # Offense count: 3
41
41
  # Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns, inherit_mode.
@@ -43,50 +43,35 @@ Metrics/AbcSize:
43
43
  Metrics/BlockLength:
44
44
  Max: 30
45
45
 
46
- # Offense count: 17
46
+ # Offense count: 19
47
47
  # Configuration parameters: AllowedMethods, AllowedPatterns, Max.
48
48
  Metrics/CyclomaticComplexity:
49
49
  Exclude:
50
50
  - 'lib/lutaml/model/serialize.rb'
51
51
  - 'lib/lutaml/model/type.rb'
52
- - 'lib/lutaml/model/xml_adapter.rb'
53
52
  - 'lib/lutaml/model/xml_adapter/nokogiri_adapter.rb'
54
53
  - 'lib/lutaml/model/xml_adapter/ox_adapter.rb'
54
+ - 'lib/lutaml/model/xml_adapter/xml_document.rb'
55
55
 
56
- # Offense count: 24
56
+ # Offense count: 27
57
57
  # Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns.
58
58
  Metrics/MethodLength:
59
- Max: 42
59
+ Max: 41
60
60
 
61
- # Offense count: 3
61
+ # Offense count: 4
62
62
  # Configuration parameters: CountKeywordArgs, MaxOptionalParameters.
63
63
  Metrics/ParameterLists:
64
64
  Max: 9
65
65
 
66
- # Offense count: 16
66
+ # Offense count: 17
67
67
  # Configuration parameters: AllowedMethods, AllowedPatterns, Max.
68
68
  Metrics/PerceivedComplexity:
69
69
  Exclude:
70
70
  - 'lib/lutaml/model/serialize.rb'
71
71
  - 'lib/lutaml/model/type.rb'
72
- - 'lib/lutaml/model/xml_adapter.rb'
73
72
  - 'lib/lutaml/model/xml_adapter/nokogiri_adapter.rb'
74
73
  - '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'
74
+ - 'lib/lutaml/model/xml_adapter/xml_document.rb'
90
75
 
91
76
  # Offense count: 6
92
77
  # Configuration parameters: Prefixes, AllowedPatterns.
@@ -97,22 +82,10 @@ RSpec/ContextWording:
97
82
  - 'spec/lutaml/model/xml_adapter/oga_adapter_spec.rb'
98
83
  - 'spec/lutaml/model/xml_adapter/ox_adapter_spec.rb'
99
84
 
100
- # Offense count: 18
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
85
+ # Offense count: 63
113
86
  # Configuration parameters: CountAsOne.
114
87
  RSpec/ExampleLength:
115
- Max: 36
88
+ Max: 35
116
89
 
117
90
  # Offense count: 2
118
91
  # Configuration parameters: Max, AllowedIdentifiers, AllowedPatterns.
@@ -120,27 +93,19 @@ RSpec/IndexedLet:
120
93
  Exclude:
121
94
  - 'spec/address_spec.rb'
122
95
 
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
96
  # Offense count: 4
132
97
  RSpec/MultipleDescribes:
133
98
  Exclude:
134
99
  - 'spec/lutaml/model/json_adapter_spec.rb'
135
100
  - 'spec/lutaml/model/toml_adapter_spec.rb'
101
+ - 'spec/lutaml/model/xml_adapter/xml_namespace_spec.rb'
136
102
  - 'spec/lutaml/model/xml_adapter_spec.rb'
137
- - 'spec/lutaml/model/xml_namespace_spec.rb'
138
103
 
139
- # Offense count: 54
104
+ # Offense count: 63
140
105
  RSpec/MultipleExpectations:
141
106
  Max: 15
142
107
 
143
- # Offense count: 1
108
+ # Offense count: 11
144
109
  # Configuration parameters: AllowSubject.
145
110
  RSpec/MultipleMemoizedHelpers:
146
111
  Max: 9
@@ -149,59 +114,13 @@ RSpec/MultipleMemoizedHelpers:
149
114
  RSpec/PendingWithoutReason:
150
115
  Exclude:
151
116
  - 'spec/lutaml/model/xml_adapter/oga_adapter_spec.rb'
117
+ - 'spec/lutaml/model/xml_adapter/xml_namespace_spec.rb'
152
118
  - '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
119
 
163
- # Offense count: 5
120
+ # Offense count: 1
164
121
  # Configuration parameters: Include, CustomTransform, IgnoreMethods, IgnoreMetadata.
165
122
  # Include: **/*_spec.rb
166
123
  RSpec/SpecFilePathFormat:
167
124
  Exclude:
125
+ - '**/spec/routing/**/*'
168
126
  - '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
@@ -1200,6 +1262,28 @@ In this example:
1200
1262
  Lutaml::Model uses an adapter pattern to support multiple libraries for each
1201
1263
  serialization format.
1202
1264
 
1265
+ You will need to specify the configuration for the adapter you want to use. The
1266
+ easiest way is to copy and paste the following configuration into your code.
1267
+
1268
+ The default configuration is as follows:
1269
+
1270
+ [source,ruby]
1271
+ ----
1272
+ require 'lutaml/model'
1273
+ require 'lutaml/model/xml_adapter/nokogiri_adapter'
1274
+ require 'lutaml/model/json_adapter/standard_json_adapter'
1275
+ require 'lutaml/model/toml_adapter/toml_rb_adapter'
1276
+ require 'lutaml/model/yaml_adapter/standard_yaml_adapter'
1277
+
1278
+ Lutaml::Model::Config.configure do |config|
1279
+ config.xml_adapter = Lutaml::Model::XmlAdapter::NokogiriAdapter
1280
+ config.yaml_adapter = Lutaml::Model::YamlAdapter::StandardYamlAdapter
1281
+ config.json_adapter = Lutaml::Model::JsonAdapter::StandardJsonAdapter
1282
+ config.toml_adapter = Lutaml::Model::TomlAdapter::TomlRbAdapter
1283
+ end
1284
+ ----
1285
+
1286
+
1203
1287
  === XML
1204
1288
 
1205
1289
  Lutaml::Model supports the following XML adapters:
@@ -1242,6 +1326,25 @@ end
1242
1326
  ----
1243
1327
 
1244
1328
 
1329
+ === YAML
1330
+
1331
+ Lutaml::Model supports only one YAML adapter.
1332
+
1333
+ * YAML (default)
1334
+
1335
+ .Using the YAML adapter
1336
+ [source,ruby]
1337
+ ----
1338
+ require 'lutaml/model'
1339
+
1340
+ Lutaml::Model::Config.configure do |config|
1341
+ require 'lutaml/model/yaml_adapter/standard_yaml_adapter'
1342
+ config.yaml_adapter = Lutaml::Model::YamlAdapter::StandardYamlAdapter
1343
+ end
1344
+ ----
1345
+
1346
+
1347
+
1245
1348
  === JSON
1246
1349
 
1247
1350
  Lutaml::Model supports the following JSON adapters:
@@ -1255,8 +1358,8 @@ Lutaml::Model supports the following JSON adapters:
1255
1358
  require 'lutaml/model'
1256
1359
 
1257
1360
  Lutaml::Model::Config.configure do |config|
1258
- require 'lutaml/model/json_adapter/standard'
1259
- config.json_adapter = Lutaml::Model::JsonAdapter::StandardDocument
1361
+ require 'lutaml/model/json_adapter/standard_json_adapter'
1362
+ config.json_adapter = Lutaml::Model::JsonAdapter::StandardJsonAdapter
1260
1363
  end
1261
1364
  ----
1262
1365
 
@@ -1266,8 +1369,8 @@ end
1266
1369
  require 'lutaml/model'
1267
1370
 
1268
1371
  Lutaml::Model::Config.configure do |config|
1269
- require 'lutaml/model/json_adapter/multi_json'
1270
- config.json_adapter = Lutaml::Model::JsonAdapter::MultiJsonDocument
1372
+ require 'lutaml/model/json_adapter/multi_json_adapter'
1373
+ config.json_adapter = Lutaml::Model::JsonAdapter::MultiJsonAdapter
1271
1374
  end
1272
1375
  ----
1273
1376
 
@@ -1285,7 +1388,7 @@ require 'lutaml/model'
1285
1388
 
1286
1389
  Lutaml::Model::Config.configure do |config|
1287
1390
  require 'lutaml/model/toml_adapter/toml_rb_adapter'
1288
- config.toml_adapter = Lutaml::Model::TomlAdapter::TomlRbDocument
1391
+ config.toml_adapter = Lutaml::Model::TomlAdapter::TomlRbAdapter
1289
1392
  end
1290
1393
  ----
1291
1394
 
@@ -1295,7 +1398,7 @@ end
1295
1398
  require 'lutaml/model'
1296
1399
 
1297
1400
  Lutaml::Model::Config.configure do |config|
1298
- config.toml_adapter = Lutaml::Model::TomlAdapter::TomlibDocument
1401
+ config.toml_adapter = Lutaml::Model::TomlAdapter::TomlibAdapter
1299
1402
  require 'lutaml/model/toml_adapter/tomlib_adapter'
1300
1403
  end
1301
1404
  ----
@@ -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
@@ -1,4 +1,3 @@
1
- # lib/lutaml/model/config.rb
2
1
  module Lutaml
3
2
  module Model
4
3
  module Config
@@ -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 "../json_adapter"
2
+ require_relative "json_document"
4
3
 
5
4
  module Lutaml
6
5
  module Model
7
6
  module JsonAdapter
8
- class MultiJsonDocument < Document
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 "../json_adapter"
2
+ require_relative "json_document"
4
3
 
5
4
  module Lutaml
6
5
  module Model
7
6
  module JsonAdapter
8
- class StandardDocument < Document
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
- # lib/lutaml/model/json_adapter.rb
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
@@ -1,4 +1,3 @@
1
- # lib/lutaml/model/key_value_mapping.rb
2
1
  require_relative "key_value_mapping_rule"
3
2
 
4
3
  module Lutaml
@@ -1,4 +1,3 @@
1
- # lib/lutaml/model/key_value_mapping_rule.rb
2
1
  require_relative "mapping_rule"
3
2
 
4
3
  module Lutaml
@@ -1,5 +1,3 @@
1
- # lib/lutaml/model/type.rb
2
-
3
1
  module Lutaml
4
2
  module Model
5
3
  class MappingHash < Hash
@@ -1,4 +1,3 @@
1
- # lib/lutaml/model/mapping_rule.rb
2
1
  module Lutaml
3
2
  module Model
4
3
  class MappingRule
@@ -1,4 +1,3 @@
1
- # lib/lutaml/model/schema/json_schema.rb
2
1
  require "json"
3
2
 
4
3
  module Lutaml
@@ -1,4 +1,3 @@
1
- # lib/lutaml/model/schema/relaxng_schema.rb
2
1
  require "nokogiri"
3
2
 
4
3
  module Lutaml
@@ -1,4 +1,3 @@
1
- # lib/lutaml/model/schema/xsd_schema.rb
2
1
  require "nokogiri"
3
2
 
4
3
  module Lutaml
@@ -1,4 +1,3 @@
1
- # lib/lutaml/model/schema/yaml_schema.rb
2
1
  require "yaml"
3
2
 
4
3
  module Lutaml
@@ -1,4 +1,3 @@
1
- # lib/lutaml/model/schema.rb
2
1
  require_relative "schema/json_schema"
3
2
  require_relative "schema/xsd_schema"
4
3
  require_relative "schema/relaxng_schema"
@@ -1,4 +1,3 @@
1
- # lib/lutaml/model/serializable.rb
2
1
  require_relative "serialize"
3
2
 
4
3
  module Lutaml