lib/bindata/deprecated.rb



module BinData
  class Base
    def single_value?
      warn "#single_value? is deprecated.  It should no longer be needed"
      false
    end
  end

  class SingleValue < Primitive
    class << self
      def inherited(subclass) #:nodoc:
        warn "BinData::SingleValue is deprecated.  Replacing with BinData::Primitive"
        super
      end
    end
  end

  class MultiValue < Record
    class << self
      def inherited(subclass) #:nodoc:
        warn "BinData::MultiValue is deprecated.  Replacing with BinData::Record"
        super
      end
    end
  end

  class Registry
    def Registry.instance #:nodoc:
      warn "'Registry.instance' is deprecated.  Replacing with 'RegisteredClasses'"
      RegisteredClasses
    end
  end

  class Array
    alias_method :orig_clear?, :clear?
    def clear?(index = nil) #:nodoc:
      if index.nil?
        orig_clear?
      elsif index < elements.length
        warn "'obj.clear?(n)' is deprecated.  Replacing with 'obj[n].clear?'"
        elements[index].clear?
      else
        true
      end
    end

    alias_method :orig_clear, :clear
    def clear(index = nil) #:nodoc:
      if index.nil?
        orig_clear
      elsif index < elements.length
        warn "'obj.clear(n)' is deprecated.  Replacing with 'obj[n].clear'"
        elements[index].clear
      end
    end

    alias_method :orig__do_num_bytes, :_do_num_bytes
    def _do_num_bytes(index) #:nodoc:
      if index.nil?
        orig__do_num_bytes(nil)
      elsif index < elements.length
        warn "'obj.num_bytes(n)' is deprecated.  Replacing with 'obj[n].num_bytes'"
        elements[index].do_num_bytes
      else
        0
      end
    end

    def append(value = nil) #:nodoc:
      warn "#append is deprecated, use push or slice instead"
      if value.nil?
        slice(length)
      else
        push(value)
      end
      self.last
    end
  end

  class String < BinData::BasePrimitive
    class << self
      def deprecate!(params, old_key, new_key) #:nodoc:
        if params.has_parameter?(old_key)
          warn ":#{old_key} is deprecated. Replacing with :#{new_key}"
          params[new_key] = params.delete(old_key)
        end
      end

      alias_method :orig_sanitize_parameters!, :sanitize_parameters!
      def sanitize_parameters!(params, sanitizer) #:nodoc:
        deprecate!(params, :trim_value, :trim_padding)
        orig_sanitize_parameters!(params, sanitizer)
      end
    end
  end


  class Struct < BinData::Base
    class << self
      def inherited(subclass) #:nodoc:
        if subclass != Record
          fail "error: inheriting from BinData::Struct has been deprecated. Inherit from BinData::Record instead."
        end
      end
    end

    alias_method :orig_clear, :clear
    def clear(name = nil) #:nodoc:
      if name.nil?
        orig_clear
      else
        warn "'obj.clear(name)' is deprecated.  Replacing with 'obj.name.clear'"
        obj = find_obj_for_name(name)
        obj.clear unless obj.nil?
      end
    end

    alias_method :orig_clear?, :clear?
    def clear?(name = nil) #:nodoc:
      if name.nil?
        orig_clear?
      else
        warn "'obj.clear?(name)' is deprecated.  Replacing with 'obj.name.clear?'"
        obj = find_obj_for_name(name)
        obj.nil? ? true : obj.clear?
      end
    end

    alias_method :orig__do_num_bytes, :_do_num_bytes
    def _do_num_bytes(name) #:nodoc:
      if name.nil?
        orig__do_num_bytes(nil)
      else
        warn "'obj.num_bytes(name)' is deprecated.  Replacing with 'obj.name.num_bytes'"
        obj = find_obj_for_name(name)
        obj.nil? ? 0 : obj.do_num_bytes
      end
    end

    alias_method :orig_offset_of, :offset_of
    def offset_of(child)
      if child.class == ::String
        fail "error: 'offset_of(\"fieldname\")' is deprecated.  Use 'fieldname.offset' instead"
      end
      orig_offset_of(child)
    end
  end
end