Это мой код -
Здесь я пытаюсь получить все константы, к которым присоединена строка feature_toggle, путем поиска во всех файлах с помощью регулярного выражения, которое было клонировано из git и сохранено. локально, например,
feature_enabled?(TEST_ONE)
feature_enabled?(TEST_TWO)
feature_enabled?(TEST_THREE)
feature_enabled?(TEST_FOUR)
feature_enabled?(KEY_AS_PRIMARY)
Из этого я получу следующие значения в match_found
["TEST_ONE", "TEST_TWO", "TEST_THREE","TEST_FOUR","KEY_AS_PRIMARY"]
Это метод, в котором я пытаюсь добиться этого.
# public: retrieve the constant feature names based on the asset passed
#
# filename - path of each file under a repository for running the scan for example - /Users/sagarPC/Desktop/project/tmp/icdev/somefolder/app/models/project_one/orion/add_me_task.rb
# pattern - regex pattern which search for the names.Ex- /(?:\.|!)?feature_enabled\?\((.*?)\)/m
#
# Ex - feature_enabled?(TEST_ONE)
#
# returns each constant's value in an array
# Ex - [testone,testtwo,testthree,testfour]
def self.constant_discovery(file_name, pattern)
matches = File.open(file_name).read.scan(pattern).uniq.flatten.compact
matches_found = matches.map {|key| key.split(',')[0].scan(/^[A-Z]+(?:_[A-Z]+)*$/)}.flatten
search_pattern = /([A-Z]+_)*[A-Z]+ = '.+'/
File.open(file_name) do |f|
lines = f.find_all {|line| line =~ search_pattern }
lines.each do |line|
if line.include?('=')
print line unless line.empty?
required_output = matches_found & line
end
line
end
end
matches
end
По приведенному выше коду я получаю совпадений_нашитых значений, как показано ниже,
["TEST_ONE", "TEST_TWO", "TEST_THREE","TEST_FOUR","KEY_AS_PRIMARY"]
Где как, строка выводит примерно так:
TEST_ONE = 'testone'
TEST_TWO = 'testtwo'
TEST_THREE = 'testthree'
TEST_FOUR = 'testfour'
Эти константы могут быть объявлены где-то в клонированном репозитории и могут использоваться где-то еще. В require_output мне нужно получить значения общих констант между match_found и line , из этих общих констант вернуть только те, которые объявлены где-то и имеют значения, назначенные для Это. Значение константы может быть объявлено где угодно в клонированном репо.
Когда я пытался это сделать, я сталкивался с проблемой при сравнении match_found и line с ошибкой сообщение «не удалось с ошибкой, неявное преобразование строки в массив»
Под этим я понял, что должен преобразовать значения line в массив. И затем следует сравнить его с match_found , после этого я получу общую константу из обоих массивов в required_output . И позже я могу получить те значения, которые были назначены для этих общих констант. В конце концов, метод должен выдавать следующие возвращаемые значения:
[testone,testtwo,testthree,testfour]
Поскольку я очень плохо знаком с ruby, может кто-нибудь помочь мне с этим? Извините, что вставил весь мой метод. Пожалуйста, помогите мне решить эту проблему.