Module: ExpoTurbo::Rails::DomIds
- Defined in:
- lib/expo_turbo/rails/dom_ids.rb,
lib/expo_turbo/rails/dom_ids/helper.rb
Defined Under Namespace
Modules: Helper
Constant Summary collapse
- ROLE_PREFIXES =
{ record: nil, document: :document, frame: :frame, list: :list, form: :form, error: :error, loading: :loading }.freeze
Class Method Summary collapse
Class Method Details
.id_for(record_or_class, role = :record) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/expo_turbo/rails/dom_ids.rb', line 20 def id_for(record_or_class, role = :record) prefix = ROLE_PREFIXES.fetch(role) do raise ArgumentError, "unsupported Expo Turbo target role: #{role.inspect}" end if record_or_class.is_a?(Class) raise ArgumentError, "only list targets may be derived from a model class" unless role == :list raise ArgumentError, "Expo Turbo list targets require a model class" unless record_or_class.respond_to?(:model_name) return validate!(ActionView::RecordIdentifier.dom_id(record_or_class, prefix)) end model = record_or_class.respond_to?(:to_model) ? record_or_class.to_model : record_or_class unless model&.respond_to?(:to_key) && model.respond_to?(:persisted?) && model.persisted? raise ArgumentError, "Expo Turbo #{role} targets require a persisted model" end raise ArgumentError, "Expo Turbo #{role} targets require a persisted model" unless complete_key?(model.to_key) raise ArgumentError, "Expo Turbo #{role} targets require a model name" unless model.respond_to?(:model_name) validate!(ActionView::RecordIdentifier.dom_id(model, prefix)) end |