Sha256: 1b65972c466f42792c52747f87e07d77d83247022f3faa3dc45ae1200b596d56

Contents?: true

Size: 1.78 KB

Versions: 2

Compression:

Stored size: 1.78 KB

Contents

require "lasha/engine"

module Lasha
  @index_actions = %i[new show edit destroy]

  def self.index_data(
    controller:,
    namespace: nil,
    model:     nil,
    actions:   nil,
    collection:,
    attributes:
  )
    index_data_hash = {
      namespace: set_or_guess_namespace(namespace, controller),
      model: set_or_guess_model(model, collection),
      collection: collection,
      attributes: attributes,
      actions: set_or_guess_actions(actions, controller)
    }
    raise ArgumentError if index_data_invalid?(**index_data_hash)

    index_data_hash
  rescue ArgumentError => e
    puts "***** index_data argument error report"
    puts "#{e} #{e.message}"
    puts e.backtrace
  end

  private

    def self.set_or_guess_namespace(namespace, controller)
      if namespace.present?
        namespace
      elsif controller.class.name.include?("::")
        controller.class.name.deconstantize.underscore.to_sym
      end
    end

    def self.set_or_guess_model(model, collection)
      model.present? ? model : collection.first.class
    end

    def self.set_or_guess_actions(actions, controller)
      if actions.present?
        actions
      else
        controller.action_methods.to_a.map(&:to_sym) & @index_actions
      end
    end

    def self.index_data_invalid?(**index_data_hash)
      truthy_array = []
      index_data_hash.each do |key, value|
        case key
        when :model
          truthy_array << (value.blank? || index_data_hash[:collection].blank?)
        when :actions
          truthy_array << (value - @index_actions).any?
        # when :namespace
        #   truthy_array << false
        # when :collection
        #   truthy_array << false
        # when :attributes
        #   truthy_array << false
        end
      end
      truthy_array.include?(true)
    end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
lasha-0.2.6 lib/lasha.rb
lasha-0.2.5 lib/lasha.rb