Sha256: 39cb98183afbb26b140336d6d94a4b8398cfb0c6ab067d6a6410769fdc5ba32a

Contents?: true

Size: 852 Bytes

Versions: 8

Compression:

Stored size: 852 Bytes

Contents

# frozen_string_literal: true

module CableReady
  module Identifiable
    def dom_id(record, prefix = nil)
      return record.to_dom_selector if record.respond_to?(:to_dom_selector)

      prefix = prefix.to_s.strip if prefix

      id = if record.respond_to?(:to_dom_id)
        record.to_dom_id
      elsif record.is_a?(ActiveRecord::Relation)
        [prefix, record.model_name.plural].compact.join("_")
      elsif record.is_a?(ActiveRecord::Base)
        ActionView::RecordIdentifier.dom_id(record, prefix)
      else
        [prefix, record.to_s.strip].compact.join("_")
      end

      "##{id}".squeeze("#").strip.downcase
    end

    def identifiable?(obj)
      obj.respond_to?(:to_dom_selector) ||
        obj.respond_to?(:to_dom_id) ||
        obj.is_a?(ActiveRecord::Relation) ||
        obj.is_a?(ActiveRecord::Base)
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
cable_ready-5.0.0.pre9 lib/cable_ready/identifiable.rb
cable_ready-5.0.0.pre8 lib/cable_ready/identifiable.rb
cable_ready-5.0.0.pre7 lib/cable_ready/identifiable.rb
cable_ready-5.0.0.pre6 lib/cable_ready/identifiable.rb
cable_ready-5.0.0.pre5 lib/cable_ready/identifiable.rb
cable_ready-5.0.0.pre4 lib/cable_ready/identifiable.rb
cable_ready-5.0.0.pre3 lib/cable_ready/identifiable.rb
cable_ready-5.0.0.pre2 lib/cable_ready/identifiable.rb