Вызов действий Fastlane из модуля ruby

#ruby #fastlane

#ruby #fastlane

Вопрос:

Я пытаюсь создать модуль ruby с некоторыми вспомогательными функциями, которые я использую в Fastfile. Это выглядит следующим образом:

 lane :a do |options|
  Utils.foo
end

module Utils
  def self.foo
    get_info_plist_value(...)
  end
end
  

Когда я пытаюсь запустить полосу, я получаю эту ошибку: undefined method 'get_info_plist_value' for Utils:Module .

Я попробовал следующие способы решения этой проблемы:

  • добавление extend Utils после определения модуля
  • включая Fastlane или Fastlane::Actions в модуль

Мне это не помогло.

Есть ли какие-либо другие способы решения проблемы?

Комментарии:

1. это драгоценный камень? Существует небольшая путаница между именами, где-то вы написали fastlane и где fastfile -то. Не могли бы вы подтвердить?

2. @zhisme, да, Fastlane — это жемчужина. Fastfile — это файл, в котором вы пишете код с использованием Fastlane (как в моем примере). Это документация по Fastlane — docs.fastlane.tools/начало работы / ios .

Ответ №1:

Я получил такую утилиту для работы с использованием внедрения зависимостей:

 lane :a do |options|
  Utils.call(self)
end

module Utils
  def initialize(lane)
     @lane = lane
  end

  def self.call(lane)
     new.execute(lane)
  end

  def execute
     @lane.get_info_plist_value(...)
  end
end
  

Если вы посмотрите на анатомию объявленного «lane» ( :a например), каждое действие (например, get_info_plist_value ) выполняется в блоке Fastlane::Lane, экземпляр которого был создан Fastfile.

Хотя это возможно, написание утилит, вызывающих действия Fastlane, следует использовать экономно. Это кажется довольно выходящим за рамки предполагаемого использования Fastlane. Я думаю, что «правильный» способ приблизиться к чему-то подобному — это на самом деле написать пользовательское действие (немного более подробное, но, вероятно, более удобный вариант).

Как говорится, «Не сражайтесь с фреймворком!»