Sha256: 8469e2007350a44ba420ac5333b595688459756e19153921b8e1b4070548f960

Contents?: true

Size: 1.27 KB

Versions: 3

Compression:

Stored size: 1.27 KB

Contents

module Eternity
  class TrackFlatter
    class << self

      def flatten(changes)
        send "flatten_#{changes.first['action']}_#{changes.last['action']}", changes
      end

      private

      def flatten_insert_insert(changes)
        expand changes.last
      end

      def flatten_insert_update(changes)
        {'action' => INSERT, 'data' => expand(changes.last)['data']}
      end

      def flatten_insert_delete(changes)
        nil
      end

      def flatten_update_insert(changes)
        {'action' => UPDATE, 'data' => expand(changes.last)['data']}
      end

      def flatten_update_update(changes)
        expand changes.last
      end

      def flatten_update_delete(changes)
        expand changes.last
      end

      def flatten_delete_insert(changes)
        {'action' => UPDATE, 'data' => expand(changes.last)['data']}
      end

      def flatten_delete_update(changes)
        {'action' => UPDATE, 'data' => expand(changes.last)['data']}
      end

      def flatten_delete_delete(changes)
        expand changes.last
      end

      def expand(change)
        return change.dup if change.key? 'data'
        change.dup.tap do |ch|
          sha1 = ch.delete 'blob'
          ch['data'] = Blob.read(:data, sha1) if sha1
        end
      end
   
    end 
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
eternity-4.0.0 lib/eternity/track_flatter.rb
eternity-3.0.1 lib/eternity/track_flatter.rb
eternity-3.0.0 lib/eternity/track_flatter.rb