Sha256: b36f249a6f045581b3f955ea7a250e0308aaccbb5cab8e3fe631e4f694ce7287

Contents?: true

Size: 1.59 KB

Versions: 11

Compression:

Stored size: 1.59 KB

Contents

module Flexite
  class Diff
    class SyncCheckService
      def initialize(other_tree, token, stage, checksum)
        @other_tree = other_tree
        @current_tree = Config.t_nodes
        @token = Token.new(token)
        @stage = stage
        @checksum = checksum
        @diffs = {
          '+': [],
          '-': [],
          '~': []
        }
      end

      def call
        check
      end

      protected

      def check
        if @token.invalid?
          return { error: 'Invalid token', code: 401 }
        end
        diff = HashDiff.diff(@current_tree, @other_tree, array_path: true, use_lcs: false)

        if diff.blank?
          return {}
        end

        diff.each do |type, depth, *change|
          @diffs[type.to_sym] << [get_depth(type, depth), depth, *change]
        end

        Flexite.cache.write("#{Flexite.state_digest}-#{@checksum}-#{@stage}-diffs", @diffs)
        { diffs: @diffs }
      rescue => exc
        { error: exc.message, code: 500 }
      end

      private

      def get_depth(type, depth)
        tree = get_tree(type)
        view_depth = depth.size.times.with_object([]) do |i, memo|
          sliced_depth = depth.slice(0..depth.size - 1 - i)

          case (next_node = tree.dig(*sliced_depth))
            when ::Hash
              memo << (next_node['name'] || next_node['type'])
          end
        end

        view_depth.reverse.join(Flexite.config.diff_depth_separator)
      end

      def get_tree(type)
        case type.to_sym
          when :-
            @current_tree
          else
            @other_tree
        end
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
flexite-0.0.18 app/services/flexite/diff/sync_check_service.rb
flexite-0.0.17 app/services/flexite/diff/sync_check_service.rb
flexite-0.0.16 app/services/flexite/diff/sync_check_service.rb
flexite-0.0.15 app/services/flexite/diff/sync_check_service.rb
flexite-0.0.14 app/services/flexite/diff/sync_check_service.rb
flexite-0.0.13 app/services/flexite/diff/sync_check_service.rb
flexite-0.0.12 app/services/flexite/diff/sync_check_service.rb
flexite-0.0.11 app/services/flexite/diff/sync_check_service.rb
flexite-0.0.10 app/services/flexite/diff/sync_check_service.rb
flexite-0.0.9 app/services/flexite/diff/sync_check_service.rb
flexite-0.0.8 app/services/flexite/diff/sync_check_service.rb