Class: Ecoportal::API::GraphQL::Base::Page::DataField

Inherits:
Logic::BaseModel show all
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

Model::Page::DataField

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

Instance Method Summary collapse

Methods included from Concerns::SnakeCamelAccess

#method_missing, #respond_to_missing?

Methods included from Common::GraphQL::Model::Diffable

#as_update

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_inputObject

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.

Returns:

  • (Boolean)


84
85
86
# File 'lib/ecoportal/api/graphql/base/page/data_field.rb', line 84

def dirty?
  super(flat: true)
end