Sha256: 6a36c2cb7c930184689ef5f2f357f4fb351c128cc2e0f9ac59f180ef7ad2dc3a

Contents?: true

Size: 1.98 KB

Versions: 2

Compression:

Stored size: 1.98 KB

Contents

#--
# Simple Declarative Language (SDL) for Ruby
# Copyright 2005 Ikayzo, inc.
#
# This program is free software. You can distribute or modify it under the
# terms of the GNU Lesser General Public License version 2.1 as published by
# the Free Software Foundation.
#
# This program is distributed AS IS and WITHOUT WARRANTY. OF ANY KIND,
# INCLUDING MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, contact the Free Software Foundation, Inc.,
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#++


module SDL4R

  # Represents a binary value.
  # 
  # This class was introduced to avoid the confusion between a Ruby String and a binary literal.
  #
  class SdlBinary

    attr_accessor :bytes

    # +value+: a String containing the bytes
    def initialize(bytes)
      @bytes = bytes
    end
    
    def ==(o)
      return true if self.equal?(o)
      return false if not o.instance_of?(self.class)
      return self.bytes == o.bytes
    end

    alias_method :eql?, :==

    def hash
      return bytes.hash
    end

    # Returns the bytes base64-encoded.
    def to_s
      return Base64.encode64(bytes)
    end

    # Decodes the specified base-64 encoded string and returns a corresponding SdlBinary
    # instance.
    # +s+ might not include the conventional starting and ending square brackets.
    def self.decode64(s)
      s = s.delete("\n\r\t ")

      binary = Base64.decode64(s)
      
      if binary.empty? and not s.empty?
        raise ArgumentError, "bad binary literal"
      end

      return SdlBinary.new(binary)
    end
  end

  # Try to coerce 'o' into a SdlBinary.
  # Raise an ArgumentError if it fails.
  def self.SdlBinary(o)
    if o.kind_of? SdlBinary
      return o
    elsif o.kind_of? String
      return SdlBinary.new(o)
    else
      raise ArgumentError, "can't coerce argument"
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sdl4r-0.9.4 lib/sdl4r/sdl_binary.rb
sdl4r-0.9.3 lib/sdl4r/sdl_binary.rb