Sha256: 8283dce1796742e9305f1d285e09625032d7351e434af9e32cfac7f8a8a9cd7f

Contents?: true

Size: 1.73 KB

Versions: 1

Compression:

Stored size: 1.73 KB

Contents

module InertiaRails
  thread_mattr_accessor :threadsafe_shared_plain_data
  thread_mattr_accessor :threadsafe_shared_blocks

  def self.configure
    yield(Configuration)
  end

  # "Getters"
  def self.shared_data(controller)
    shared_plain_data.merge!(evaluated_blocks(controller, shared_blocks))
  end

  def self.version
    Configuration.evaluated_version
  end

  def self.layout
    Configuration.layout
  end

  # "Setters"
  def self.share(**args)
    self.shared_plain_data = self.shared_plain_data.merge(args)
  end

  def self.share_block(block)
    self.shared_blocks = self.shared_blocks + [block]
  end

  def self.reset!
    self.shared_plain_data = {}
    self.shared_blocks = []
  end

  private

  module Configuration
    thread_mattr_accessor :threadsafe_layout
    thread_mattr_accessor :threadsafe_version

    def self.evaluated_version
      self.version.respond_to?(:call) ? self.version.call : self.version
    end

    def self.layout
      self.threadsafe_layout || 'application'
    end

    def self.layout=(val)
      self.threadsafe_layout = val
    end

    def self.version
      self.threadsafe_version
    end

    def self.version=(val)
      self.threadsafe_version = val
    end
  end

  # Getters and setters to provide default values for the threadsafe attributes
  def self.shared_plain_data
    self.threadsafe_shared_plain_data || {}
  end

  def self.shared_plain_data=(val)
    self.threadsafe_shared_plain_data = val
  end

  def self.shared_blocks
    self.threadsafe_shared_blocks || []
  end

  def self.shared_blocks=(val)
    self.threadsafe_shared_blocks = val
  end

  def self.evaluated_blocks(controller,  blocks)
    blocks.flat_map { |block| controller.instance_exec(&block) }.reduce(&:merge) || {}
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
inertia_rails-1.4.0 lib/inertia_rails/inertia_rails.rb