Sha256: 45aaeece598dd222f6f097b6c3a8b568aadc441b174efb354dc73e78a6e17827

Contents?: true

Size: 1.92 KB

Versions: 1

Compression:

Stored size: 1.92 KB

Contents

# frozen_string_literal: true

module Tramway::RecordsModels
  def set_available_models(models, project:, role: :admin)
    initialize_available_models_for project, role

    Tramway::Error.raise_error :records, :wrong_available_models_type if !models.is_a?(Array) && !models.is_a?(Hash)

    handle_array_of_models(models, project:, role:) if models.is_a? Array

    @available_models[project][role].merge! models if models.is_a? Hash
    @available_models = @available_models.with_indifferent_access
  end

  def available_models_for(project, role: :admin)
    project = project.underscore.to_sym unless project.is_a? Symbol
    models = get_models_by_key(@available_models, project, role)
    models = available_models_for_engine(project, role, models) if project_is_engine?(project)

    models.map do |model|
      model.instance_of?(String) ? model.constantize : model
    end
  end

  def available_models(role:)
    models_array models_type: :available, role:
  end

  def clear_available_models!
    @available_models = {}
  end

  private

  def handle_array_of_models(models, project:, role:)
    models.each do |model|
      if model.instance_of?(Class) || model.instance_of?(String)
        @available_models[project][role].merge! model.to_s => %i[index show update create destroy]
      elsif model.instance_of?(Hash)
        @available_models[project][role].merge! model
      end
    end
  end

  def initialize_available_models_for(project, role)
    @available_models ||= {}
    @available_models[project] ||= {}
    @available_models[project][role] ||= {}
  end

  def available_models_for_engine(project, role, models)
    models + engine_class(project).dependencies.map do |dependency|
      if @available_models&.dig(dependency, role).present?
        @available_models&.dig(dependency, role)&.keys
      else
        Tramway::Error.raise_error(:records, :there_is_no_dependency, dependency:, project:)
      end
    end.flatten.compact
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tramway-0.1.2 lib/tramway/records_models.rb