Class: Spree::Admin::Engine::TablesEnvironment

Inherits:
Object
  • Object
show all
Defined in:
lib/spree/admin/engine.rb

Instance Method Summary collapse

Constructor Details

#initializeTablesEnvironment

Returns a new instance of TablesEnvironment.



188
189
190
# File 'lib/spree/admin/engine.rb', line 188

def initialize
  @registries = {}
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args) ⇒ Object

Define accessor methods for registered tables



246
247
248
249
250
251
252
# File 'lib/spree/admin/engine.rb', line 246

def method_missing(method_name, *args)
  if method_name.to_s.end_with?('=')
    super
  else
    get(method_name)
  end
end

Instance Method Details

#get(name) ⇒ Spree::Admin::Table

Get a registered table

Parameters:

  • name (Symbol)

    The name of the table

Returns:

Raises:

  • (NoMethodError)

    if the table hasn’t been registered



227
228
229
230
# File 'lib/spree/admin/engine.rb', line 227

def get(name)
  name = name.to_sym
  @registries[name] || raise(NoMethodError, "Table '#{name}' has not been registered. Use Spree.admin.tables.register(:#{name}) first.")
end

#register(name, model_class: nil, search_param: :name_cont, search_placeholder: nil, row_actions: false, row_actions_edit: true, row_actions_delete: false, new_resource: true, date_range_param: nil, date_range_label: nil, link_to_action: :edit) ⇒ Spree::Admin::Table

Register a new table

Parameters:

  • name (Symbol)

    The name of the table (e.g., :products, :orders)

  • model_class (Class, nil) (defaults to: nil)

    The model class for this table

  • search_param (Symbol) (defaults to: :name_cont)

    The ransack parameter for text search (default: :name_cont)

  • search_placeholder (String, nil) (defaults to: nil)

    Custom placeholder for search field

  • row_actions (Boolean) (defaults to: false)

    Whether to show row actions (default: false)

  • row_actions_edit (Boolean) (defaults to: true)

    Whether to show edit button in row actions (default: true)

  • row_actions_delete (Boolean) (defaults to: false)

    Whether to show delete button in row actions (default: false)

  • new_resource (Boolean) (defaults to: true)

    Whether to show “Create new” button in empty state (default: true)

  • date_range_param (Symbol, nil) (defaults to: nil)

    Ransack parameter base for date range filter (e.g., :completed_at)

  • date_range_label (String, nil) (defaults to: nil)

    Label for date range filter

  • link_to_action (Symbol) (defaults to: :edit)

    Action to link to for :link columns (:edit or :show, default: :edit)

Returns:



205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
# File 'lib/spree/admin/engine.rb', line 205

def register(name, model_class: nil, search_param: :name_cont, search_placeholder: nil, row_actions: false, row_actions_edit: true, row_actions_delete: false, new_resource: true, date_range_param: nil, date_range_label: nil, link_to_action: :edit)
  name = name.to_sym
  @registries[name] ||= Spree::Admin::Table.new(
    name,
    key: name,
    model_class: model_class,
    search_param: search_param,
    search_placeholder: search_placeholder,
    row_actions: row_actions,
    row_actions_edit: row_actions_edit,
    row_actions_delete: row_actions_delete,
    new_resource: new_resource,
    date_range_param: date_range_param,
    date_range_label: date_range_label,
    link_to_action: link_to_action
  )
end

#registered?(name) ⇒ Boolean

Check if a table is registered

Parameters:

  • name (Symbol)

    The table name

Returns:

  • (Boolean)


235
236
237
# File 'lib/spree/admin/engine.rb', line 235

def registered?(name)
  @registries.key?(name.to_sym)
end

#registriesArray<Symbol>

List all registered tables

Returns:

  • (Array<Symbol>)


241
242
243
# File 'lib/spree/admin/engine.rb', line 241

def registries
  @registries.keys
end

#respond_to_missing?(method_name, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


254
255
256
# File 'lib/spree/admin/engine.rb', line 254

def respond_to_missing?(method_name, include_private = false)
  method_name.to_s.end_with?('=') ? false : registered?(method_name)
end