Sha256: 3ed875d4184e7457f1cd278cac9c5d706e7e93d280529254231d1fdea7725f59

Contents?: true

Size: 1.49 KB

Versions: 28

Compression:

Stored size: 1.49 KB

Contents

module Deface
  module Matchers
    class Range
      def initialize(name, selector, end_selector)
        @name = name
        @selector = selector
        @end_selector = end_selector
      end

      def matches(document, log=true)
        starting, ending = select_endpoints(document, @selector, @end_selector)

        if starting && ending
          if log
            Rails.logger.info("\e[1;32mDeface:\e[0m '#{@name}' matched starting with '#{@selector}' and ending with '#{@end_selector}'")
          end

          return [select_range(starting, ending)]
        else
          if starting.nil?
            Rails.logger.info("\e[1;32mDeface:\e[0m '#{@name}' failed to match with starting selector '#{@selector}'")
          else
            Rails.logger.info("\e[1;32mDeface:\e[0m '#{@name}' failed to match with end selector '#{@end_selector}'")
          end
          return []
        end
      end

      def select_endpoints(doc, start, finish)
        # targeting range of elements as end_selector is present
        #
        finish = "#{start} ~ #{finish}"
        starting    = doc.css(start).first

        ending = if starting && starting.parent
          starting.parent.css(finish).first
        else
          doc.css(finish).first
        end

        return starting, ending

      end

      # finds all elements upto closing sibling in nokgiri document
      #
      def select_range(first, last)
        first == last ? [first] : [first, *select_range(first.next, last)]
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 2 rubygems

Version Path
deface-1.9.0 lib/deface/matchers/range.rb
deface-1.8.2 lib/deface/matchers/range.rb
deface-1.8.1 lib/deface/matchers/range.rb
deface-1.8.0 lib/deface/matchers/range.rb
deface-1.7.0 lib/deface/matchers/range.rb
deface-1.6.2 lib/deface/matchers/range.rb
deface-1.6.1 lib/deface/matchers/range.rb
deface-1.6.0 lib/deface/matchers/range.rb
deface-1.5.3 lib/deface/matchers/range.rb
deface-1.5.2 lib/deface/matchers/range.rb
deface-1.5.1 lib/deface/matchers/range.rb
deface-1.5.0 lib/deface/matchers/range.rb
deface-1.4.0 lib/deface/matchers/range.rb
deface-1.3.2 lib/deface/matchers/range.rb
deface-1.3.1 lib/deface/matchers/range.rb
deface-1.3.0 lib/deface/matchers/range.rb
deface-1.2.0 lib/deface/matchers/range.rb
deface-1.1.0 lib/deface/matchers/range.rb
deface-1.0.2 lib/deface/matchers/range.rb
solidus_backend-1.0.0.pre3 vendor/bundle/gems/deface-1.0.1/lib/deface/matchers/range.rb