class PlaceOS::Model::OAuthAuthentication

Overview

See: https://github.com/omniauth/omniauth-oauth2

Included Modules

Defined in:

placeos-models/oauth_authentication.cr

Constant Summary

CALLBACKS = {before_save: [] of Nil, after_save: [] of Nil, before_create: [do self.created_at = self.updated_at = Time.utc end] of Nil, after_create: [] of Nil, before_update: [do self.updated_at = Time.utc end] of Nil, after_update: [] of Nil, before_destroy: [] of Nil, after_destroy: [] of Nil}

See: https://github.com/omniauth/omniauth-oauth2

Log = ::Log.for(self)

See: https://github.com/omniauth/omniauth-oauth2

Constructors

Class Method Summary

Instance Method Summary

Instance methods inherited from class PlaceOS::Model::ModelBase

after_create after_create, after_destroy after_destroy, after_save after_save, after_update after_update, apply_defaults apply_defaults, assign_attributes(params : HTTP::Params | Hash(String, String) | Tuple(String, String))
assign_attributes(model : PlaceOS::Model::ModelBase)
assign_attributes
assign_attributes
, attributes attributes, attributes_tuple attributes_tuple, before_create before_create, before_destroy before_destroy, before_save before_save, before_update before_update, invoke_props invoke_props, persistent_attributes persistent_attributes, run_create_callbacks(&) run_create_callbacks, run_destroy_callbacks(&) run_destroy_callbacks, run_save_callbacks(&) run_save_callbacks, run_update_callbacks(&) run_update_callbacks

Constructor methods inherited from class PlaceOS::Model::ModelBase

new(ctx : YAML::ParseContext, node : YAML::Nodes::Node)
new(pull : JSON::PullParser)
new(rs : DB::ResultSet)
new

Class methods inherited from class PlaceOS::Model::ModelBase

attributes : Array(Symbol) attributes, auto_generate_id : Bool auto_generate_id, from_rs(rs : DB::ResultSet) from_rs, primary_key : Symbol primary_key

Instance methods inherited from module PlaceOS::Model::Associations

format_list_for_postgres(list : Enumerable(String)) : String format_list_for_postgres, reset_associations reset_associations

Class methods inherited from module PlaceOS::Model::Associations

format_list_for_postgres(list : Enumerable(String)) : String format_list_for_postgres

Macros inherited from module PlaceOS::Model::Associations

belongs_to(parent_class, dependent = :none, association_name = nil, foreign_key = nil, presence = false, pk_type = nil, serialize = true) belongs_to, has_many(child_class, collection_name = nil, dependent = :none, foreign_key = nil, serialize = false) has_many, has_one(child_class, dependent = :none, association_name = nil, presence = false) has_one

Constructor Detail

def self.from_json(string_or_io : String | IO, trusted : Bool = false) : self #

See: https://github.com/omniauth/omniauth-oauth2


def self.from_json(string_or_io : String | IO, root : String, trusted : Bool = false) : self #

Deserializes the given JSON in string_or_io into an instance of self, assuming the JSON consists of an JSON object with key root, and whose value is the value to deserialize. Will not deserialise from fields with mass_assign: false

class User < ActiveModel::Model
  attribute name : String
  attribute google_id : UUID, mass_assign: false
end

User.from_json(%({"main": {"name": "Jason", "google_id": "f6f70bfb-c882-446d-8758-7ce47db39620"}}), root: "main") # => #<User:0x103131b20 @name="Jason">

def self.from_trusted_json(string_or_io : String | IO, root : String) : self #

See: https://github.com/omniauth/omniauth-oauth2


def self.from_trusted_json(string_or_io : String | IO) : self #

Serialize from a trusted JSON source


def self.from_trusted_yaml(string_or_io : String | IO) : self #

Serialize from a trusted YAML source


def self.from_yaml(string_or_io : String | IO, trusted : Bool = false) : self #

See: https://github.com/omniauth/omniauth-oauth2


def self.new(ctx : YAML::ParseContext, node : YAML::Nodes::Node) #

See: https://github.com/omniauth/omniauth-oauth2


def self.new(pull : JSON::PullParser) #

See: https://github.com/omniauth/omniauth-oauth2


def self.new(rs : DB::ResultSet) #

See: https://github.com/omniauth/omniauth-oauth2


def self.new(created_at : Time | ActiveModel::Model::None = ::ActiveModel::Model::None.new, updated_at : Time | ActiveModel::Model::None = ::ActiveModel::Model::None.new, name : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, client_id : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, client_secret : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, info_mappings : Hash(String, String) | ActiveModel::Model::None = ::ActiveModel::Model::None.new, authorize_params : Hash(String, String) | ActiveModel::Model::None = ::ActiveModel::Model::None.new, ensure_matching : Hash(String, Array(String)) | ActiveModel::Model::None = ::ActiveModel::Model::None.new, site : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, authorize_url : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, token_method : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, auth_scheme : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, token_url : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, scope : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, raw_info_url : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, authority_id : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, id : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new) #

See: https://github.com/omniauth/omniauth-oauth2


def self.new(params : HTTP::Params | Hash(String, String) | Tuple(String, String)) #

Initialize PlaceOS::Model::OAuthAuthentication from HTTP::Params.


Class Method Detail

def self.attributes : Array(Symbol) #

Returns all attribute keys.


def self.auto_generate_id : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def self.by_authority_id(id) #

Look up instances of this model dependent on the foreign key


def self.changes(id : PrimaryKeyType = nil) : ChangeFeed #

Changefeed at row (if #id passed) or whole table level. Returns a ChangeFeed instance which can be used to invoke async callbacks via on or use blocking Iterator via each method.


def self.elastic #

See: https://github.com/omniauth/omniauth-oauth2


def self.from_rs(__temp_610 : DB::ResultSet) #

See: https://github.com/omniauth/omniauth-oauth2


def self.on_error(err : Exception | IO::Error) #

See: https://github.com/omniauth/omniauth-oauth2


def self.primary_key : Symbol #

See: https://github.com/omniauth/omniauth-oauth2


def self.table_name #

See: https://github.com/omniauth/omniauth-oauth2


Instance Method Detail

def __authority : Authority | Nil #

def __authority=(__authority : Authority | Nil) #

def after_create #

See: https://github.com/omniauth/omniauth-oauth2


def after_destroy #

See: https://github.com/omniauth/omniauth-oauth2


def after_initialize(trusted : Bool) #

See: https://github.com/omniauth/omniauth-oauth2


def after_save #

See: https://github.com/omniauth/omniauth-oauth2


def after_update #

See: https://github.com/omniauth/omniauth-oauth2


def apply_defaults #

Generate code to apply default values


def assign_attributes(created_at : Time | Missing = Missing, updated_at : Time | Missing = Missing, name : String | Missing = Missing, client_id : String | Missing = Missing, client_secret : String | Missing = Missing, info_mappings : Hash(String, String) | Missing = Missing, authorize_params : Hash(String, String) | Missing = Missing, ensure_matching : Hash(String, Array(String)) | Missing = Missing, site : String | Missing = Missing, authorize_url : String | Missing = Missing, token_method : String | Missing = Missing, auth_scheme : String | Missing = Missing, token_url : String | Missing = Missing, scope : String | Missing = Missing, raw_info_url : String | Nil | Missing = Missing, authority_id : String | Nil | Missing = Missing, id : String | Nil | Missing = Missing) #

Assign to multiple attributes.


def assign_attributes(params : HTTP::Params | Hash(String, String) | Tuple(String, String)) #

Assign to mulitple attributes via HTTP::Params.


def assign_attributes(model : PlaceOS::Model::OAuthAuthentication) #

Assign to multiple attributes from a model object


def assign_attributes_from_json(json, root : String) #

See: https://github.com/omniauth/omniauth-oauth2


def assign_attributes_from_json(json) #

See: https://github.com/omniauth/omniauth-oauth2


def assign_attributes_from_trusted_json(json, root : String) #

See: https://github.com/omniauth/omniauth-oauth2


def assign_attributes_from_trusted_json(json) #

Assign each field from JSON if field exists in JSON and has changed in model


def assign_attributes_from_trusted_yaml(yaml) #

See: https://github.com/omniauth/omniauth-oauth2


def assign_attributes_from_yaml(yaml) #

Uses the YAML parser as JSON is valid YAML


def attributes #

Returns a Hash of all attribute values


def attributes_tuple #

Returns a NamedTuple of all attribute values.


def auth_scheme : String #

#auth_scheme getter


def auth_scheme=(value : String) #

#auth_scheme setter


def auth_scheme? : String | Nil #

If not set it defaults to "request_body", others include "basic_auth"


def auth_scheme_assigned? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def auth_scheme_change : Tuple(String | Nil, String | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def auth_scheme_changed? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def auth_scheme_default : String #

#auth_scheme's default value


def auth_scheme_present? : Bool #

If not set it defaults to "request_body", others include "basic_auth"


def auth_scheme_was : String | Nil #

See: https://github.com/omniauth/omniauth-oauth2


def auth_scheme_will_change! : Nil #

Include #auth_scheme in the set of changed attributes, whether it has changed or not.


def authority : Authority | Nil #

Retrieves the parent relationship


def authority! : Authority #

def authority=(parent : Authority) #

Sets the parent relationship


def authority_id : String | Nil #

#authority_id getter


def authority_id=(value : String | Nil) #

#authority_id setter


def authority_id_assigned? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def authority_id_change : Tuple(String | Nil | Nil, String | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def authority_id_changed? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def authority_id_default : String | Nil #

#authority_id's default value


def authority_id_present? : Bool #

def authority_id_was : String | Nil | Nil #

See: https://github.com/omniauth/omniauth-oauth2


def authority_id_will_change! : Nil #

Include #authority_id in the set of changed attributes, whether it has changed or not.


def authorize_params : Hash(String, String) #

def authorize_params=(value : Hash(String, String)) #

def authorize_params? : Hash(String, String) | Nil #

Maps additional params to be added to the authorisation request


def authorize_params_assigned? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def authorize_params_change : Tuple(Hash(String, String) | Nil, Hash(String, String) | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def authorize_params_changed? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def authorize_params_default : Hash(String, String) #

#authorize_params's default value


def authorize_params_present? : Bool #

Maps additional params to be added to the authorisation request


def authorize_params_was : Hash(String, String) | Nil #

See: https://github.com/omniauth/omniauth-oauth2


def authorize_params_will_change! : Nil #

Include #authorize_params in the set of changed attributes, whether it has changed or not.


def authorize_url : String #

def authorize_url=(value : String) #

def authorize_url? : String | Nil #

The SSO providers URL for authorization, defaults to: oauth/authorize Google is /o/oauth2/auth


def authorize_url_assigned? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def authorize_url_change : Tuple(String | Nil, String | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def authorize_url_changed? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def authorize_url_default : String #

#authorize_url's default value


def authorize_url_present? : Bool #

The SSO providers URL for authorization, defaults to: oauth/authorize Google is /o/oauth2/auth


def authorize_url_was : String | Nil #

See: https://github.com/omniauth/omniauth-oauth2


def authorize_url_will_change! : Nil #

Include #authorize_url in the set of changed attributes, whether it has changed or not.


def before_create #

See: https://github.com/omniauth/omniauth-oauth2


def before_destroy #

See: https://github.com/omniauth/omniauth-oauth2


def before_save #

See: https://github.com/omniauth/omniauth-oauth2


def before_update #

See: https://github.com/omniauth/omniauth-oauth2


def changed? #

Check if any attributes have changed.


def changed_attributes #

Returns a Hash with all changed attributes.


def changed_json(io : IO) : Nil #

Serialize the set of changed attributes to JSON.


def changed_json : String #

Serialize the set of changed attributes to JSON.


def changed_persist_attributes #

See: https://github.com/omniauth/omniauth-oauth2


def changed_yaml(io : IO) : Nil #

Serialize the set of changed attributes to YAML.


def changed_yaml : String #

Serialize the set of changed attributes to YAML.


def clear_changes_information #

Reset changes for all attributes.


def client_id : String #

#client_id getter


def client_id=(value : String) #

#client_id setter


def client_id? : String | Nil #

The client ID configured for this application


def client_id_assigned? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def client_id_change : Tuple(String | Nil, String | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def client_id_changed? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def client_id_default : String #

#client_id's default value


def client_id_present? : Bool #

The client ID configured for this application


def client_id_was : String | Nil #

See: https://github.com/omniauth/omniauth-oauth2


def client_id_will_change! : Nil #

Include #client_id in the set of changed attributes, whether it has changed or not.


def client_secret : String #

def client_secret=(value : String) #

def client_secret? : String | Nil #

The secret configured for this application


def client_secret_assigned? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def client_secret_change : Tuple(String | Nil, String | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def client_secret_changed? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def client_secret_default : String #

#client_secret's default value


def client_secret_present? : Bool #

The secret configured for this application


def client_secret_was : String | Nil #

See: https://github.com/omniauth/omniauth-oauth2


def client_secret_will_change! : Nil #

Include #client_secret in the set of changed attributes, whether it has changed or not.


def created_at : Time #

#created_at getter


def created_at=(value : Time) #

Setters #created_at setter


def created_at? : Time | Nil #

def created_at_assigned? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def created_at_change : Tuple(Time | Nil, Time | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def created_at_changed? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def created_at_default : Time #

#created_at's default value


def created_at_present? : Bool #

def created_at_was : Time | Nil #

See: https://github.com/omniauth/omniauth-oauth2


def created_at_will_change! : Nil #

Include #created_at in the set of changed attributes, whether it has changed or not.


def ensure_matching : Hash(String, Array(String)) #

def ensure_matching=(value : Hash(String, Array(String))) #

def ensure_matching? : Hash(String, Array(String)) | Nil #

Security checks to be made on the returned data


def ensure_matching_assigned? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def ensure_matching_change : Tuple(Hash(String, Array(String)) | Nil, Hash(String, Array(String)) | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def ensure_matching_changed? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def ensure_matching_default : Hash(String, Array(String)) #

#ensure_matching's default value


def ensure_matching_present? : Bool #

Security checks to be made on the returned data


def ensure_matching_was : Hash(String, Array(String)) | Nil #

See: https://github.com/omniauth/omniauth-oauth2


def ensure_matching_will_change! : Nil #

Include #ensure_matching in the set of changed attributes, whether it has changed or not.


def id : String | Nil #

#id getter


def id=(value : String | Nil) #

#id setter


def id? : String | Nil | Nil #

See: https://github.com/omniauth/omniauth-oauth2


def id_assigned? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def id_change : Tuple(String | Nil | Nil, String | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def id_changed? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def id_default : String | Nil #

#id's default value


def id_present? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def id_was : String | Nil | Nil #

See: https://github.com/omniauth/omniauth-oauth2


def id_will_change! : Nil #

Include #id in the set of changed attributes, whether it has changed or not.


def info_mappings : Hash(String, String) #

def info_mappings=(value : Hash(String, String)) #

def info_mappings? : Hash(String, String) | Nil #

Maps an expected key to a provided key i.e. {used_in_engine => used_by_remote}


def info_mappings_assigned? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def info_mappings_change : Tuple(Hash(String, String) | Nil, Hash(String, String) | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def info_mappings_changed? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def info_mappings_default : Hash(String, String) #

#info_mappings's default value


def info_mappings_present? : Bool #

Maps an expected key to a provided key i.e. {used_in_engine => used_by_remote}


def info_mappings_was : Hash(String, String) | Nil #

See: https://github.com/omniauth/omniauth-oauth2


def info_mappings_will_change! : Nil #

Include #info_mappings in the set of changed attributes, whether it has changed or not.


def invoke_props #

See: https://github.com/omniauth/omniauth-oauth2


def name : String #

#name getter


def name=(value : String) #

#name setter


def name? : String | Nil #

def name_assigned? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def name_change : Tuple(String | Nil, String | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def name_changed? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def name_default : String #

#name's default value


def name_present? : Bool #

def name_was : String | Nil #

See: https://github.com/omniauth/omniauth-oauth2


def name_will_change! : Nil #

Include #name in the set of changed attributes, whether it has changed or not.


def persistent_attributes #

See: https://github.com/omniauth/omniauth-oauth2


def raw_info_url : String | Nil #

#raw_info_url getter


def raw_info_url=(value : String | Nil) #

#raw_info_url setter


def raw_info_url_assigned? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def raw_info_url_change : Tuple(String | Nil | Nil, String | Nil | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def raw_info_url_changed? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def raw_info_url_default : String | Nil #

#raw_info_url's default value


def raw_info_url_present? : Bool #

URL to call with a valid token to obtain the users profile data (name, email etc)


def raw_info_url_was : String | Nil | Nil #

See: https://github.com/omniauth/omniauth-oauth2


def raw_info_url_will_change! : Nil #

Include #raw_info_url in the set of changed attributes, whether it has changed or not.


def reset_associations #

def restore_attributes #

Reset each attribute to their previous values and clears all changes.


def run_create_callbacks(&) #

Wrap a block with callbacks for the appropriate crud operation


def run_destroy_callbacks(&) #

See: https://github.com/omniauth/omniauth-oauth2


def run_save_callbacks(&) #

See: https://github.com/omniauth/omniauth-oauth2


def run_update_callbacks(&) #

See: https://github.com/omniauth/omniauth-oauth2


def scope : String #

#scope getter


def scope=(value : String) #

#scope setter


def scope? : String | Nil #

Space separated scope strings i.e. https://www.googleapis.com/auth/devstorage.readonly https://www.googleapis.com/auth/prediction


def scope_assigned? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def scope_change : Tuple(String | Nil, String | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def scope_changed? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def scope_default : String #

#scope's default value


def scope_present? : Bool #

Space separated scope strings i.e. https://www.googleapis.com/auth/devstorage.readonly https://www.googleapis.com/auth/prediction


def scope_was : String | Nil #

See: https://github.com/omniauth/omniauth-oauth2


def scope_will_change! : Nil #

Include #scope in the set of changed attributes, whether it has changed or not.


def site : String #

#site getter


def site=(value : String) #

#site setter


def site? : String | Nil #

The HTTP URL of the SSO provider


def site_assigned? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def site_change : Tuple(String | Nil, String | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def site_changed? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def site_default : String #

#site's default value


def site_present? : Bool #

The HTTP URL of the SSO provider


def site_was : String | Nil #

See: https://github.com/omniauth/omniauth-oauth2


def site_will_change! : Nil #

Include #site in the set of changed attributes, whether it has changed or not.


def table_name #

See: https://github.com/omniauth/omniauth-oauth2


def token_method : String #

#token_method getter


def token_method=(value : String) #

#token_method setter


def token_method? : String | Nil #

If not set it defaults to "post"


def token_method_assigned? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def token_method_change : Tuple(String | Nil, String | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def token_method_changed? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def token_method_default : String #

#token_method's default value


def token_method_present? : Bool #

If not set it defaults to "post"


def token_method_was : String | Nil #

See: https://github.com/omniauth/omniauth-oauth2


def token_method_will_change! : Nil #

Include #token_method in the set of changed attributes, whether it has changed or not.


def token_url : String #

#token_url getter


def token_url=(value : String) #

#token_url setter


def token_url? : String | Nil #

defaults to: oauth/token however google is: /o/oauth2/token


def token_url_assigned? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def token_url_change : Tuple(String | Nil, String | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def token_url_changed? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def token_url_default : String #

#token_url's default value


def token_url_present? : Bool #

defaults to: oauth/token however google is: /o/oauth2/token


def token_url_was : String | Nil #

See: https://github.com/omniauth/omniauth-oauth2


def token_url_will_change! : Nil #

Include #token_url in the set of changed attributes, whether it has changed or not.


def updated_at : Time #

#updated_at getter


def updated_at=(value : Time) #

#updated_at setter


def updated_at? : Time | Nil #

def updated_at_assigned? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def updated_at_change : Tuple(Time | Nil, Time | Nil) | Nil #

Returns a Tuple of the previous and the current value of an instance variable if it has changed


def updated_at_changed? : Bool #

See: https://github.com/omniauth/omniauth-oauth2


def updated_at_default : Time #

#updated_at's default value


def updated_at_present? : Bool #

def updated_at_was : Time | Nil #

See: https://github.com/omniauth/omniauth-oauth2


def updated_at_will_change! : Nil #

Include #updated_at in the set of changed attributes, whether it has changed or not.


def validate_nilability #

Validate that all non-nillable fields have values.