Hello community, here is the log from the commit of package rubygem-builder for openSUSE:Factory checked in at 2019-12-14 12:21:55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rubygem-builder (Old) and /work/SRC/openSUSE:Factory/.rubygem-builder.new.4691 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-builder" Sat Dec 14 12:21:55 2019 rev:13 rq:756951 version:3.2.4 Changes: -------- --- /work/SRC/openSUSE:Factory/rubygem-builder/rubygem-builder.changes 2017-01-25 23:28:04.383920608 +0100 +++ /work/SRC/openSUSE:Factory/.rubygem-builder.new.4691/rubygem-builder.changes 2019-12-14 12:24:01.143193528 +0100 @@ -1,0 +2,7 @@ +Sat Dec 14 00:42:45 UTC 2019 - Manuel Schnitzer <mschnit...@suse.com> + +- updated to version 3.2.4 + + * no changelog found + +------------------------------------------------------------------- Old: ---- builder-3.2.3.gem New: ---- builder-3.2.4.gem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rubygem-builder.spec ++++++ --- /var/tmp/diff_new_pack.TttZql/_old 2019-12-14 12:24:01.723193440 +0100 +++ /var/tmp/diff_new_pack.TttZql/_new 2019-12-14 12:24:01.723193440 +0100 @@ -1,7 +1,7 @@ # # spec file for package rubygem-builder # -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -12,7 +12,7 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # @@ -24,7 +24,7 @@ # Name: rubygem-builder -Version: 3.2.3 +Version: 3.2.4 Release: 0 %define mod_name builder %define mod_full_name %{mod_name}-%{version} @@ -34,7 +34,7 @@ BuildRequires: %{ruby} BuildRequires: ruby-macros >= 5 Url: http://onestepback.org -Source: http://rubygems.org/gems/%{mod_full_name}.gem +Source: https://rubygems.org/gems/%{mod_full_name}.gem Source1: gem2rpm.yml Summary: Builders for MarkUp License: MIT ++++++ builder-3.2.3.gem -> builder-3.2.4.gem ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CHANGES new/CHANGES --- old/CHANGES 2017-01-13 19:05:08.000000000 +0100 +++ new/CHANGES 2019-12-10 23:01:11.000000000 +0100 @@ -1,6 +1,18 @@ = Change Log -== Version 3.2.0 +== Version 3.2.3 (2017-01-13) + +* Support for Ruby 2.4 + +== Version 3.2.2 (2013-06-01 + +* Misc minor fixes + +== Version 3.2.1 (2013-05-30) + +* Travis & Rdoc fixes + +== Version 3.2.0 (2013-02-23) * Ruby 2.0 compatibility changes. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/README.md new/README.md --- old/README.md 2017-01-13 19:05:08.000000000 +0100 +++ new/README.md 2019-12-10 23:01:11.000000000 +0100 @@ -245,8 +245,8 @@ | Description | Link | | :----: | :----: | | Documents | http://builder.rubyforge.org/ | -| Github Clone | git://github.com/jimweirich/builder.git | -| Issue / Bug Reports | https://github.com/jimweirich/builder/issues?state=open | +| Github Clone | git://github.com/tenderlove/builder.git | +| Issue / Bug Reports | https://github.com/tenderlove/builder/issues?state=open | ## Contact diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Rakefile new/Rakefile --- old/Rakefile 2017-01-13 19:05:08.000000000 +0100 +++ new/Rakefile 2019-12-10 23:01:11.000000000 +0100 @@ -1,3 +1,4 @@ +# frozen_string_literal: true # Rakefile for rake -*- ruby -*- # Copyright 2004, 2005, 2006 by Jim Weirich (j...@weirichhouse.org). @@ -43,7 +44,7 @@ Rake::TestTask.new("test_units") do |t| t.test_files = FileList['test/test*.rb'] - t.libs << "." + t.libs << "." << "test" t.verbose = false end @@ -104,7 +105,6 @@ s.test_files = PKG_FILES.select { |fn| fn =~ /^test\/test/ } - s.has_rdoc = true s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a s.rdoc_options << '--title' << 'Builder -- Easy XML Building' << @@ -135,7 +135,6 @@ s.test_files = PKG_FILES.select { |fn| fn =~ /^test\/test/ } - s.has_rdoc = true s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a s.rdoc_options << '--title' << 'BlankSlate -- Base Class for building proxies.' << diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/builder.blurb new/builder.blurb --- old/builder.blurb 1970-01-01 01:00:00.000000000 +0100 +++ new/builder.blurb 2019-12-10 23:01:11.000000000 +0100 @@ -0,0 +1,27 @@ +name: builder +document: http://builder.rubyforge.org +download: http://rubyforge.org/frs/?group_id=415 +description: > + <p>This package contains Builder, a simple ruby library for + building XML document quickly and easily.</p> + + <p>Here's an example:</p> + + <pre> + xml = Builder::XmlMarkup.new(:indent=>2) + xml.person { + xml.first_name("Jim") + xml.last_name("Weirich") + } + puts xml.target! + </pre> + + <p>Produces:</p> + + <pre> + <person> + <first_name>Jim</first_name> + <last_name>Weirich</last_name> + </person> + </pre> + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/builder.gemspec new/builder.gemspec --- old/builder.gemspec 1970-01-01 01:00:00.000000000 +0100 +++ new/builder.gemspec 2019-12-10 23:01:11.000000000 +0100 @@ -0,0 +1,45 @@ +# frozen_string_literal: true +require './lib/builder/version' + +PKG_VERSION = Builder::VERSION + +PKG_FILES = Dir[ + '[A-Z]*', + 'doc/**/*', + 'lib/**/*.rb', + 'test/**/*.rb', + 'rakelib/**/*' +] + +Gem::Specification.new do |s| + + #### Basic information. + + s.name = 'builder' + s.version = PKG_VERSION + s.summary = "Builders for MarkUp." + s.description = %{\ +Builder provides a number of builder objects that make creating structured data +simple to do. Currently the following builder objects are supported: + +* XML Markup +* XML Events +} + + s.files = PKG_FILES + s.require_path = 'lib' + + s.test_files = PKG_FILES.select { |fn| fn =~ /^test\/test/ } + + s.has_rdoc = true + # s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a + s.rdoc_options << + '--title' << 'Builder -- Easy XML Building' << + '--main' << 'README.rdoc' << + '--line-numbers' + + s.authors = ["Jim Weirich", "Aaron Patterson"] + s.email = "aron.patter...@gmail.com" + s.homepage = "https://github.com/tenderlove/builder" + s.license = 'MIT' +end Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/doc/jamis.rb new/doc/jamis.rb --- old/doc/jamis.rb 2017-01-13 19:05:08.000000000 +0100 +++ new/doc/jamis.rb 2019-12-10 23:01:11.000000000 +0100 @@ -1,3 +1,4 @@ +# frozen_string_literal: true module RDoc module Page diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/blankslate.rb new/lib/blankslate.rb --- old/lib/blankslate.rb 2017-01-13 19:05:08.000000000 +0100 +++ new/lib/blankslate.rb 2019-12-10 23:01:11.000000000 +0100 @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true #-- # Copyright 2004, 2006 by Jim Weirich (j...@weirichhouse.org). # All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/builder/blankslate.rb new/lib/builder/blankslate.rb --- old/lib/builder/blankslate.rb 2017-01-13 19:05:08.000000000 +0100 +++ new/lib/builder/blankslate.rb 2019-12-10 23:01:11.000000000 +0100 @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true #-- # Copyright 2004, 2006 by Jim Weirich (j...@weirichhouse.org). # All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/builder/version.rb new/lib/builder/version.rb --- old/lib/builder/version.rb 2017-01-13 19:05:08.000000000 +0100 +++ new/lib/builder/version.rb 2019-12-10 23:01:11.000000000 +0100 @@ -1,8 +1,9 @@ +# frozen_string_literal: true module Builder VERSION_NUMBERS = [ VERSION_MAJOR = 3, VERSION_MINOR = 2, - VERSION_BUILD = 3, + VERSION_BUILD = 4, ] VERSION = VERSION_NUMBERS.join(".") end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/builder/xchar.rb new/lib/builder/xchar.rb --- old/lib/builder/xchar.rb 2017-01-13 19:05:08.000000000 +0100 +++ new/lib/builder/xchar.rb 2019-12-10 23:01:11.000000000 +0100 @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true # The XChar library is provided courtesy of Sam Ruby (See # http://intertwingly.net/stories/2005/09/28/xchar.rb) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/builder/xmlbase.rb new/lib/builder/xmlbase.rb --- old/lib/builder/xmlbase.rb 2017-01-13 19:05:08.000000000 +0100 +++ new/lib/builder/xmlbase.rb 2019-12-10 23:01:11.000000000 +0100 @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true require 'builder/blankslate' @@ -52,7 +53,7 @@ attrs ||= {} attrs.merge!({:nil => true}) if explicit_nil_handling? else - text ||= '' + text ||= ''.dup text << arg.to_s end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/builder/xmlevents.rb new/lib/builder/xmlevents.rb --- old/lib/builder/xmlevents.rb 2017-01-13 19:05:08.000000000 +0100 +++ new/lib/builder/xmlevents.rb 2019-12-10 23:01:11.000000000 +0100 @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true #-- # Copyright 2004 by Jim Weirich (j...@weirichhouse.org). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/builder/xmlmarkup.rb new/lib/builder/xmlmarkup.rb --- old/lib/builder/xmlmarkup.rb 2017-01-13 19:05:08.000000000 +0100 +++ new/lib/builder/xmlmarkup.rb 2019-12-10 23:01:11.000000000 +0100 @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true #-- # Copyright 2004, 2005 by Jim Weirich (j...@weirichhouse.org). # All rights reserved. @@ -192,7 +193,7 @@ @quote = (options[:quote] == :single) ? "'" : '"' @explicit_nil_handling = options[:explicit_nil_handling] super(indent, margin) - @target = options[:target] || "" + @target = options[:target] || "".dup end # Return the target of the builder. @@ -271,6 +272,11 @@ _special("<![CDATA[", "]]>", text.gsub(']]>', ']]]]><![CDATA[>'), nil) end + def cdata_value!(open, text) + _ensure_no_block ::Kernel::block_given? + _special("<#{open}>", "</#{open}>", "<![CDATA[#{text.gsub(']]>', ']]]]><![CDATA[>')}]]>", nil) + end + private # NOTE: All private methods of a builder object are prefixed when diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/builder.rb new/lib/builder.rb --- old/lib/builder.rb 2017-01-13 19:05:08.000000000 +0100 +++ new/lib/builder.rb 2019-12-10 23:01:11.000000000 +0100 @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true #-- # Copyright 2004 by Jim Weirich (j...@weirichhouse.org). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata --- old/metadata 2017-01-13 19:05:08.000000000 +0100 +++ new/metadata 2019-12-10 23:01:11.000000000 +0100 @@ -1,14 +1,14 @@ --- !ruby/object:Gem::Specification name: builder version: !ruby/object:Gem::Version - version: 3.2.3 + version: 3.2.4 platform: ruby authors: - Jim Weirich autorequire: bindir: bin cert_chain: [] -date: 2017-01-13 00:00:00.000000000 Z +date: 2019-12-10 00:00:00.000000000 Z dependencies: [] description: | Builder provides a number of builder objects that make creating structured data @@ -19,12 +19,23 @@ email: jim.weir...@gmail.com executables: [] extensions: [] -extra_rdoc_files: [] +extra_rdoc_files: +- CHANGES +- MIT-LICENSE +- README.md +- Rakefile +- builder.blurb +- builder.gemspec +- doc/releases/builder-1.2.4.rdoc +- doc/releases/builder-2.0.0.rdoc +- doc/releases/builder-2.1.1.rdoc files: - CHANGES - MIT-LICENSE - README.md - Rakefile +- builder.blurb +- builder.gemspec - doc/jamis.rb - doc/releases/builder-1.2.4.rdoc - doc/releases/builder-2.0.0.rdoc @@ -73,8 +84,7 @@ - !ruby/object:Gem::Version version: '0' requirements: [] -rubyforge_project: -rubygems_version: 2.6.8 +rubygems_version: 3.1.0.pre3 signing_key: specification_version: 4 summary: Builders for MarkUp. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rakelib/publish.rake new/rakelib/publish.rake --- old/rakelib/publish.rake 2017-01-13 19:05:08.000000000 +0100 +++ new/rakelib/publish.rake 2019-12-10 23:01:11.000000000 +0100 @@ -1,3 +1,4 @@ +# frozen_string_literal: true # Optional publish task for Rake begin diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rakelib/tags.rake new/rakelib/tags.rake --- old/rakelib/tags.rake 2017-01-13 19:05:08.000000000 +0100 +++ new/rakelib/tags.rake 2019-12-10 23:01:11.000000000 +0100 @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true module Tags extend Rake::DSL if defined?(Rake::DSL) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rakelib/testing.rake new/rakelib/testing.rake --- old/rakelib/testing.rake 2017-01-13 19:05:08.000000000 +0100 +++ new/rakelib/testing.rake 2019-12-10 23:01:11.000000000 +0100 @@ -1,3 +1,4 @@ +# frozen_string_literal: true require 'rake/testtask' Rake::TestTask.new do |t| diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/helper.rb new/test/helper.rb --- old/test/helper.rb 2017-01-13 19:05:08.000000000 +0100 +++ new/test/helper.rb 2019-12-10 23:01:11.000000000 +0100 @@ -1,3 +1,4 @@ +# frozen_string_literal: true require 'minitest/autorun' module Builder diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/performance.rb new/test/performance.rb --- old/test/performance.rb 2017-01-13 19:05:08.000000000 +0100 +++ new/test/performance.rb 2019-12-10 23:01:11.000000000 +0100 @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true # encoding: iso-8859-1 #-- @@ -14,7 +15,7 @@ require 'builder/xmlmarkup' require 'benchmark' -text = "This is a test of the new xml markup. I�t�rn�ti�n�liz�ti�n\n" * 10000 +text = "This is a test of the new xml markup. I�t�rn�ti�n�liz�ti�n\n" * 10000 include Benchmark # we need the CAPTION and FMTSTR constants include Builder diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/preload.rb new/test/preload.rb --- old/test/preload.rb 2017-01-13 19:05:08.000000000 +0100 +++ new/test/preload.rb 2019-12-10 23:01:11.000000000 +0100 @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true #-- # Portions copyright 2004 by Jim Weirich (j...@weirichhouse.org). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/test_blankslate.rb new/test/test_blankslate.rb --- old/test/test_blankslate.rb 2017-01-13 19:05:08.000000000 +0100 +++ new/test/test_blankslate.rb 2019-12-10 23:01:11.000000000 +0100 @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true #-- # Portions copyright 2004 by Jim Weirich (j...@weirichhouse.org). @@ -104,12 +105,6 @@ end end - def test_targetted_private_methods_are_undefined_during_instance_eval - assert_raise(NoMethodError, NameError) do - @bs.instance_eval do self.puts "HI" end - end - end - def test_untargetted_private_methods_are_defined_during_instance_eval oldstdout = $stdout $stdout = StringIO.new diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/test_eventbuilder.rb new/test/test_eventbuilder.rb --- old/test/test_eventbuilder.rb 2017-01-13 19:05:08.000000000 +0100 +++ new/test/test_eventbuilder.rb 2019-12-10 23:01:11.000000000 +0100 @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true #-- # Portions copyright 2004 by Jim Weirich (j...@weirichhouse.org). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/test_markupbuilder.rb new/test/test_markupbuilder.rb --- old/test/test_markupbuilder.rb 2017-01-13 19:05:08.000000000 +0100 +++ new/test/test_markupbuilder.rb 2019-12-10 23:01:11.000000000 +0100 @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true #-- # Portions copyright 2004 by Jim Weirich (j...@weirichhouse.org). @@ -417,6 +418,11 @@ assert_equal "<![CDATA[TEST]]>\n", @xml.target! end + def test_cdata_value + @xml.cdata_value!("content:encoded", "<p>TEST</p>") + assert_equal "<content:encoded><![CDATA[<p>TEST</p>]]></content:encoded>\n", @xml.target! + end + def test_cdata_with_ampersand @xml.cdata!("TEST&CHECK") assert_equal "<![CDATA[TEST&CHECK]]>\n", @xml.target! @@ -499,7 +505,7 @@ $KCODE = encoding string elsif encoding == 'UTF8' - string.force_encoding('UTF-8') + string.dup.force_encoding('UTF-8') else string end @@ -580,7 +586,7 @@ end def pop_text - result = '' + result = ''.dup while ! @handler.events.empty? && @handler.events[0][0] == :text result << @handler.events[0][1] @handler.events.shift diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/test_method_caching.rb new/test/test_method_caching.rb --- old/test/test_method_caching.rb 2017-01-13 19:05:08.000000000 +0100 +++ new/test/test_method_caching.rb 2019-12-10 23:01:11.000000000 +0100 @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true #-- # Portions copyright 2011 by Bart ten Brinke (i...@retrosync.com). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/test_namecollision.rb new/test/test_namecollision.rb --- old/test/test_namecollision.rb 2017-01-13 19:05:08.000000000 +0100 +++ new/test/test_namecollision.rb 2019-12-10 23:01:11.000000000 +0100 @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true #-- # Portions copyright 2004 by Jim Weirich (j...@weirichhouse.org). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/test_xchar.rb new/test/test_xchar.rb --- old/test/test_xchar.rb 2017-01-13 19:05:08.000000000 +0100 +++ new/test/test_xchar.rb 2019-12-10 23:01:11.000000000 +0100 @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true # encoding: us-ascii #-- @@ -22,9 +23,9 @@ # shim method for testing purposes def to_xs(escape=true) - raise NameError.new('to_xs') unless caller[0].index(__FILE__) + # raise NameError.new('to_xs') unless caller[0].index(__FILE__) - result = Builder::XChar.encode(self) + result = Builder::XChar.encode(self.dup) if escape result.gsub(/[^\u0000-\u007F]/) {|c| "&##{c.ord};"} else @@ -70,9 +71,15 @@ end def test_utf8_verbatim - assert_equal "\xE2\x80\x99", "\xE2\x80\x99".to_xs(false) # right single quote - assert_equal "\xC2\xA9", "\xC2\xA9".to_xs(false) # copy - assert_equal "\xC2\xA9&\xC2\xA9", - "\xC2\xA9&\xC2\xA9".to_xs(false) # copy with ampersand + assert_equal binary("\xE2\x80\x99"), "\xE2\x80\x99".to_xs(false) # right single quote + assert_equal binary("\xC2\xA9"), "\xC2\xA9".to_xs(false) # copy + assert_equal binary("\xC2\xA9&\xC2\xA9"), + "\xC2\xA9&\xC2\xA9".to_xs(false) # copy with ampersand + end + + private + + def binary(string) + string.dup.force_encoding(Encoding::BINARY) end end