Class: LcpRuby::Metadata::SchemaValidator

Inherits:
Object
  • Object
show all
Defined in:
lib/lcp_ruby/metadata/schema_validator.rb

Constant Summary collapse

SCHEMA_TYPES =
%w[model presenter permission view_group menu type page theme auth].freeze
SCHEMAS_DIR =
File.expand_path("../schemas", __dir__).freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeSchemaValidator

Returns a new instance of SchemaValidator.



16
17
18
# File 'lib/lcp_ruby/metadata/schema_validator.rb', line 16

def initialize
  @schemas = SCHEMA_TYPES.to_h { |name| [ name, self.class.schema_for(name) ] }
end

Class Method Details

.schema_for(type) ⇒ Object

Returns the cached JSONSchemer instance for ‘type` (`:permission`, `:model`, …). Used by `SchemaValidator#initialize` to populate its per-instance `@schemas`, and by test code that wants to validate raw hashes against a specific schema without going through a full Loader. Safe to call concurrently — the underlying JSONSchemer instances are immutable after construction.

Raises:

  • (ArgumentError)


26
27
28
29
30
31
32
33
# File 'lib/lcp_ruby/metadata/schema_validator.rb', line 26

def self.schema_for(type)
  name = type.to_s
  raise ArgumentError, "Unknown schema type: #{type}" unless SCHEMA_TYPES.include?(name)

  @schema_cache[name] ||= JSONSchemer.schema(
    JSON.parse(File.read(File.join(SCHEMAS_DIR, "#{name}.json")))
  )
end

Instance Method Details

#validate_auth_hash(hash) ⇒ Object



92
93
94
95
96
# File 'lib/lcp_ruby/metadata/schema_validator.rb', line 92

def validate_auth_hash(hash)
  return [] unless hash

  validate(:auth, hash, context_name: "Auth configuration")
end

#validate_menu(menu_definition) ⇒ Object



63
64
65
66
67
68
# File 'lib/lcp_ruby/metadata/schema_validator.rb', line 63

def validate_menu(menu_definition)
  raw = menu_definition.raw_hash
  return [] unless raw

  validate(:menu, raw, context_name: "Menu")
end

#validate_model(model_definition) ⇒ Object



35
36
37
38
39
40
# File 'lib/lcp_ruby/metadata/schema_validator.rb', line 35

def validate_model(model_definition)
  raw = model_definition.raw_hash
  return [] unless raw

  validate(:model, raw, context_name: "Model '#{model_definition.name}'")
end

#validate_page(page_definition) ⇒ Object



77
78
79
80
81
82
83
84
# File 'lib/lcp_ruby/metadata/schema_validator.rb', line 77

def validate_page(page_definition)
  raw = page_definition.raw_hash
  return [] unless raw

  validate(:page, raw,
    context_name: "Page '#{page_definition.name}'",
    source_path: page_definition.source_path)
end

#validate_permission(permission_definition) ⇒ Object



49
50
51
52
53
54
# File 'lib/lcp_ruby/metadata/schema_validator.rb', line 49

def validate_permission(permission_definition)
  raw = permission_definition.raw_hash
  return [] unless raw

  validate(:permission, raw, context_name: "Permission '#{permission_definition.model}'")
end

#validate_presenter(presenter_definition) ⇒ Object



42
43
44
45
46
47
# File 'lib/lcp_ruby/metadata/schema_validator.rb', line 42

def validate_presenter(presenter_definition)
  raw = presenter_definition.raw_hash
  return [] unless raw

  validate(:presenter, raw, context_name: "Presenter '#{presenter_definition.name}'")
end

#validate_theme_hash(hash) ⇒ Object



86
87
88
89
90
# File 'lib/lcp_ruby/metadata/schema_validator.rb', line 86

def validate_theme_hash(hash)
  return [] unless hash

  validate(:theme, hash, context_name: "Theme")
end

#validate_type_hash(hash, name: nil) ⇒ Object



70
71
72
73
74
75
# File 'lib/lcp_ruby/metadata/schema_validator.rb', line 70

def validate_type_hash(hash, name: nil)
  return [] unless hash

  context = name ? "Type '#{name}'" : "Type"
  validate(:type, hash, context_name: context)
end

#validate_view_group(view_group_definition) ⇒ Object



56
57
58
59
60
61
# File 'lib/lcp_ruby/metadata/schema_validator.rb', line 56

def validate_view_group(view_group_definition)
  raw = view_group_definition.raw_hash
  return [] unless raw

  validate(:view_group, raw, context_name: "View group '#{view_group_definition.name}'")
end