Rails 2 - передача параметра в wicked_pdf на основе серверной ОС - PullRequest
1 голос
/ 05 мая 2011

У меня есть метод

def welcome(*args)
  #....some code
end

В зависимости от ситуации мне иногда приходится вызывать этот метод как

welcome(arg1,arg2) {|block| #code}

, но иногда я хочу вызвать

welcome(arg1) {|block| #code}

часть блока для обоих вызовов одинакова

Пожалуйста, помогите мне СУШИТЬ этот код и достичь функциональности

РЕДАКТИРОВАТЬ

Извините, что не показывал это раньше

Я пытаюсь внедрить плагин wicked_pdf в мое приложение rails.Он имеет следующий код

Open3.popen3(command_for_stdin_stdout,"b") do |stdin, stdout, stderr|
      stdin.write(string)
      stdin.close
      pdf = stdout.read
      raise "PDF could not be generated!\n#{stderr.read}" if pdf.length == 0
      pdf
end

Второй аргумент, передаваемый методу, т. Е. «B», требуется только в том случае, если сервер работает в Windows, в противном случае параметр не нужен.Когда я пытался передать пустое значение, он не генерирует PDF.Я пытался сделать это

Open3.popen3(command_for_stdin_stdout,(["i386-mingw32","mswin","win32","mingw","bccwin","cygwin"].include?(RUBY_PLATFORM) ? "b" : ""))
.......#rest of the code

Спасибо

Ответы [ 4 ]

4 голосов
/ 05 мая 2011

Нет проблем!Аргументы блоков получают свой собственный слот в методе Ruby, поэтому совершенно безопасно иметь аргументы с одинаковыми аргументами одновременно.

def welcome(*args)
  puts args.inspect
  yield
  #....some code
end

welcome "asdf", "asdf" do
  puts "uh-oh"
end

welcome "just one" do
  puts "still works?"
end
1 голос
/ 05 мая 2011
def welcome(arg1, arg2="default")
  ...
end

Вы можете вызвать его в любом случае, и arg2 будет значением по умолчанию, если он не установлен вызывающим абонентом.

0 голосов
/ 01 июня 2011

Мое решение:

open_options = [command_for_stdin_stdout, ("b" if ENV['OS'] == 'Windows_NT')].compact
Open3.popen3(*open_options) do |stdin, stdout, stderr|
  ...
end
0 голосов
/ 05 мая 2011
welcome( :arg1 => arg1, :arg2 => arg2) {|blockety|block}

args заканчивается

{:arg1 => arg1, :arg2 => arg2} 

внутри приветственного метода. Затем вы берете их как вам нужно из хеша

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