Skip to content

Commit 507b69a

Browse files
committed
feat: add schema_version key to groups for calculated yaml definitions
1 parent f8f6fb2 commit 507b69a

5 files changed

Lines changed: 58 additions & 0 deletions

File tree

lib/entitlements/data/groups/calculated/yaml.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,20 @@ def description
3434
parsed_data.fetch("description", "")
3535
end
3636

37+
# Standard interface: Get the schema version of this group.
38+
#
39+
# Takes no arguments.
40+
#
41+
# Returns a String with the schema version (semver), or "v1.0.0" if undefined.
42+
Contract C::None => String
43+
def schema_version
44+
version = parsed_data.fetch("schema_version", "v1.0.0")
45+
unless version.match?(/^\Av?\d+\.\d+\.\d+\z$/)
46+
raise "Invalid schema version format: #{version} - Expected format is 'MAJOR.MINOR.PATCH' - Examples: v1.2.3 or 1.2.3"
47+
end
48+
version
49+
end
50+
3751
# Files can support modifiers that act independently of rules.
3852
# This returns the modifiers from the file as a hash.
3953
#

spec/unit/entitlements/data/groups/calculated/yaml_spec.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,32 @@
3535
end
3636
end
3737

38+
describe "#schema_version" do
39+
it "returns the version string when one is set" do
40+
filename = fixture("ldap-config/filters/no-filters-with-schema-version.yaml")
41+
subject = described_class.new(filename: filename)
42+
expect(subject.schema_version).to eq("v1.2.3")
43+
end
44+
45+
it "returns the version string when one is set (no v prefix)" do
46+
filename = fixture("ldap-config/filters/no-filters-with-schema-version-no-v.yaml")
47+
subject = described_class.new(filename: filename)
48+
expect(subject.schema_version).to eq("1.2.3")
49+
end
50+
51+
it "returns the default version when schema_version is undefined" do
52+
filename = fixture("ldap-config/filters/no-filters-description.yaml")
53+
subject = described_class.new(filename: filename)
54+
expect(subject.schema_version).to eq("v1.0.0")
55+
end
56+
57+
it "throws an error when an invalid semver string is provided" do
58+
filename = fixture("ldap-config/filters/no-filters-with-bad-schema-version.yaml")
59+
subject = described_class.new(filename: filename)
60+
expect { subject.schema_version }.to raise_error(RuntimeError, /Invalid schema version format/)
61+
end
62+
end
63+
3864
describe "#initialize_filters" do
3965
it "returns the default filter hash when no filters are defined" do
4066
filename = fixture("ldap-config/filters/no-filters.yaml")
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
description: Yo kittens
2+
schema_version: v1.abc2.3
3+
rules:
4+
or:
5+
- username: russianblue
6+
- username: BlackManx
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
description: Yo kittens
2+
schema_version: 1.2.3
3+
rules:
4+
or:
5+
- username: russianblue
6+
- username: BlackManx
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
description: Yo kittens
2+
schema_version: v1.2.3
3+
rules:
4+
or:
5+
- username: russianblue
6+
- username: BlackManx

0 commit comments

Comments
 (0)