Sha256: 79f018a06890b25c20da63b9b75477c93b8bc9b4901a6f0fe3c5da17dc58ce0f

Contents?: true

Size: 1022 Bytes

Versions: 5

Compression:

Stored size: 1022 Bytes

Contents

module InertiaRails
  mattr_accessor(:shared_plain_data) { Hash.new }
  mattr_accessor(: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)
    shared_plain_data.merge!(args)
  end

  def self.share_block(block)
    shared_blocks.push(block)
  end

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

  private

  module Configuration
    mattr_accessor(:layout) { 'application' }
    mattr_accessor(:version) { nil }

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

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

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
inertia_rails-1.3.1 lib/inertia_rails/inertia_rails.rb
inertia_rails-1.3.0 lib/inertia_rails/inertia_rails.rb
inertia_rails-1.2.2 lib/inertia_rails/inertia_rails.rb
inertia_rails-1.2.1 lib/inertia_rails/inertia_rails.rb
inertia_rails-1.2.0 lib/inertia_rails/inertia_rails.rb