class

PlaceOS::Model::Survey::Question

Inherits PlaceOS::Model::Timestamps < PlaceOS::Model::Scope < PlaceOS::Model::Associations < PlaceOS::Model::ModelWithAutoKey < Neuroplastic < PgORM::Base < PgORM::Validators < PgORM::Table < PgORM::Persistence < PgORM::Associations < ActiveModel::Callbacks < ActiveModel::Validation < ActiveModel::Model < DB::Mappable < DB::Serializable < YAML::Serializable < JSON::Serializable < Reference < Object

Constants

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: [:destroy_answers] of Nil, after_destroy: [] of Nil, }
Log = ::Log.for(self)
PRIMARY_KEY_TYPES = {:id => (Int64 | Nil)} of Nil => Nil

macro level key => type

PRIMARY_KEYS = [{:id}]

Constructors

from_json(string_or_io : String | IO, trusted : Bool = false) : 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">
from_trusted_json(string_or_io : String | IO, root : String) : self
from_trusted_json(string_or_io : String | IO) : self

Serialize from a trusted JSON source

from_trusted_yaml(string_or_io : String | IO) : self

Serialize from a trusted YAML source

from_yaml(string_or_io : String | IO, trusted : Bool = false) : self
new(rs : DB::ResultSet)
new(title : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, description : String | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, type : String | ActiveModel::Model::None = ::ActiveModel::Model::None.new, options : JSON::Any | ActiveModel::Model::None = ::ActiveModel::Model::None.new, required : Bool | ActiveModel::Model::None = ::ActiveModel::Model::None.new, choices : JSON::Any | ActiveModel::Model::None = ::ActiveModel::Model::None.new, max_rating : Int32 | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, tags : Array(String) | ActiveModel::Model::None = ::ActiveModel::Model::None.new, deleted_at : Int64 | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, deleted : Bool | ActiveModel::Model::None = ::ActiveModel::Model::None.new, id : Int64 | Nil | ActiveModel::Model::None = ::ActiveModel::Model::None.new, created_at : Time | ActiveModel::Model::None = ::ActiveModel::Model::None.new, updated_at : Time | ActiveModel::Model::None = ::ActiveModel::Model::None.new)

Initialize PlaceOS::Model::Survey::Question from HTTP::Params.

Class methods

attributes

Returns all attribute keys.

changes(id : Int64 | Nil | Nil = 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.

elastic
from_rs(__temp_2548 : DB::ResultSet)
list(survey_id : Int64 | Nil = nil, deleted : Bool | Nil = nil)
Source
on_error(err : Exception | IO::Error)
primary_key

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk

Source
required_question_ids(survey_id : Int64)
Source
table_name

Instance methods

after_create

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk

after_destroy

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk

after_initialize(trusted : Bool)
after_save

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk

after_update

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk

answers
Source
apply_defaults

Generate code to apply default values

assign_attributes(title : String | Missing = Missing, description : String | Nil | Missing = Missing, type : String | Missing = Missing, options : JSON::Any | Missing = Missing, required : Bool | Missing = Missing, choices : JSON::Any | Missing = Missing, max_rating : Int32 | Nil | Missing = Missing, tags : Array(String) | Missing = Missing, deleted_at : Int64 | Nil | Missing = Missing, deleted : Bool | Missing = Missing, id : Int64 | Nil | Missing = Missing, created_at : Time | Missing = Missing, updated_at : Time | Missing = Missing)

Assign to multiple attributes.

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

Assign to multiple attributes via HTTP::Params.

assign_attributes(model : PlaceOS::Model::Survey::Question)

Assign to multiple attributes from a model object

assign_attributes_from_json(json, root : String)
assign_attributes_from_json(json)
assign_attributes_from_trusted_json(json, root : String)
assign_attributes_from_trusted_json(json)

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

assign_attributes_from_trusted_yaml(yaml)
assign_attributes_from_yaml(yaml)

Uses the YAML parser as JSON is valid YAML

attributes

Returns a Hash of all attribute values

attributes_tuple

Returns a NamedTuple of all attribute values.

before_create

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk

before_destroy

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk

before_save

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk

before_update

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk

changed?

Check if any attributes have changed.

changed_attributes

Returns a Hash with all changed attributes.

changed_json(io : IO) : Nil

Serialize the set of changed attributes to JSON.

changed_json

Serialize the set of changed attributes to JSON.

changed_persist_attributes
changed_yaml(io : IO) : Nil

Serialize the set of changed attributes to YAML.

changed_yaml

Serialize the set of changed attributes to YAML.

choices

choices getter

choices=(value : JSON::Any)

choices setter

choices?

NOTE: use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.

choices_assigned?
choices_change

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

choices_changed?
choices_default

choices's default value

Source
choices_present?
choices_removed?
choices_was
choices_will_change!

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

clear_changes_information

Reset changes for all attributes.

clear_persisted
Source
created_at

created_at getter

created_at=(value : Time)

created_at setter

created_at?

NOTE: use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.

created_at_assigned?
created_at_change

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

created_at_changed?
created_at_default

created_at's default value

created_at_present?
created_at_removed?
created_at_was
created_at_will_change!

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

deleted

Accessors for attributes without JSON mapping

deleted=(value : Bool)

deleted setter

deleted=(deleted)

Accessors for attributes without JSON mapping

deleted?

NOTE: use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.

deleted_assigned?
deleted_at

deleted_at getter

deleted_at=(value : Int64 | Nil)

deleted_at setter

deleted_at_assigned?
deleted_at_change

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

deleted_at_changed?
deleted_at_default

deleted_at's default value

Source
deleted_at_present?
deleted_at_removed?
deleted_at_was
deleted_at_will_change!

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

deleted_change

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

deleted_changed?
deleted_default

deleted's default value

Source
deleted_present?
deleted_removed?
deleted_was
deleted_will_change!

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

description

description getter

description=(value : String | Nil)

description setter

description_assigned?
description_change

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

description_changed?
description_default

description's default value

Source
description_present?
description_removed?
description_was
description_will_change!

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

destroy_answers
id

id getter

id=(value : Int64 | Nil)

id setter

id?
id_assigned?
id_change

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

id_changed?
id_default

id's default value

id_present?
id_removed?
id_was
id_will_change!

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

invoke_props

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk

max_rating

max_rating getter

max_rating=(value : Int32 | Nil)

max_rating setter

max_rating_assigned?
max_rating_change

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

max_rating_changed?
max_rating_default

max_rating's default value

Source
max_rating_present?
max_rating_removed?
max_rating_was
max_rating_will_change!

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

maybe_soft_delete
Source
options

options getter

options=(value : JSON::Any)

options setter

options?

NOTE: use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.

options_assigned?
options_change

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

options_changed?
options_default

options's default value

Source
options_present?
options_removed?
options_was
options_will_change!

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

patch(changes : self)
Source
persistent_attributes

Returns a Hash of all attributes that can be persisted.

primary_key

Base class for all models which have auto-generated bigint as pk and doesn't require string based auto generated pk

Source
primary_key_hash
required

required getter

required=(value : Bool)

required setter

required?

NOTE: use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.

required_assigned?
required_change

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

required_changed?
required_default

required's default value

Source
required_present?
required_removed?
required_was
required_will_change!

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

restore_attributes

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

save!

Saves the record to the database, raising an exception on failure.

For new records, performs an INSERT. For existing records, performs an UPDATE. Only updates changed attributes (dirty tracking).

Example

user = User.new(name: "John")
user.save! # => #<User id: 1, name: "John">

user.name = "Jane"
user.save! # Only updates 'name' column

Raises

  • PgORM::Error::RecordNotSaved if record was destroyed
  • PgORM::Error::RecordInvalid if validation fails
  • PgORM::Error::RecordNotSaved if database operation fails
Source
soft_delete
Source
table_name
tags

tags getter

tags=(value : Array(String))

tags setter

tags?

NOTE: use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.

tags_assigned?
tags_change

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

tags_changed?
tags_default

tags's default value

Source
tags_present?
tags_removed?
tags_was
tags_will_change!

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

title

title getter

title=(value : String)

Setters title setter

title?

NOTE: use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.

title_assigned?
title_change

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

title_changed?
title_default

title's default value

Source
title_present?
title_removed?
title_was
title_will_change!

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

to_json(json : JSON::Builder)
Source
type

type getter

type=(value : String)

type setter

type?

NOTE: use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.

type_assigned?
type_change

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

type_changed?
type_default

type's default value

Source
type_present?
type_removed?
type_was
type_will_change!

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

updated_at

updated_at getter

updated_at=(value : Time)

updated_at setter

updated_at?

NOTE: use getter / getter! (not property / property!) so that the setter defined later in __create_initializer__ is the only setter on the field. Crystal's overload resolution silently fails to replace a property-defined setter with one of identical signature for generic types (e.g. Set(String)?, Array(String)?, String | Array(String)), although it does work for non-generic ones like String?. Defining the setter only once via __create_initializer__ ensures change tracking, sanitization, and custom setter blocks run uniformly across all types.

updated_at_assigned?
updated_at_change

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

updated_at_changed?
updated_at_default

updated_at's default value

updated_at_present?
updated_at_removed?
updated_at_was
updated_at_will_change!

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

validate_nilability

Validate that all non-nillable fields have values.

Macros

scope(name, &block)

Nested types