Module: VisualBriefGuard
- Defined in:
- lib/visual_brief_guard.rb,
lib/visual_brief_guard/version.rb
Defined Under Namespace
Classes: InvalidBrief
Constant Summary collapse
- REQUIRED_KEYS =
%w[ scene aspect_ratio color_palette reference_tags ].freeze
- ALLOWED_KEYS =
(REQUIRED_KEYS + %w[schema_version constraints notes]).freeze
- VERSION =
"1.0.0"
Class Method Summary collapse
- .canonical(brief) ⇒ Object
- .canonical_json(brief) ⇒ Object
- .export(brief, path) ⇒ Object
- .fingerprint(brief) ⇒ Object
- .validate!(brief) ⇒ Object
Class Method Details
.canonical(brief) ⇒ Object
39 40 41 42 |
# File 'lib/visual_brief_guard.rb', line 39 def canonical(brief) validate!(brief) canonicalize(brief.transform_keys(&:to_s)) end |
.canonical_json(brief) ⇒ Object
44 45 46 |
# File 'lib/visual_brief_guard.rb', line 44 def canonical_json(brief) JSON.generate(canonical(brief)) end |
.export(brief, path) ⇒ Object
52 53 54 55 |
# File 'lib/visual_brief_guard.rb', line 52 def export(brief, path) File.write(path, "#{canonical_json(brief)}\n") path end |
.fingerprint(brief) ⇒ Object
48 49 50 |
# File 'lib/visual_brief_guard.rb', line 48 def fingerprint(brief) Digest::SHA256.hexdigest(canonical_json(brief)) end |
.validate!(brief) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/visual_brief_guard.rb', line 20 def validate!(brief) raise InvalidBrief, "brief must be a Hash" unless brief.is_a?(Hash) string_keys = brief.transform_keys(&:to_s) missing = REQUIRED_KEYS.reject do |key| string_keys.key?(key) && !blank?(string_keys[key]) end raise InvalidBrief, "missing required fields: #{missing.join(', ')}" unless missing.empty? unknown = string_keys.keys - ALLOWED_KEYS raise InvalidBrief, "unknown fields: #{unknown.sort.join(', ')}" unless unknown.empty? unless string_keys["reference_tags"].is_a?(Array) raise InvalidBrief, "reference_tags must be an Array" end true end |