Sha256: 0a7ce57e7b3cad402b55c56443b8dec441f08119afd18f610a5b5f47f54f47d3

Contents?: true

Size: 835 Bytes

Versions: 13

Compression:

Stored size: 835 Bytes

Contents

# frozen_string_literal: true

class StimulusReflex::Element < OpenStruct
  attr_reader :attributes, :data_attributes

  def initialize(data = {})
    @attributes = HashWithIndifferentAccess.new(data["attrs"] || {})
    @data_attributes = HashWithIndifferentAccess.new(data["dataset"] || {})
    all_attributes = @attributes.merge(@data_attributes)
    super all_attributes.merge(all_attributes.transform_keys(&:underscore))
    @data_attributes.transform_keys! { |key| key.delete_prefix "data-" }
  end

  def signed
    @signed ||= ->(accessor) { GlobalID::Locator.locate_signed(dataset[accessor]) }
  end

  def unsigned
    @unsigned ||= ->(accessor) { GlobalID::Locator.locate(dataset[accessor]) }
  end

  def dataset
    @dataset ||= OpenStruct.new(data_attributes.merge(data_attributes.transform_keys(&:underscore)))
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
stimulus_reflex-3.4.2 lib/stimulus_reflex/element.rb
stimulus_reflex-3.4.1 lib/stimulus_reflex/element.rb
stimulus_reflex-3.4.0 lib/stimulus_reflex/element.rb
stimulus_reflex-3.4.0.pre9 lib/stimulus_reflex/element.rb
stimulus_reflex-3.4.0.pre8 lib/stimulus_reflex/element.rb
stimulus_reflex-3.4.0.pre7 lib/stimulus_reflex/element.rb
stimulus_reflex-3.4.0.pre6 lib/stimulus_reflex/element.rb
stimulus_reflex-3.4.0.pre5 lib/stimulus_reflex/element.rb
stimulus_reflex-3.4.0.pre4 lib/stimulus_reflex/element.rb
stimulus_reflex-3.4.0.pre3 lib/stimulus_reflex/element.rb
stimulus_reflex-3.4.0.pre2 lib/stimulus_reflex/element.rb
stimulus_reflex-3.4.0.pre1 lib/stimulus_reflex/element.rb
stimulus_reflex-3.4.0.pre0 lib/stimulus_reflex/element.rb