rsmp_schema 0.2.0 → 0.2.1
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/Gemfile.lock +1 -1
- data/lib/rsmp_schema/schema.rb +80 -24
- data/lib/rsmp_schema/version.rb +1 -1
- data/lib/rsmp_schema.rb +2 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d77598d55d8ad5356f08539dae9c80c2f0887240f3d7cc45fe8f81a39e22467f
|
4
|
+
data.tar.gz: 376dde9dc8d380588293178dba3b968ac8a558c52832804e0aea5c0d065627f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f49e353daeca137c0a542dfad6f49f6c927786fbef5f3b8242bf9dd29f091e398ef10ba206ebf71a64c8d64f258400c0b3b24c87b4e62cc39aaa6dd3d76bbbaa
|
7
|
+
data.tar.gz: 7c0565ff56406fbfc56f6b711e1b26a42d9bf1a50b708ed659b53628963f42b37922814ed2e0f517c302dd205ffbf888d22bd11f93be9a875f88ab84d6241dbc
|
data/Gemfile.lock
CHANGED
data/lib/rsmp_schema/schema.rb
CHANGED
@@ -6,32 +6,66 @@ end
|
|
6
6
|
module RSMP::Schema
|
7
7
|
@@schemas = nil
|
8
8
|
|
9
|
-
def self.
|
10
|
-
|
9
|
+
def self.setup
|
10
|
+
@@schemas = {}
|
11
11
|
schemas_path = File.expand_path( File.join(__dir__,'..','..','schemas') )
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
12
|
+
Dir.glob("#{schemas_path}/*").select {|f| File.directory? f}.each do |type_path|
|
13
|
+
type = File.basename(type_path).to_sym
|
14
|
+
@@schemas[type] = {}
|
15
|
+
Dir.glob("#{type_path}/*").select {|f| File.directory? f}.each do |schema_path|
|
16
|
+
version = File.basename(schema_path)
|
17
|
+
if type == :core
|
18
|
+
file = 'rsmp.json'
|
19
|
+
else
|
20
|
+
file = 'sxl.json'
|
21
|
+
end
|
22
|
+
@@schemas[type][version] = JSONSchemer.schema(
|
23
|
+
Pathname.new(File.join(schema_path,file))
|
24
|
+
)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# get all schemas, oganized by type and version
|
30
|
+
def self.schemas
|
31
|
+
raise RuntimeError.new("No schemas available, perhaps Schema.setup was never called?") unless @@schemas
|
32
|
+
@@schemas
|
33
|
+
end
|
34
|
+
|
35
|
+
# get array of core schema versions
|
36
|
+
def self.core_versions
|
37
|
+
versions :core
|
38
|
+
end
|
39
|
+
|
40
|
+
# get earliest core schema version
|
41
|
+
def self.earliest_core_version
|
42
|
+
earliest_version :core
|
33
43
|
end
|
34
44
|
|
45
|
+
# get latesty core schema version
|
46
|
+
def self.latest_core_version
|
47
|
+
latest_version :core
|
48
|
+
end
|
49
|
+
|
50
|
+
# get array of schema versions for a particular schema type
|
51
|
+
def self.versions type
|
52
|
+
schemas = find_schemas!(type).keys
|
53
|
+
sort_versions(schemas)
|
54
|
+
end
|
55
|
+
|
56
|
+
# get earliest schema version for a particular schema type
|
57
|
+
def self.earliest_version type
|
58
|
+
schemas = find_schemas!(type).keys
|
59
|
+
sort_versions(schemas).first
|
60
|
+
end
|
61
|
+
|
62
|
+
# get latest schema version for a particular schema type
|
63
|
+
def self.latest_version type
|
64
|
+
schemas = find_schemas!(type).keys
|
65
|
+
sort_versions(schemas).last
|
66
|
+
end
|
67
|
+
|
68
|
+
# validate an rsmp messages using a schema object
|
35
69
|
def self.validate_using_schema message, schema
|
36
70
|
raise ArgumentError.new("message missing") unless message
|
37
71
|
raise ArgumentError.new("schema missing") unless schema
|
@@ -44,17 +78,28 @@ module RSMP::Schema
|
|
44
78
|
end
|
45
79
|
end
|
46
80
|
|
81
|
+
# sort version strings
|
82
|
+
def self.sort_versions versions
|
83
|
+
versions.sort_by { |k| Gem::Version.new(k) }
|
84
|
+
end
|
85
|
+
|
86
|
+
# find schemas versions for particular schema type
|
87
|
+
# return nil if type not found
|
47
88
|
def self.find_schemas type
|
48
89
|
raise ArgumentError.new("type missing") unless type
|
49
|
-
schemas[type.to_sym]
|
90
|
+
schemas = @@schemas[type.to_sym]
|
50
91
|
end
|
51
92
|
|
93
|
+
# find schemas versions for particular schema type
|
94
|
+
# raise error if not found
|
52
95
|
def self.find_schemas! type
|
53
96
|
schemas = find_schemas type
|
54
97
|
raise UnknownSchemaTypeError.new("Unknown schema type #{type}") unless schemas
|
55
98
|
schemas
|
56
99
|
end
|
57
100
|
|
101
|
+
# find schema for a particular schema and version
|
102
|
+
# return nil if not found
|
58
103
|
def self.find_schema type, version, options={}
|
59
104
|
raise ArgumentError.new("version missing") unless version
|
60
105
|
version = sanitize_version version if options[:lenient]
|
@@ -65,11 +110,18 @@ module RSMP::Schema
|
|
65
110
|
nil
|
66
111
|
end
|
67
112
|
|
113
|
+
# get major.minor.patch part of a version string, where patch is optional
|
114
|
+
# ignore trailing characters, e.g.
|
115
|
+
# 3.1.3.32A => 3.1.3
|
116
|
+
# 3.1A3r3 >= 3.1
|
117
|
+
# return nil if string doesn't match
|
68
118
|
def self.sanitize_version version
|
69
119
|
matched = /^\d+\.\d+(\.\d+)?/.match version
|
70
120
|
matched.to_s if matched
|
71
121
|
end
|
72
122
|
|
123
|
+
# find schema for a particular schema and version
|
124
|
+
# raise error if not found
|
73
125
|
def self.find_schema! type, version, options={}
|
74
126
|
schema = find_schema type, version, options
|
75
127
|
raise ArgumentError.new("version missing") unless version
|
@@ -82,10 +134,14 @@ module RSMP::Schema
|
|
82
134
|
raise UnknownSchemaVersionError.new("Unknown schema version #{type} #{version}")
|
83
135
|
end
|
84
136
|
|
137
|
+
# true if a particular schema type and version found
|
85
138
|
def self.has_schema? type, version, options={}
|
86
139
|
find_schema(type,version, options) != nil
|
87
140
|
end
|
88
141
|
|
142
|
+
# validate using a particular schema and version
|
143
|
+
# raises error if schema is not found
|
144
|
+
# return nil if validation succeds, otherwise returns an array of errors
|
89
145
|
def self.validate message, schemas, options={}
|
90
146
|
raise ArgumentError.new("message missing") unless message
|
91
147
|
raise ArgumentError.new("schemas missing") unless schemas
|
data/lib/rsmp_schema/version.rb
CHANGED
data/lib/rsmp_schema.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsmp_schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Emil Tin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-08-
|
11
|
+
date: 2022-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json_schemer
|