Class: Ecoportal::API::GraphQL::Base::Page::DataField
- Inherits:
-
Logic::BaseModel
- Object
- Common::Content::DoubleModel
- Common::GraphQL::Model
- Logic::BaseModel
- Ecoportal::API::GraphQL::Base::Page::DataField
- Defined in:
- lib/ecoportal/api/graphql/base/page/data_field.rb,
lib/ecoportal/api/graphql/base/page/data_field/geo.rb,
lib/ecoportal/api/graphql/base/page/data_field/law.rb,
lib/ecoportal/api/graphql/base/page/data_field/gauge.rb,
lib/ecoportal/api/graphql/base/page/data_field/table.rb,
lib/ecoportal/api/graphql/base/page/data_field/number.rb,
lib/ecoportal/api/graphql/base/page/data_field/people.rb,
lib/ecoportal/api/graphql/base/page/data_field/select.rb,
lib/ecoportal/api/graphql/base/page/data_field/mailbox.rb,
lib/ecoportal/api/graphql/base/page/data_field/checklist.rb,
lib/ecoportal/api/graphql/base/page/data_field/rich_text.rb,
lib/ecoportal/api/graphql/base/page/data_field/signature.rb,
lib/ecoportal/api/graphql/base/page/data_field/tag_field.rb,
lib/ecoportal/api/graphql/base/page/data_field/ai_summary.rb,
lib/ecoportal/api/graphql/base/page/data_field/collection.rb,
lib/ecoportal/api/graphql/base/page/data_field/date_field.rb,
lib/ecoportal/api/graphql/base/page/data_field/file_field.rb,
lib/ecoportal/api/graphql/base/page/data_field/plain_text.rb,
lib/ecoportal/api/graphql/base/page/data_field/smart_fill.rb,
lib/ecoportal/api/graphql/base/page/data_field/actions_list.rb,
lib/ecoportal/api/graphql/base/page/data_field/image_gallery.rb,
lib/ecoportal/api/graphql/base/page/data_field/cross_reference.rb,
lib/ecoportal/api/graphql/base/page/data_field/contractor_entities.rb
Overview
Base class for all data field types. Subclasses expose typed value accessors and serialise to DataFieldInput format.
Direct Known Subclasses
Defined Under Namespace
Classes: ActionsList, AiSummary, Checklist, Collection, ContractorEntities, CrossReference, DateField, FileField, Gauge, Geo, ImageGallery, Law, LeafDiffService, Mailbox, Number, People, PlainText, RichText, Select, Signature, SmartFill, Table, TagField
Constant Summary collapse
- DIFF_CLASS =
LeafDiffService- TYPE_MAP =
Map GraphQL __typename values to subclass names.
{ 'PlainText' => 'PlainText', 'RichText' => 'RichText', 'Date' => 'DateField', 'Number' => 'Number', 'Gauge' => 'Gauge', 'People' => 'People', 'Select' => 'Select', 'Checklist' => 'Checklist', 'TagField' => 'TagField', 'Geo' => 'Geo', 'Signature' => 'Signature', 'ContractorEntities' => 'ContractorEntities', 'CrossReference' => 'CrossReference', 'ImageGallery' => 'ImageGallery', 'File' => 'FileField', 'Mailbox' => 'Mailbox', 'ActionsList' => 'ActionsList', 'Law' => 'Law', 'AiSummary' => 'AiSummary', 'Table' => 'Table', 'SmartFill' => 'SmartFill' }.freeze
Class Method Summary collapse
-
.from_doc(raw_doc) ⇒ Object
Build the correct subclass from a raw field doc.
Instance Method Summary collapse
-
#as_input ⇒ Object
Produces the DataFieldInput hash for this field.
-
#dirty? ⇒ Boolean
DataField is a leaf model: it has no nested GraphQL::Model children.
-
#initialize(raw_doc = {}) ⇒ DataField
constructor
A new instance of DataField.
Methods included from Concerns::SnakeCamelAccess
#method_missing, #respond_to_missing?
Methods included from Common::GraphQL::Model::Diffable
Constructor Details
#initialize(raw_doc = {}) ⇒ DataField
Returns a new instance of DataField.
73 74 75 76 77 78 |
# File 'lib/ecoportal/api/graphql/base/page/data_field.rb', line 73 def initialize(raw_doc = {}) # Normalise __typename → type for passthrough accessor raw_doc = raw_doc.dup if raw_doc.is_a?(Hash) raw_doc['type'] ||= raw_doc['__typename'] if raw_doc.is_a?(Hash) super end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Ecoportal::API::GraphQL::Concerns::SnakeCamelAccess
Class Method Details
.from_doc(raw_doc) ⇒ Object
Build the correct subclass from a raw field doc.
63 64 65 66 67 68 69 70 |
# File 'lib/ecoportal/api/graphql/base/page/data_field.rb', line 63 def from_doc(raw_doc) type = raw_doc.is_a?(Hash) ? (raw_doc['__typename'] || raw_doc['type']) : nil subname = TYPE_MAP[type] klass = subname ? const_get(subname) : self klass.new(raw_doc) rescue NameError new(raw_doc) end |
Instance Method Details
#as_input ⇒ Object
Produces the DataFieldInput hash for this field. Returns nil if the field has not been modified. Subclasses override to produce typed payloads.
91 92 93 |
# File 'lib/ecoportal/api/graphql/base/page/data_field.rb', line 91 def as_input nil end |
#dirty? ⇒ Boolean
DataField is a leaf model: it has no nested GraphQL::Model children. flat: true skips diff_reduce — required here, since diff_reduce would dig_delete! the (cascaded) array keys and never re-add them. The flat classic diff still sees those keys because LeafDiffService keeps them.
84 85 86 |
# File 'lib/ecoportal/api/graphql/base/page/data_field.rb', line 84 def dirty? super(flat: true) end |