Выполните итерацию через файл yaml в ruby ​​и загрузите необходимые данные - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть файл yaml со следующей структурой:

market:
  US:
    - prod:
      - page1: sys-admin, client-admin, editor-admin
      - page2: client-admin
      - page3: editor-admin, sys-admin

    - dev:
      - page1: sys-admin, editor-admin
      - page2: sys-admin, client-admin, editor-admin
      - page3: sys-admin, client-admin, editor-admin

  IN:
    - prod:
      - page1: sys-admin, client-admin
      - page2: client-admin, editor-admin
      - page3: editor-admin, sys-admin

    - dev:
      - page1: client-admin, editor-admin
      - page2: sys-admin, client-admin, editor-admin
      - page3: sys-admin, client-admin, editor-admin

Теперь я хочу функцию, которая возвращает название рынка, например. IN и стр. Например. page1 в зависимости от ролей, например. клиент-администратор .Как мне поступить?Я пытаюсь, но не могу сделать вывод и прийти к правильному выводу.
Помогите мне, ребята!
Спасибо заранее.:)

1 Ответ

0 голосов
/ 05 декабря 2018

Я бы посоветовал переосмыслить дизайн вашего файла YAML, чтобы вам было проще.Может быть, что-то вроде

doc = <<Y
market:
  US:
    prod:
      page1: 
        - sys-admin 
        - client-admin 
        - editor-admin
      page2: 
        - client-admin
      page3: 
        - editor-admin
        - sys-admin
Y

Тогда найти правильные страницы легко:

locale = 'US' 
environment = 'prod'
user_role = 'client-admin'
h = YAML.load(doc).to_h
h['market'][locale][environment].select do |page,roles| 
  roles.include?(user_role)
end 
#=> {"page1"=>["sys-admin", "client-admin", "editor-admin"], 
#    "page2"=>["client-admin"]}

В настоящее время ваши окружения представляют собой Array из Hash объектов, которые кажутся ненужнымиони могут быть просто Hash, а ваши роли на самом деле String (например, "sys-admin, client-admin, editor-admin"), которые могут оказаться более трудными для поддержки в будущем и делают анализ немного болеегромоздкий.

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