Module: ClearElection::Schema

Extended by:
Schema
Included in:
Schema
Defined in:
lib/clear-election-sdk/schema.rb

Instance Method Summary collapse

Instance Method Details

#_expand_refs!(json) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/clear-election-sdk/schema.rb', line 46

def _expand_refs!(json)
  json.tap {
    JSON.recurse_proc json do |item|
      if Hash === item and uri = item['$ref']
        uri = Addressable::URI.parse(uri)
        if uri.scheme
          source = uri
          source = ClearElection::Schema.root.join uri.path.sub(%r{^/}, '') if uri.scheme == 'file'
          item.delete '$ref'
          item.merge! _expand_refs! JSON.parse source.read
        end
      end
    end
  }
end

#_get(group: nil, item:, version:, expand: false) ⇒ Object



36
37
38
39
40
# File 'lib/clear-election-sdk/schema.rb', line 36

def _get(group:nil, item:, version:, expand: false)
  JSON.parse(File.read(root + (group||"") + "#{item}-#{version}.schema.json")).tap { |json|
    _expand_refs!(json) if expand
  }
end

#api(agent, version:) ⇒ Object



42
43
44
# File 'lib/clear-election-sdk/schema.rb', line 42

def api(agent, version:)
  _get(group: "api", item: agent, version: version, expand: true)
end

#ballot(version: BALLOT_SCHEMA_VERSION) ⇒ Object



13
14
15
# File 'lib/clear-election-sdk/schema.rb', line 13

def ballot(version: BALLOT_SCHEMA_VERSION)
  _get(item: "ballot", version: version)
end

#election(version: ELECTION_SCHEMA_VERSION) ⇒ Object



9
10
11
# File 'lib/clear-election-sdk/schema.rb', line 9

def election(version: ELECTION_SCHEMA_VERSION)
  _get(item: "election", version: version)
end

#rootObject



5
6
7
# File 'lib/clear-election-sdk/schema.rb', line 5

def root
  @root ||= Pathname.new(__FILE__).dirname.parent.parent + "schemas"
end

#validate(schema, data, insert_defaults: nil, raise_on_error: false) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/clear-election-sdk/schema.rb', line 21

def validate(schema, data, insert_defaults: nil, raise_on_error: false)
  errors = []
  Dir.chdir root do
    args = { insert_defaults: insert_defaults }
    if raise_on_error
      method = :validate!
    else
      method = :fully_validate
      args[:errors_as_objects] = true
    end
    errors = JSON::Validator.send method, schema, data, **args
  end
  errors
end

#validate!(*args, **kwd) ⇒ Object



17
18
19
# File 'lib/clear-election-sdk/schema.rb', line 17

def validate!(*args, **kwd)
  validate(*args, **kwd.merge(raise_on_error: true))
end