Sha256: 263e114ead58033b1cf08496aceff4fc64dd02b4489d05b400279b2bfd144858

Contents?: true

Size: 1.26 KB

Versions: 7

Compression:

Stored size: 1.26 KB

Contents

module BERT
  class Encoder
    # Encode a Ruby object into a BERT.
    #   +ruby+ is the Ruby object
    #
    # Returns a BERT
    def self.encode(ruby)
      complex_ruby = convert(ruby)
      Encode.encode(complex_ruby)
    end

    # Convert complex Ruby form in simple Ruby form.
    #   +item+ is the Ruby object to convert
    #
    # Returns the converted Ruby object
    def self.convert(item)
      case item
        when Hash
          pairs = []
          item.each_pair { |k, v| pairs << t[convert(k), convert(v)] }
          t[:bert, :dict, pairs]
        when Tuple
          Tuple.new(item.map { |x| convert(x) })
        when Array
          item.map { |x| convert(x) }
        when nil
          t[:bert, :nil]
        when TrueClass
          t[:bert, :true]
        when FalseClass
          t[:bert, :false]
        when Time
          t[:bert, :time, item.to_i / 1_000_000, item.to_i % 1_000_000, item.usec]
        when Regexp
          options = []
          options << :caseless if item.options & Regexp::IGNORECASE > 0
          options << :extended if item.options & Regexp::EXTENDED > 0
          options << :multiline if item.options & Regexp::MULTILINE > 0
          t[:bert, :regex, item.source, options]
        else
          item
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 3 rubygems

Version Path
bert-1.1.6 lib/bert/encoder.rb
schmurfy-bert-1.2.3 lib/bert/encoder.rb
bert-1.1.2-java lib/bert/encoder.rb
schleyfox-bert-1.1.2 lib/bert/encoder.rb
bert-1.1.2 lib/bert/encoder.rb
bert-1.1.1 lib/bert/encoder.rb
bert-1.1.0 lib/bert/encoder.rb