# Check returned value if model.update # update successful else # update failed end # Option 2: # Rescue raised error begin model.update! rescue => e # update failed end
wait_thr| stderr.read # try to read stderr first, blocked stdout.read # but too much output to stdout, # exceeds fixed length buffer, # causing deadlock end
avoid deadlocks. Since pipes are fixed length buffers, ::popen3(“prog”) {|i, o, e, t| o.read } deadlocks if the program generates too much output on stderr. You should read stdout and stderr simultaneously (using threads or IO.select). However, if you don’t need stderr output, you can use :: popen2. If merged stdout and stderr output is not a problem, you can use :: popen2e. If you really need stdout and stderr output as separate strings, you can consider ::capture3. RubyDoc - Open3#popen3
# It blocks until out, err, status are collected out, err, status = Open3.capture3("run_cli_program") out[0] # first line from stdout err[0] # first line from stderr
# Rich HTML email has unexpected.. line breaks and space, # causing the styling to break ... <a id="foobar" style="color: #666; .... font-si ze: 23px;">Foo Bar</a> ... More details: Quoted-printable – crossing the 1000 character SMTP barrier
# mail gem by default, Content-Transfer-Type: 7bit mail = Mail.new { html_part do content_type 'text/html; charset=UTF-8' body html_email_content end }
# Solution: use Content-Transfer-Type: quoted-printable # to encode HTML content properly with 76 chars per line mail = Mail.new { html_part do content_transfer_type 'quoted-printable' content_type 'text/html; charset=UTF-8' body html_email_content end }
do let(:faker) { Fakes::CustomerIoClient.new } before do allow(CustomerIO::Client).to receive(:new) { faker } end it 'sends correct stuff' do service.do_stuff expect(faker.events).to include expected_event end end
do 2 it 'do test 1' 3 it 'do test 2' 4 end 5 6 describe 'foo' do 7 include_examples 'shared tests' 8 it 'do test 3' 9 end $ be rspec spec/foo_spec.rb:7 -fd Run options: include {:locations=>{". /spec/foo_spec.rb"=>[7]}} foo do test 1 (PENDING: Not yet implemented) do test 2 (PENDING: Not yet implemented) do test 3 (PENDING: Not yet implemented)
do 2 it 'do test 1' 3 it 'do test 2' 4 end 5 6 describe 'foo' do 7 it_behaves_like 'shared tests' 8 it 'do test 3' 9 end $ be rspec spec/foo_spec.rb:7 -fd Run options: include {:locations=>{". /spec/foo_spec.rb"=>[7]}} foo do test 1 (PENDING: Not yet implemented) do test 2 (PENDING: Not yet implemented)