Sha256: 044243ddf3c630da6c16d1c807b99afae38de0f449f704b42db77d664798b208

Contents?: true

Size: 1.17 KB

Versions: 22

Compression:

Stored size: 1.17 KB

Contents

module Pacer
  module Routes
    module RouteOperations
      def uniq_in_section(section = nil)
        chain_route filter: Pacer::Filter::UniqueSectionFilter, section: section
      end
    end
  end

  module Filter
    module UniqueSectionFilter
      # VisitsSection module provides:
      #  section=
      #  section_visitor
      include Pacer::Visitors::VisitsSection

      def attach_pipe(end_pipe)
        pipe = UniqueSectionPipe.new(self, section_visitor)
        pipe.setStarts end_pipe if end_pipe
        pipe
      end

      class UniqueSectionPipe < Pacer::Pipes::RubyPipe
        attr_reader :seen, :section, :route


        def initialize(route, section)
          super()
          @seen = Set[]
          @section = section
          @route = route
          section.visitor = self if section
        end

        def processNextStart
          while true
            element = starts.next
            unless seen.include? element
              seen << element
              return element
            end
          end
        end

        def after_element
          seen.clear
        end

        def reset
          seen.clear
        end
      end
    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
pacer-2.0.24-java lib/pacer/filter/uniq_section.rb
pacer-2.0.22-java lib/pacer/filter/uniq_section.rb
pacer-2.0.20-java lib/pacer/filter/uniq_section.rb
pacer-2.0.19-java lib/pacer/filter/uniq_section.rb
pacer-2.0.18-java lib/pacer/filter/uniq_section.rb
pacer-2.0.17-java lib/pacer/filter/uniq_section.rb
pacer-2.0.16-java lib/pacer/filter/uniq_section.rb
pacer-2.0.15-java lib/pacer/filter/uniq_section.rb
pacer-2.0.14-java lib/pacer/filter/uniq_section.rb
pacer-2.0.13-java lib/pacer/filter/uniq_section.rb
pacer-2.0.12-java lib/pacer/filter/uniq_section.rb
pacer-2.0.10-java lib/pacer/filter/uniq_section.rb
pacer-2.0.10.pre-java lib/pacer/filter/uniq_section.rb
pacer-2.0.8-java lib/pacer/filter/uniq_section.rb
pacer-2.0.6-java lib/pacer/filter/uniq_section.rb
pacer-2.0.4.pre-java lib/pacer/filter/uniq_section.rb
pacer-2.0.0.pre-java lib/pacer/filter/uniq_section.rb
pacer-1.6.0-java lib/pacer/filter/uniq_section.rb
pacer-1.5.4-java lib/pacer/filter/uniq_section.rb
pacer-1.5.3-java lib/pacer/filter/uniq_section.rb