Class: OCI::IdentityDomains::Models::Policy
- Inherits:
-
Object
- Object
- OCI::IdentityDomains::Models::Policy
- Defined in:
- lib/oci/identity_domains/models/policy.rb
Overview
Policy resource. A named list of rules.
Constant Summary collapse
- IDCS_PREVENTED_OPERATIONS_ENUM =
[ IDCS_PREVENTED_OPERATIONS_REPLACE = 'replace'.freeze, IDCS_PREVENTED_OPERATIONS_UPDATE = 'update'.freeze, IDCS_PREVENTED_OPERATIONS_DELETE = 'delete'.freeze, IDCS_PREVENTED_OPERATIONS_UNKNOWN_ENUM_VALUE = 'UNKNOWN_ENUM_VALUE'.freeze ].freeze
Instance Attribute Summary collapse
-
#active ⇒ BOOLEAN
If true, Policy is active.
-
#compartment_ocid ⇒ String
OCI Compartment Id (ocid) in which the resource lives.
-
#delete_in_progress ⇒ BOOLEAN
A boolean flag indicating this resource in the process of being deleted.
-
#description ⇒ String
Policy Description.
-
#domain_ocid ⇒ String
OCI Domain Id (ocid) in which the resource lives.
-
#external_id ⇒ String
An identifier for the Resource as defined by the Service Consumer.
-
#id ⇒ String
Unique identifier for the SCIM Resource as defined by the Service Provider.
- #idcs_created_by ⇒ OCI::IdentityDomains::Models::IdcsCreatedBy
- #idcs_last_modified_by ⇒ OCI::IdentityDomains::Models::IdcsLastModifiedBy
-
#idcs_last_upgraded_in_release ⇒ String
The release number when the resource was upgraded.
-
#idcs_prevented_operations ⇒ Array<String>
Each value of this attribute specifies an operation that only an internal client may perform on this particular resource.
- #meta ⇒ OCI::IdentityDomains::Models::Meta
-
#name ⇒ String
[Required] Policy name.
-
#ocid ⇒ String
Unique OCI identifier for the SCIM Resource.
-
#policy_groovy ⇒ String
The Groovy script that is run instead of the policy, if the policy type allows the policy to be a Groovy script.
-
#policy_type ⇒ OCI::IdentityDomains::Models::PolicyPolicyType
This attribute is required.
-
#rules ⇒ Array<OCI::IdentityDomains::Models::PolicyRules>
Rules assigned to this policy.
-
#schemas ⇒ Array<String>
[Required] REQUIRED.
-
#tags ⇒ Array<OCI::IdentityDomains::Models::Tags>
A list of tags on this resource.
-
#tenancy_ocid ⇒ String
OCI Tenant Id (ocid) in which the resource lives.
- #urn_ietf_params_scim_schemas_oracle_idcs_extension_ociconsolesignonpolicyconsent_policy ⇒ OCI::IdentityDomains::Models::PolicyExtensionOciconsolesignonpolicyconsentPolicy
Class Method Summary collapse
-
.attribute_map ⇒ Object
Attribute mapping from ruby-style variable name to JSON key.
-
.swagger_types ⇒ Object
Attribute type mapping.
Instance Method Summary collapse
-
#==(other) ⇒ Object
Checks equality by comparing each attribute.
-
#build_from_hash(attributes) ⇒ Object
Builds the object from hash.
- #eql?(other) ⇒ Boolean
-
#hash ⇒ Fixnum
Calculates hash code according to all attributes.
-
#initialize(attributes = {}) ⇒ Policy
constructor
Initializes the object.
-
#to_hash ⇒ Hash
Returns the object in the form of hash.
-
#to_s ⇒ String
Returns the string representation of the object.
Constructor Details
#initialize(attributes = {}) ⇒ Policy
Initializes the object
342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 |
# File 'lib/oci/identity_domains/models/policy.rb', line 342 def initialize(attributes = {}) return unless attributes.is_a?(Hash) # convert string to symbol for hash key attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v } self.id = attributes[:'id'] if attributes[:'id'] self.ocid = attributes[:'ocid'] if attributes[:'ocid'] self.schemas = attributes[:'schemas'] if attributes[:'schemas'] self. = attributes[:'meta'] if attributes[:'meta'] self.idcs_created_by = attributes[:'idcsCreatedBy'] if attributes[:'idcsCreatedBy'] raise 'You cannot provide both :idcsCreatedBy and :idcs_created_by' if attributes.key?(:'idcsCreatedBy') && attributes.key?(:'idcs_created_by') self.idcs_created_by = attributes[:'idcs_created_by'] if attributes[:'idcs_created_by'] self.idcs_last_modified_by = attributes[:'idcsLastModifiedBy'] if attributes[:'idcsLastModifiedBy'] raise 'You cannot provide both :idcsLastModifiedBy and :idcs_last_modified_by' if attributes.key?(:'idcsLastModifiedBy') && attributes.key?(:'idcs_last_modified_by') self.idcs_last_modified_by = attributes[:'idcs_last_modified_by'] if attributes[:'idcs_last_modified_by'] self.idcs_prevented_operations = attributes[:'idcsPreventedOperations'] if attributes[:'idcsPreventedOperations'] raise 'You cannot provide both :idcsPreventedOperations and :idcs_prevented_operations' if attributes.key?(:'idcsPreventedOperations') && attributes.key?(:'idcs_prevented_operations') self.idcs_prevented_operations = attributes[:'idcs_prevented_operations'] if attributes[:'idcs_prevented_operations'] self. = attributes[:'tags'] if attributes[:'tags'] self.delete_in_progress = attributes[:'deleteInProgress'] unless attributes[:'deleteInProgress'].nil? raise 'You cannot provide both :deleteInProgress and :delete_in_progress' if attributes.key?(:'deleteInProgress') && attributes.key?(:'delete_in_progress') self.delete_in_progress = attributes[:'delete_in_progress'] unless attributes[:'delete_in_progress'].nil? self.idcs_last_upgraded_in_release = attributes[:'idcsLastUpgradedInRelease'] if attributes[:'idcsLastUpgradedInRelease'] raise 'You cannot provide both :idcsLastUpgradedInRelease and :idcs_last_upgraded_in_release' if attributes.key?(:'idcsLastUpgradedInRelease') && attributes.key?(:'idcs_last_upgraded_in_release') self.idcs_last_upgraded_in_release = attributes[:'idcs_last_upgraded_in_release'] if attributes[:'idcs_last_upgraded_in_release'] self.domain_ocid = attributes[:'domainOcid'] if attributes[:'domainOcid'] raise 'You cannot provide both :domainOcid and :domain_ocid' if attributes.key?(:'domainOcid') && attributes.key?(:'domain_ocid') self.domain_ocid = attributes[:'domain_ocid'] if attributes[:'domain_ocid'] self.compartment_ocid = attributes[:'compartmentOcid'] if attributes[:'compartmentOcid'] raise 'You cannot provide both :compartmentOcid and :compartment_ocid' if attributes.key?(:'compartmentOcid') && attributes.key?(:'compartment_ocid') self.compartment_ocid = attributes[:'compartment_ocid'] if attributes[:'compartment_ocid'] self.tenancy_ocid = attributes[:'tenancyOcid'] if attributes[:'tenancyOcid'] raise 'You cannot provide both :tenancyOcid and :tenancy_ocid' if attributes.key?(:'tenancyOcid') && attributes.key?(:'tenancy_ocid') self.tenancy_ocid = attributes[:'tenancy_ocid'] if attributes[:'tenancy_ocid'] self.external_id = attributes[:'externalId'] if attributes[:'externalId'] raise 'You cannot provide both :externalId and :external_id' if attributes.key?(:'externalId') && attributes.key?(:'external_id') self.external_id = attributes[:'external_id'] if attributes[:'external_id'] self.name = attributes[:'name'] if attributes[:'name'] self.description = attributes[:'description'] if attributes[:'description'] self.active = attributes[:'active'] unless attributes[:'active'].nil? self.policy_groovy = attributes[:'policyGroovy'] if attributes[:'policyGroovy'] raise 'You cannot provide both :policyGroovy and :policy_groovy' if attributes.key?(:'policyGroovy') && attributes.key?(:'policy_groovy') self.policy_groovy = attributes[:'policy_groovy'] if attributes[:'policy_groovy'] self.rules = attributes[:'rules'] if attributes[:'rules'] self.policy_type = attributes[:'policyType'] if attributes[:'policyType'] raise 'You cannot provide both :policyType and :policy_type' if attributes.key?(:'policyType') && attributes.key?(:'policy_type') self.policy_type = attributes[:'policy_type'] if attributes[:'policy_type'] self. = attributes[:'urn:ietf:params:scim:schemas:oracle:idcs:extension:ociconsolesignonpolicyconsent:Policy'] if attributes[:'urn:ietf:params:scim:schemas:oracle:idcs:extension:ociconsolesignonpolicyconsent:Policy'] raise 'You cannot provide both :urn:ietf:params:scim:schemas:oracle:idcs:extension:ociconsolesignonpolicyconsent:Policy and :urn_ietf_params_scim_schemas_oracle_idcs_extension_ociconsolesignonpolicyconsent_policy' if attributes.key?(:'urn:ietf:params:scim:schemas:oracle:idcs:extension:ociconsolesignonpolicyconsent:Policy') && attributes.key?(:'urn_ietf_params_scim_schemas_oracle_idcs_extension_ociconsolesignonpolicyconsent_policy') self. = attributes[:'urn_ietf_params_scim_schemas_oracle_idcs_extension_ociconsolesignonpolicyconsent_policy'] if attributes[:'urn_ietf_params_scim_schemas_oracle_idcs_extension_ociconsolesignonpolicyconsent_policy'] end |
Instance Attribute Details
#active ⇒ BOOLEAN
If true, Policy is active.
SCIM++ Properties: - caseExact: false - idcsSearchable: true - multiValued: false - mutability: readWrite - required: false - returned: default - type: boolean - uniqueness: none
221 222 223 |
# File 'lib/oci/identity_domains/models/policy.rb', line 221 def active @active end |
#compartment_ocid ⇒ String
OCI Compartment Id (ocid) in which the resource lives.
SCIM++ Properties: - caseExact: false - idcsSearchable: false - multiValued: false - mutability: readOnly - required: false - returned: default - type: string - uniqueness: none
152 153 154 |
# File 'lib/oci/identity_domains/models/policy.rb', line 152 def compartment_ocid @compartment_ocid end |
#delete_in_progress ⇒ BOOLEAN
A boolean flag indicating this resource in the process of being deleted. Usually set to true when synchronous deletion of the resource would take too long.
SCIM++ Properties: - caseExact: false - idcsSearchable: true - multiValued: false - mutability: readOnly - required: false - returned: default - type: boolean - uniqueness: none
110 111 112 |
# File 'lib/oci/identity_domains/models/policy.rb', line 110 def delete_in_progress @delete_in_progress end |
#description ⇒ String
Policy Description
SCIM++ Properties: - idcsSearchable: false - multiValued: false - mutability: readWrite - required: false - returned: default - type: string - uniqueness: none
207 208 209 |
# File 'lib/oci/identity_domains/models/policy.rb', line 207 def description @description end |
#domain_ocid ⇒ String
OCI Domain Id (ocid) in which the resource lives.
SCIM++ Properties: - caseExact: false - idcsSearchable: false - multiValued: false - mutability: readOnly - required: false - returned: default - type: string - uniqueness: none
138 139 140 |
# File 'lib/oci/identity_domains/models/policy.rb', line 138 def domain_ocid @domain_ocid end |
#external_id ⇒ String
An identifier for the Resource as defined by the Service Consumer. The externalId may simplify identification of the Resource between Service Consumer and Service provider by allowing the Consumer to refer to the Resource with its own identifier, obviating the need to store a local mapping between the local identifier of the Resource and the identifier used by the Service Provider. Each Resource MAY include a non-empty externalId value. The value of the externalId attribute is always issued be the Service Consumer and can never be specified by the Service Provider. The Service Provider MUST always interpret the externalId as scoped to the Service Consumer's tenant.
SCIM++ Properties: - caseExact: false - idcsSearchable: true - multiValued: false - mutability: readWrite - required: false - returned: default - type: string - uniqueness: none
180 181 182 |
# File 'lib/oci/identity_domains/models/policy.rb', line 180 def external_id @external_id end |
#id ⇒ String
Unique identifier for the SCIM Resource as defined by the Service Provider. Each representation of the Resource MUST include a non-empty id value. This identifier MUST be unique across the Service Provider's entire set of Resources. It MUST be a stable, non-reassignable identifier that does not change when the same Resource is returned in subsequent requests. The value of the id attribute is always issued by the Service Provider and MUST never be specified by the Service Consumer. bulkId: is a reserved keyword and MUST NOT be used in the unique identifier.
SCIM++ Properties: - caseExact: false - idcsSearchable: true - multiValued: false - mutability: readOnly - required: false - returned: always - type: string - uniqueness: global
31 32 33 |
# File 'lib/oci/identity_domains/models/policy.rb', line 31 def id @id end |
#idcs_created_by ⇒ OCI::IdentityDomains::Models::IdcsCreatedBy
65 66 67 |
# File 'lib/oci/identity_domains/models/policy.rb', line 65 def idcs_created_by @idcs_created_by end |
#idcs_last_modified_by ⇒ OCI::IdentityDomains::Models::IdcsLastModifiedBy
68 69 70 |
# File 'lib/oci/identity_domains/models/policy.rb', line 68 def idcs_last_modified_by @idcs_last_modified_by end |
#idcs_last_upgraded_in_release ⇒ String
The release number when the resource was upgraded.
SCIM++ Properties: - caseExact: false - idcsSearchable: false - multiValued: false - mutability: readOnly - required: false - returned: request - type: string - uniqueness: none
124 125 126 |
# File 'lib/oci/identity_domains/models/policy.rb', line 124 def idcs_last_upgraded_in_release @idcs_last_upgraded_in_release end |
#idcs_prevented_operations ⇒ Array<String>
Each value of this attribute specifies an operation that only an internal client may perform on this particular resource.
SCIM++ Properties: - idcsSearchable: false - multiValued: true - mutability: readOnly - required: false - returned: request - type: string - uniqueness: none
81 82 83 |
# File 'lib/oci/identity_domains/models/policy.rb', line 81 def idcs_prevented_operations @idcs_prevented_operations end |
#meta ⇒ OCI::IdentityDomains::Models::Meta
62 63 64 |
# File 'lib/oci/identity_domains/models/policy.rb', line 62 def @meta end |
#name ⇒ String
[Required] Policy name
SCIM++ Properties: - caseExact: false - idcsSearchable: true - multiValued: false - mutability: readWrite - required: true - returned: always - type: string - uniqueness: none
194 195 196 |
# File 'lib/oci/identity_domains/models/policy.rb', line 194 def name @name end |
#ocid ⇒ String
Unique OCI identifier for the SCIM Resource.
SCIM++ Properties: - caseExact: true - idcsSearchable: true - multiValued: false - mutability: immutable - required: false - returned: default - type: string - uniqueness: global
45 46 47 |
# File 'lib/oci/identity_domains/models/policy.rb', line 45 def ocid @ocid end |
#policy_groovy ⇒ String
The Groovy script that is run instead of the policy, if the policy type allows the policy to be a Groovy script.
SCIM++ Properties: - idcsSearchable: false - multiValued: false - mutability: readWrite - required: false - returned: default - type: string - uniqueness: none
234 235 236 |
# File 'lib/oci/identity_domains/models/policy.rb', line 234 def policy_groovy @policy_groovy end |
#policy_type ⇒ OCI::IdentityDomains::Models::PolicyPolicyType
This attribute is required.
252 253 254 |
# File 'lib/oci/identity_domains/models/policy.rb', line 252 def policy_type @policy_type end |
#rules ⇒ Array<OCI::IdentityDomains::Models::PolicyRules>
Rules assigned to this policy
SCIM++ Properties: - idcsCompositeKey: [value] - idcsSearchable: true - multiValued: true - mutability: readWrite - required: false - returned: request - type: complex - uniqueness: none
248 249 250 |
# File 'lib/oci/identity_domains/models/policy.rb', line 248 def rules @rules end |
#schemas ⇒ Array<String>
[Required] REQUIRED. The schemas attribute is an array of Strings which allows introspection of the supported schema version for a SCIM representation as well any schema extensions supported by that representation. Each String value must be a unique URI. This specification defines URIs for User, Group, and a standard \“enterprise\” extension. All representations of SCIM schema MUST include a non-zero value array with value(s) of the URIs supported by that representation. Duplicate values MUST NOT be included. Value order is not specified and MUST not impact behavior.
SCIM++ Properties: - caseExact: false - idcsSearchable: false - multiValued: true - mutability: readWrite - required: true - returned: default - type: string - uniqueness: none
59 60 61 |
# File 'lib/oci/identity_domains/models/policy.rb', line 59 def schemas @schemas end |
#tags ⇒ Array<OCI::IdentityDomains::Models::Tags>
A list of tags on this resource.
SCIM++ Properties: - idcsCompositeKey: [key, value] - idcsCsvAttributeNameMappings: [[columnHeaderName:Tag Key, mapsTo:tags.key], [columnHeaderName:Tag Value, mapsTo:tags.value]] - idcsSearchable: true - multiValued: true - mutability: readWrite - required: false - returned: request - type: complex - uniqueness: none
96 97 98 |
# File 'lib/oci/identity_domains/models/policy.rb', line 96 def @tags end |
#tenancy_ocid ⇒ String
OCI Tenant Id (ocid) in which the resource lives.
SCIM++ Properties: - caseExact: false - idcsSearchable: false - multiValued: false - mutability: readOnly - required: false - returned: default - type: string - uniqueness: none
166 167 168 |
# File 'lib/oci/identity_domains/models/policy.rb', line 166 def tenancy_ocid @tenancy_ocid end |
#urn_ietf_params_scim_schemas_oracle_idcs_extension_ociconsolesignonpolicyconsent_policy ⇒ OCI::IdentityDomains::Models::PolicyExtensionOciconsolesignonpolicyconsentPolicy
255 256 257 |
# File 'lib/oci/identity_domains/models/policy.rb', line 255 def @urn_ietf_params_scim_schemas_oracle_idcs_extension_ociconsolesignonpolicyconsent_policy end |
Class Method Details
.attribute_map ⇒ Object
Attribute mapping from ruby-style variable name to JSON key.
258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 |
# File 'lib/oci/identity_domains/models/policy.rb', line 258 def self.attribute_map { # rubocop:disable Style/SymbolLiteral 'id': :'id', 'ocid': :'ocid', 'schemas': :'schemas', 'meta': :'meta', 'idcs_created_by': :'idcsCreatedBy', 'idcs_last_modified_by': :'idcsLastModifiedBy', 'idcs_prevented_operations': :'idcsPreventedOperations', 'tags': :'tags', 'delete_in_progress': :'deleteInProgress', 'idcs_last_upgraded_in_release': :'idcsLastUpgradedInRelease', 'domain_ocid': :'domainOcid', 'compartment_ocid': :'compartmentOcid', 'tenancy_ocid': :'tenancyOcid', 'external_id': :'externalId', 'name': :'name', 'description': :'description', 'active': :'active', 'policy_groovy': :'policyGroovy', 'rules': :'rules', 'policy_type': :'policyType', 'urn_ietf_params_scim_schemas_oracle_idcs_extension_ociconsolesignonpolicyconsent_policy': :'urn:ietf:params:scim:schemas:oracle:idcs:extension:ociconsolesignonpolicyconsent:Policy' # rubocop:enable Style/SymbolLiteral } end |
.swagger_types ⇒ Object
Attribute type mapping.
287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 |
# File 'lib/oci/identity_domains/models/policy.rb', line 287 def self.swagger_types { # rubocop:disable Style/SymbolLiteral 'id': :'String', 'ocid': :'String', 'schemas': :'Array<String>', 'meta': :'OCI::IdentityDomains::Models::Meta', 'idcs_created_by': :'OCI::IdentityDomains::Models::IdcsCreatedBy', 'idcs_last_modified_by': :'OCI::IdentityDomains::Models::IdcsLastModifiedBy', 'idcs_prevented_operations': :'Array<String>', 'tags': :'Array<OCI::IdentityDomains::Models::Tags>', 'delete_in_progress': :'BOOLEAN', 'idcs_last_upgraded_in_release': :'String', 'domain_ocid': :'String', 'compartment_ocid': :'String', 'tenancy_ocid': :'String', 'external_id': :'String', 'name': :'String', 'description': :'String', 'active': :'BOOLEAN', 'policy_groovy': :'String', 'rules': :'Array<OCI::IdentityDomains::Models::PolicyRules>', 'policy_type': :'OCI::IdentityDomains::Models::PolicyPolicyType', 'urn_ietf_params_scim_schemas_oracle_idcs_extension_ociconsolesignonpolicyconsent_policy': :'OCI::IdentityDomains::Models::PolicyExtensionOciconsolesignonpolicyconsentPolicy' # rubocop:enable Style/SymbolLiteral } end |
Instance Method Details
#==(other) ⇒ Object
Checks equality by comparing each attribute.
466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 |
# File 'lib/oci/identity_domains/models/policy.rb', line 466 def ==(other) return true if equal?(other) self.class == other.class && id == other.id && ocid == other.ocid && schemas == other.schemas && == other. && idcs_created_by == other.idcs_created_by && idcs_last_modified_by == other.idcs_last_modified_by && idcs_prevented_operations == other.idcs_prevented_operations && == other. && delete_in_progress == other.delete_in_progress && idcs_last_upgraded_in_release == other.idcs_last_upgraded_in_release && domain_ocid == other.domain_ocid && compartment_ocid == other.compartment_ocid && tenancy_ocid == other.tenancy_ocid && external_id == other.external_id && name == other.name && description == other.description && active == other.active && policy_groovy == other.policy_groovy && rules == other.rules && policy_type == other.policy_type && == other. end |
#build_from_hash(attributes) ⇒ Object
Builds the object from hash
516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 |
# File 'lib/oci/identity_domains/models/policy.rb', line 516 def build_from_hash(attributes) return nil unless attributes.is_a?(Hash) self.class.swagger_types.each_pair do |key, type| if type =~ /^Array<(.*)>/i # check to ensure the input is an array given that the the attribute # is documented as an array but the input is not if attributes[self.class.attribute_map[key]].is_a?(Array) public_method("#{key}=").call( attributes[self.class.attribute_map[key]] .map { |v| OCI::Internal::Util.convert_to_type(Regexp.last_match(1), v) } ) end elsif !attributes[self.class.attribute_map[key]].nil? public_method("#{key}=").call( OCI::Internal::Util.convert_to_type(type, attributes[self.class.attribute_map[key]]) ) end # or else data not found in attributes(hash), not an issue as the data can be optional end self end |
#eql?(other) ⇒ Boolean
496 497 498 |
# File 'lib/oci/identity_domains/models/policy.rb', line 496 def eql?(other) self == other end |
#hash ⇒ Fixnum
Calculates hash code according to all attributes.
505 506 507 |
# File 'lib/oci/identity_domains/models/policy.rb', line 505 def hash [id, ocid, schemas, , idcs_created_by, idcs_last_modified_by, idcs_prevented_operations, , delete_in_progress, idcs_last_upgraded_in_release, domain_ocid, compartment_ocid, tenancy_ocid, external_id, name, description, active, policy_groovy, rules, policy_type, ].hash end |
#to_hash ⇒ Hash
Returns the object in the form of hash
549 550 551 552 553 554 555 556 557 558 |
# File 'lib/oci/identity_domains/models/policy.rb', line 549 def to_hash hash = {} self.class.attribute_map.each_pair do |attr, param| value = public_method(attr).call next if value.nil? && !instance_variable_defined?("@#{attr}") hash[param] = _to_hash(value) end hash end |
#to_s ⇒ String
Returns the string representation of the object
543 544 545 |
# File 'lib/oci/identity_domains/models/policy.rb', line 543 def to_s to_hash.to_s end |