Module: Panda::Core::HasMetadata
- Extended by:
- ActiveSupport::Concern
- Included in:
- User
- Defined in:
- app/models/concerns/panda/core/has_metadata.rb
Overview
Concern for models with a JSONB metadata column.
Provides a DSL to declare typed metadata fields that auto-generate scopes, predicates, and virtual attribute setters.
class User < ApplicationRecord
include HasMetadata
:internal, type: :boolean, filterable: true,
label: "Visibility", default_scope: :external,
filter_options: [["All Users", ""], ["Staff Users", "internal"], ["External Users", "external"]]
end
User.internal # => scope
User.external # => scope
user.internal? # => true/false
user.mark_as_internal! # => saves
user.mark_as_external! # => saves
user.internal = "1" # => virtual setter for forms
Instance Method Summary collapse
-
#metadata_value(key) ⇒ Object
-- Instance methods for generic metadata access --.
- #remove_metadata(key) ⇒ Object
- #set_metadata(key, value) ⇒ Object
- #set_metadata_attribute(key, value) ⇒ Object
Instance Method Details
#metadata_value(key) ⇒ Object
-- Instance methods for generic metadata access --
145 146 147 |
# File 'app/models/concerns/panda/core/has_metadata.rb', line 145 def (key) (self[:metadata] || {})[key.to_s] end |
#remove_metadata(key) ⇒ Object
158 159 160 161 |
# File 'app/models/concerns/panda/core/has_metadata.rb', line 158 def (key) self. = (self[:metadata] || {}).except(key.to_s) save! end |
#set_metadata(key, value) ⇒ Object
149 150 151 152 |
# File 'app/models/concerns/panda/core/has_metadata.rb', line 149 def (key, value) self. = (self[:metadata] || {}).merge(key.to_s => value) save! end |
#set_metadata_attribute(key, value) ⇒ Object
154 155 156 |
# File 'app/models/concerns/panda/core/has_metadata.rb', line 154 def (key, value) self. = (self[:metadata] || {}).merge(key.to_s => value) end |