Module: Textus::Manifest::Schema
- Defined in:
- lib/textus/manifest/schema.rb
Constant Summary collapse
- ROOT_KEYS =
%w[version zones entries rules].freeze
- ZONE_KEYS =
%w[name write_policy read_policy].freeze
- ENTRY_KEYS =
%w[ key path zone schema owner nested format compute template publish_to publish_each intake events inject_intro index_filename ].freeze
- COMPUTE_KEYS =
%w[kind select pluck sort_by limit transform command sources].freeze
- INTAKE_KEYS =
%w[handler config].freeze
- RULE_KEYS =
%w[match refresh intake_handler_allowlist promotion retention].freeze
- REFRESH_KEYS =
%w[ttl on_stale sync_budget_ms fetch_timeout_seconds].freeze
- FETCH_TIMEOUT_SECONDS_CEILING =
3600- PROMOTION_KEYS =
%w[requires].freeze
Class Method Summary collapse
- .validate!(raw) ⇒ Object
- .validate_fetch_timeout!(value, path) ⇒ Object
- .walk(hash, allowed, path) ⇒ Object
Class Method Details
.validate!(raw) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/textus/manifest/schema.rb', line 18 def self.validate!(raw) raise BadManifest.new("manifest must be a hash") unless raw.is_a?(Hash) walk(raw, ROOT_KEYS, "$") Array(raw["zones"]).each_with_index do |z, i| walk(z, ZONE_KEYS, "$.zones[#{i}]") end Array(raw["entries"]).each_with_index do |e, i| path = "$.entries[#{i}]" walk(e, ENTRY_KEYS, path) walk(e["compute"], COMPUTE_KEYS, "#{path}.compute") if e["compute"].is_a?(Hash) walk(e["intake"], INTAKE_KEYS, "#{path}.intake") if e["intake"].is_a?(Hash) end Array(raw["rules"]).each_with_index do |r, i| path = "$.rules[#{i}]" walk(r, RULE_KEYS, path) if r["refresh"].is_a?(Hash) walk(r["refresh"], REFRESH_KEYS, "#{path}.refresh") validate_fetch_timeout!(r["refresh"]["fetch_timeout_seconds"], "#{path}.refresh.fetch_timeout_seconds") end walk(r["promotion"], PROMOTION_KEYS, "#{path}.promotion") if r["promotion"].is_a?(Hash) end end |
.validate_fetch_timeout!(value, path) ⇒ Object
42 43 44 45 46 47 48 49 |
# File 'lib/textus/manifest/schema.rb', line 42 def self.validate_fetch_timeout!(value, path) return if value.nil? return if value.is_a?(Integer) && value.positive? && value <= FETCH_TIMEOUT_SECONDS_CEILING raise BadManifest.new( "fetch_timeout_seconds at '#{path}' must be a positive integer ≤ #{FETCH_TIMEOUT_SECONDS_CEILING} (got #{value.inspect})", ) end |
.walk(hash, allowed, path) ⇒ Object
51 52 53 54 55 56 57 58 59 |
# File 'lib/textus/manifest/schema.rb', line 51 def self.walk(hash, allowed, path) return unless hash.is_a?(Hash) hash.each_key do |k| next if allowed.include?(k) raise BadManifest.new("unknown key '#{k}' at '#{path}'") end end |