1. Ruby / Говнокод #20138

    −55

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    def self.check_environment_variables
        env_variables_missing = ENV['BATTLE_NET_KEY'].nil? || ENV['BATTLE_NET_KEY'].empty? || ENV['BATTLE_NET_REGION'].nil? || ENV['BATTLE_NET_REGION'].empty? || ENV['BATTLE_NET_LOCALE'].nil? || ENV['BATTLE_NET_LOCALE'].empty?
        message =  'Env variables missing:' if env_variables_missing
        message += " ENV['BATTLE_NET_KEY']" if ENV['BATTLE_NET_KEY'].nil? || ENV['BATTLE_NET_KEY'].empty?
        message += " ENV['BATTLE_NET_REGION']" if ENV['BATTLE_NET_REGION'].nil? || ENV['BATTLE_NET_REGION'].empty?
        message += " ENV['BATTLE_NET_LOCALE']" if ENV['BATTLE_NET_LOCALE'].nil? || ENV['BATTLE_NET_LOCALE'].empty?
        message if env_variables_missing
      end

    Кто-нибудь знает метод, которым можно проверять на nil и на empty одновременно?

    Запостил: Artik1994, 06 Июня 2016

    Комментарии (30) RSS

    • Hash.dig в 2.3.0 http://ruby-doc.org/core-2.3.0_preview1/Hash.html#method-i-dig и проверять не `empty?`, а 'blank?' или `present?` (там ведь строки же?)
      или какулька типа такой:
      def dig_to_hash(hash, *keys_to_dig)
          chain = keys_to_dig.inject('') { |a, e| a << "[:#{e}]" }
          new_hash = hash.dup
          new_hash.try(:deep_symbolize_keys!)
          begin
            instance_eval("new_hash#{chain}")
          rescue NoMethodError
            nil
          end
        end
      Ответить
    • То ли дело php
      Ответить
    • > на nil и на empty одновременно?
      делов то
      class NilClass
      def empty?
        true
      end
      end
      Ответить
    • Бля, чо за хуйня. Почему пустота не равно ничему?
      Ответить
      • это не пустота, а свойство строки - иметь нулевую длину. А делать 0 == '' == nil == [] == {} == false это путь в ад.
        Ответить
      • Тут код не смотрел, но пустота (нул) в том же скл - не равна ничему и это правильно.
        Ответить
      • потому что nil это nil, a .empty вернет либо false либо true
        а false != nil != true, лагична же!
        Ответить
        • .empty? для nil вернет ошибку, потому что у nil нет такого метода.
          Ответить
          • а я чо сказал nil.empty? прочитал сам себя джвадцать раз, вроде там ничего про nil.empty и нет.
            Возможно я не сказал что-то или вы не правельна меня понели.
            явно что у ничего не может быть метода на пустоту
            Ответить
            • ты сказал что .empty вернет false либо true, а он может вернуть еще и ошибку. А так да, разобрались в общем.
              Ответить
      • Объясняю: есть переменная окружения, к примеру ENV['BATTLE_NET_KEY']. Она по умолчанию nil, и если она нил нужно выдать сообщение об ошибке, но так же она может быть просто пустой строкой '' (кто-то задал ENV['BATTLE_NET_KEY'] = '') и в этом случае нужно вывести то же сообщение об ошибке.

        Как это реализовать одним методом, чтобы не засорять код?

        Сейчас:

        ENV['BATTLE_NET_KEY'].nil? || ENV['BATTLE_NET_KEY'].empty?

        Должно быть:

        ENV['BATTLE_NET_KEY'].method?
        Ответить
        • Может лучше method(ENV['BATTLE_NET_KEY']) ?
          Тогда ответ что за method очевиден. Ну я написал выше как сделать чтоб .emtpy? работал для nil, но это грязный хак и проблемы не заставят себя ждать.
          Хотя в данном случае по-моему проблема X-У, кто мешает сделать
          KEYS = [ 'BATTLE_NET_KEY', 'BATTLE_NET_REGION', 'BATTLE_NET_LOCALE' ]
          ...
          KEYS.map{|x|ENV[x]}.select{|x| x.nil? || x.empty?}
          Ответить
          • А ты не знаешь, чего на гейдеве какие-то унылые треды последнее время?
            Ответить
            • старость видимо. пора валить с этого геймдева.
              Ответить
              • У тебя же такаяже фигня, как и у меня? Для тебя тоже тамошние треды скатились? Ну вот на говнокоде ты вроде еще сидишь и не считаешь его унылым... Хотя всякие вебкилы с ботами превратили его в ядреныую помойку
                Ответить
                • Я сюда редко захожу. Тут конечно борманды погениальнее гдшных и треды бывают интересные, но уж очень нечасто.
                  Ответить
          • Я сделал так:

            [ ENV['BATTLE_NET_KEY'], ENV['BATTLE_NET_REGION'], ENV['BATTLE_NET_REGION'] ].select{|x| x.nil? || x.empty?}

            Но не смекну как добавлять сообщения-предупреждения о необходимости ввести то или иное значение.
            Ответить
            • Вот, все до чего дошел:

              keys = [ ENV['BATTLE_NET_KEY'], ENV['BATTLE_NET_REGION'], ENV['BATTLE_NET_LOCALE'] ].select{|x| x.nil? || x.empty?}
              message = 'Env variables missing:' if keys.include?(nil) || keys.include?('')
              message += " ENV['BATTLE_NET_KEY']" if keys[0] == nil || keys[0] == ''
              message += " ENV['BATTLE_NET_REGION']" if keys[1] == nil || keys[1] == ['']
              message += " ENV['BATTLE_NET_LOCALE']" if keys[2] == nil || keys[2] == ['']
              message
              Ответить
              • if keys.empty?
                return ""
                else
                return 'Env variables missing:'+keys.map{|x| "ENV[#{x}]"}.join(" ")
                Ответить
                • keys = [ ENV['BATTLE_NET_KEY'], ENV['BATTLE_NET_REGION'], ENV['BATTLE_NET_REGION'] ].select{|x| x.nil? || x.empty?}
                  if keys.empty?
                  return ""
                  else
                  return 'Env variables missing:'+keys.map{|x| "ENV[#{x}]"}.join(" ")
                  end

                  Не пашет...
                  Ответить
                  • там же по идее не может быть пустым keys в любом случае.
                    Ответить
                • Вот такое выдает: "Env variables missing:ENV[] ENV[] ENV[]"
                  Ответить
    • Весь код выше - бред. Так лучше

      ```
      def self.check_environment_variables
      checked_env_vars = %w(BATTLE_NET_KEY BATTLE_NET_REGION BATTLE_NET_LOCALE)
      missing_env_vars = checked_env_vars.select { |env_var| ENV.fetch(env_var, '').empty? }
      message = missing_env_vars.map { |env_var| "ENV['#{env_var}']" }.join(', ')
      "Env variables missing: #{message}" if missing_env_vars.any?
      end
      ```
      Ответить
    • Руби хуюби
      Ответить
      • Руби - Матцумото
        А Хуюби - это ты сам придумал
        Ответить
        • > Матцумото
          попытка примирить поливановохолопов и хэпбернобояр провалилась
          Ответить
          • Считаю спор «поливановцы vs хепбёрновцы» некорректным, ибо стороны относятся к разным алфавитам. То ли дело «Хепбёрн vs нихон-сики vs кунрэй-сики».

            И да, я считаю, что хепбёрновка не нужна, ибо кунрэй/нихон ближе к самой задумке каны.
            Ответить
          • Скажи "нет!" транслиту: 松本
            Ответить

    Добавить комментарий