Module: ClearElection::Schema
Instance Method Summary collapse
- #_expand_refs!(json) ⇒ Object
- #_get(group: nil, item:, version:, expand: false) ⇒ Object
- #api(agent, version:) ⇒ Object
- #ballot(version: BALLOT_SCHEMA_VERSION) ⇒ Object
- #election(version: ELECTION_SCHEMA_VERSION) ⇒ Object
- #root ⇒ Object
- #validate(schema, data, insert_defaults: nil, raise_on_error: false) ⇒ Object
- #validate!(*args, **kwd) ⇒ Object
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 (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! 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| (json) if } 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 |
#root ⇒ Object
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 |