Class: Plutonium::Definition::Base Abstract

Inherits:
Object
  • Object
show all
Includes:
Actions, ConfigAttr, DefineableProps, IndexViews, InheritableConfigAttr, Metadata, NestedInputs, Scoping, Search, Sorting
Defined in:
lib/plutonium/definition/base.rb

Overview

This class is abstract.

Subclass and override #customize_fields, #customize_inputs, #customize_filters, #customize_scopes, and #customize_sorters to implement custom behavior.

Note:

This class is not thread-safe. Ensure proper synchronization if used in a multi-threaded environment.

Base class for Plutonium definitions

Examples:

class MyDefinition < Plutonium::Definition::Base
  field :name, as: :string
  input :email, as: :email
  filter :status, type: :select, collection: %w[active inactive]
  scope :active
  default_scope :active
  sorter :created_at

  def customize_fields
    field :custom_field, as: :integer
  end
end

Direct Known Subclasses

Resource::Definition

Defined Under Namespace

Classes: Display, EditPage, Form, Grid, IndexPage, InteractiveActionPage, NewPage, QueryForm, ShowPage, Table, TextFilter

Constant Summary collapse

VALID_MODAL_MODES =

modals — drive how :new / :edit and interactive actions render. Actions read these lazily at render time, so override order and subclass inheritance both work naturally.

[:centered, :slideover, false].freeze

Constants included from IndexViews

IndexViews::GRID_LAYOUTS, IndexViews::GRID_SLOTS, IndexViews::KNOWN_VIEWS

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Metadata

#defined_metadata_fields

Methods included from IndexViews

#default_index_view, #defined_grid_columns, #defined_grid_fields, #defined_grid_layout, #defined_index_views

Methods included from Search

#search_definition

Methods included from Scoping

#default_scope

Methods included from Sorting

#default_sort

Constructor Details

#initializeBase

Returns a new instance of Base.



118
119
120
# File 'lib/plutonium/definition/base.rb', line 118

def initialize
  super
end

Class Method Details

Sets ‘modal_mode` and `modal_size` together with validation.

  • :slideover (default) — slide-in panel from the right

  • :centered — centered dialog

  • false — no modal; new/edit are full standalone pages

‘size:` see Plutonium::UI::Modal::Base::VALID_SIZES. `:auto` hugs the form’s natural width.



106
107
108
109
110
111
112
113
114
115
116
# File 'lib/plutonium/definition/base.rb', line 106

def self.modal(mode, size: :md)
  unless VALID_MODAL_MODES.include?(mode)
    raise ArgumentError, "modal must be one of #{VALID_MODAL_MODES.inspect}, got #{mode.inspect}"
  end
  unless Plutonium::UI::Modal::Base::VALID_SIZES.include?(size)
    raise ArgumentError,
      "modal size must be one of #{Plutonium::UI::Modal::Base::VALID_SIZES.inspect}, got #{size.inspect}"
  end
  modal_mode mode
  modal_size size
end

Instance Method Details

#collection_classObject



146
147
148
# File 'lib/plutonium/definition/base.rb', line 146

def collection_class
  self.class::Table
end

#detail_classObject



154
155
156
# File 'lib/plutonium/definition/base.rb', line 154

def detail_class
  self.class::Display
end

#edit_page_classObject



134
135
136
# File 'lib/plutonium/definition/base.rb', line 134

def edit_page_class
  self.class::EditPage
end

#form_classObject



142
143
144
# File 'lib/plutonium/definition/base.rb', line 142

def form_class
  self.class::Form
end

#grid_classObject



150
151
152
# File 'lib/plutonium/definition/base.rb', line 150

def grid_class
  self.class::Grid
end

#index_page_classObject



122
123
124
# File 'lib/plutonium/definition/base.rb', line 122

def index_page_class
  self.class::IndexPage
end

#interactive_action_page_classObject



138
139
140
# File 'lib/plutonium/definition/base.rb', line 138

def interactive_action_page_class
  self.class::InteractiveActionPage
end

#new_page_classObject



126
127
128
# File 'lib/plutonium/definition/base.rb', line 126

def new_page_class
  self.class::NewPage
end

#query_formObject



158
159
160
# File 'lib/plutonium/definition/base.rb', line 158

def query_form
  self.class::QueryForm
end

#show_page_classObject



130
131
132
# File 'lib/plutonium/definition/base.rb', line 130

def show_page_class
  self.class::ShowPage
end