Ruby рефакторинг, не могу понять синтаксис правильно - PullRequest
0 голосов
/ 29 апреля 2020

Я довольно новичок в Ruby, и меня попросили помочь с программой. По какой-то причине для моей жизни я не могу понять мой синтаксис правильно. Если отношения с агентом не равны? Я использую && в своем коде, но он не выполняет то, что мне нужно, поэтому любая помощь будет принята с благодарностью!

if whitelisted['agent_relationships'].none? {|r| r['jsonmodel_type'] == 'series_system_agent_record_creation_by_agent_relationship'}
  whitelisted['agent_relationships'].unshift({
    'jsonmodel_type' => 'series_system_agent_record_creation_by_agent_relationship',
    'relationship_target_record_type' => 'agent_corporate_entity',
    'ref' => json.creating_agency[0]['ref'],
    'relator' => 'created_by',
    'start_date' => json.creating_agency[0]['start_date'],
  })
end

if whitelisted['agent_relationships'].none? {|r| r['jsonmodel_type'] == 'series_system_agent_record_ownership_relationship'}
  whitelisted['agent_relationships'].unshift({
    'jsonmodel_type' => 'series_system_agent_record_ownership_relationship',
    'relationship_target_record_type' => 'agent_corporate_entity',
    'ref' => json.responsible_agency['ref'],
    'relator' => 'is_controlled_by',
    'start_date' => json.responsible_agency['start_date'],
  })
end

    whitelisted['responsible_agency'] = json.responsible_agency
    whitelisted['creating_agency'] = json.creating_agency

Извините, только быстрое редактирование. Чтобы понять это .none? потому что я использую устаревшую версию Ruby для более старой программы. Не то, что я могу изменить, потому что это не мой выбор. Чтобы добавить я хочу рефакторинг этот код. Я знаю, это уже работает. Я уже попробовал несколько способов, и моя голова не может обернуться вокруг того, как это сделать. Например. Я пытался

if whitelisted['agent_relationships'].none? {|r| r['jsonmodel_type'] == 'series_system_agent_record_creation_by_agent_relationship' && 'series_system_agent_record_creation_by_agent_relationship'}
  whitelisted['agent_relationships'].unshift({
    'jsonmodel_type' => 'series_system_agent_record_creation_by_agent_relationship',
    'relationship_target_record_type' => 'agent_corporate_entity',
    'ref' => json.creating_agency[0]['ref'],
    'relator' => 'created_by',
    'start_date' => json.creating_agency[0]['start_date'],
  } && {
        'jsonmodel_type' => 'series_system_agent_record_creation_by_agent_relationship',
        'relationship_target_record_type' => 'agent_corporate_entity',
        'ref' => json.creating_agency[0]['ref'],
        'relator' => 'created_by',
        'start_date' => json.creating_agency[0]['start_date'],
      }
  )
end

whitelisted['responsible_agency'] = json.responsible_agency
whitelisted['creating_agency'] = json.creating_agency

Привет еще раз! Теперь я также попробовал другой метод, и я не сталкиваюсь ни с какими ошибками, однако что-то кажется неправильным, так как эта программа создает отношения из белого списка, которые могут быть переданы в реагирующий интерфейс. Теперь ни одно из отношений не появляется на переднем крае реакции с использованием приведенного ниже кода, и хотя я не сталкиваюсь с какими-либо ошибками, он все еще не работает.

    if whitelisted['agent_relationships'].none? {|r| r['jsonmodel_type'] == 'series_system_agent_record_ownership_relationship' && 'series_system_agent_record_creation_by_agent_relationship'}
      [{
        'jsonmodel_type' => 'series_system_agent_record_ownership_relationship',
        'relationship_target_record_type' => 'agent_corporate_entity',
        'ref' => json.responsible_agency['ref'],
        'relator' => 'is_controlled_by',
        'start_date' => json.responsible_agency['start_date'],
      },{
        'jsonmodel_type' => 'series_system_agent_record_creation_by_agent_relationship',
        'relationship_target_record_type' => 'agent_corporate_entity',
        'ref' => json.creating_agency[0]['ref'],
        'relator' => 'created_by',
        'start_date' => json.creating_agency[0]['start_date'],
      },].each { |hsh| ['agent_relationships'].unshift(hsh) }
    end

whitelisted['responsible_agency'] = json.responsible_agency
whitelisted['creating_agency'] = json.creating_agency

1 Ответ

0 голосов
/ 29 апреля 2020

Из того, что я понимаю из исходного кода, вы хотите добавить series_system_agent_record_creation_by_agent_relationship по умолчанию, только если он отсутствует в белом списке. То же самое с series_system_agent_record_ownership_relationship - добавляйте только тогда, когда оно отсутствует.

Однако ваш рефакторинг пытается добавить оба одновременно.

Рефакторинг обычно представляет собой процесс, когда вы немного реорганизуете, а затем он дает вам Идея, что еще может быть реорганизовано.

Я бы начал с замены длинных имен. Одна из первоначальных версий может быть.

def whatever_the_name
  # ...
  unless has_agent_relationship_of_type?(whitelisted, 'series_system_agent_record_creation_by_agent_relationship')
    creating_agency = json.creating_agency[0]
    default_agent_relationship = {
        'jsonmodel_type' => 'series_system_agent_record_creation_by_agent_relationship',
        'relationship_target_record_type' => 'agent_corporate_entity',
        'ref' => creating_agency['ref'],
        'relator' => 'created_by',
        'start_date' => creating_agency['start_date'],
    }

    whitelisted['agent_relationships'].unshift(default_agent_relationship)
  end

  unless has_agent_relationship_of_type?(whitelisted, 'series_system_agent_record_ownership_relationship')
    responsible_agency = json.responsible_agency
    default_agent_relationship = {
        'jsonmodel_type' => 'series_system_agent_record_ownership_relationship',
        'relationship_target_record_type' => 'agent_corporate_entity',
        'ref' => responsible_agency['ref'],
        'relator' => 'is_controlled_by',
        'start_date' => responsible_agency['start_date'],
    }

    whitelisted['agent_relationships'].unshift(default_agent_relationship)
  end

  # ...
end


def has_agent_relationship_of_type?(whitelisted, type)
  whitelisted['agent_relationships'].any? {|r| r['jsonmodel_type'] == type }
end

Конечно, это не следует считать окончательно переработанным кодом. Все зависит от того, как далеко вы хотите получить. Но, надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...