nokolexbor 0.3.1-x86_64-darwin → 0.3.3-x86_64-darwin
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/nokolexbor/2.6/nokolexbor.bundle +0 -0
- data/lib/nokolexbor/2.7/nokolexbor.bundle +0 -0
- data/lib/nokolexbor/3.0/nokolexbor.bundle +0 -0
- data/lib/nokolexbor/3.1/nokolexbor.bundle +0 -0
- data/lib/nokolexbor/document.rb +4 -0
- data/lib/nokolexbor/document_fragment.rb +31 -0
- data/lib/nokolexbor/node.rb +49 -1
- data/lib/nokolexbor/node_set.rb +17 -0
- data/lib/nokolexbor/version.rb +1 -1
- data/lib/nokolexbor.rb +1 -0
- metadata +3 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: cead1d5973dbabeb2bac9e3e413d21e7dbe4e36e42e58fdf22ad110e02f3decf
         | 
| 4 | 
            +
              data.tar.gz: 443c22b64508e785863c7e552ead72cc00f71369b216f6ea38d2e29d10bb4f8a
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 82efd32a9058e2e3ee63e1215dddfa3bb24fbe11a81d50f795738d10406b0d09eed48d00e301aab44796124150e7cf3d6cfd11295d833f0edfda3b21a50a5bb5
         | 
| 7 | 
            +
              data.tar.gz: abce68297cb6cdfd144291d1ad40b8c1c5d16b512400890e5405eedf16976e3d8434a79838cab2690ebb54763f3770c996c1c4b5926b5196efb1ed25f3116524
         | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
    
        data/lib/nokolexbor/document.rb
    CHANGED
    
    
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Nokolexbor
         | 
| 4 | 
            +
              class DocumentFragment < Nokolexbor::Node
         | 
| 5 | 
            +
                def self.parse(tags)
         | 
| 6 | 
            +
                  new(Nokolexbor::Document.new, tags, nil)
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                def initialize(document, tags = nil, ctx = nil)
         | 
| 10 | 
            +
                  return self unless tags
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  ctx ||= document
         | 
| 13 | 
            +
                  node_set = ctx.parse(tags)
         | 
| 14 | 
            +
                  node_set.each { |child| child.parent = self } unless node_set.empty?
         | 
| 15 | 
            +
                  nil
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def name
         | 
| 19 | 
            +
                  "#document-fragment"
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                alias_method :outer_html, :inner_html
         | 
| 23 | 
            +
                alias_method :to_html, :outer_html
         | 
| 24 | 
            +
                alias_method :to_s, :outer_html
         | 
| 25 | 
            +
                alias_method :serialize, :outer_html
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                def fragment(data)
         | 
| 28 | 
            +
                  document.fragment(data)
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
            end
         | 
    
        data/lib/nokolexbor/node.rb
    CHANGED
    
    | @@ -182,6 +182,10 @@ module Nokolexbor | |
| 182 182 | 
             
                  end
         | 
| 183 183 | 
             
                end
         | 
| 184 184 |  | 
| 185 | 
            +
                def fragment(tags)
         | 
| 186 | 
            +
                  Nokolexbor::DocumentFragment.new(document, tags, self)
         | 
| 187 | 
            +
                end
         | 
| 188 | 
            +
             | 
| 185 189 | 
             
                alias_method :inner_html=, :children=
         | 
| 186 190 |  | 
| 187 191 | 
             
                def css(*args)
         | 
| @@ -192,6 +196,16 @@ module Nokolexbor | |
| 192 196 | 
             
                  at_css_impl(args.join(', '))
         | 
| 193 197 | 
             
                end
         | 
| 194 198 |  | 
| 199 | 
            +
                def nokogiri_css(*args)
         | 
| 200 | 
            +
                  rules, handler, ns, _ = extract_params(args)
         | 
| 201 | 
            +
             | 
| 202 | 
            +
                  nokogiri_css_internal(self, rules, handler, ns)
         | 
| 203 | 
            +
                end
         | 
| 204 | 
            +
             | 
| 205 | 
            +
                def nokogiri_at_css(*args)
         | 
| 206 | 
            +
                  nokogiri_css(*args).first
         | 
| 207 | 
            +
                end
         | 
| 208 | 
            +
             | 
| 195 209 | 
             
                def xpath(*args)
         | 
| 196 210 | 
             
                  paths, handler, ns, binds = extract_params(args)
         | 
| 197 211 |  | 
| @@ -299,6 +313,10 @@ module Nokolexbor | |
| 299 313 |  | 
| 300 314 | 
             
                private
         | 
| 301 315 |  | 
| 316 | 
            +
                def nokogiri_css_internal(node, rules, handler, ns)
         | 
| 317 | 
            +
                  xpath_internal(node, css_rules_to_xpath(rules, ns), handler, ns, nil)
         | 
| 318 | 
            +
                end
         | 
| 319 | 
            +
             | 
| 302 320 | 
             
                def xpath_internal(node, paths, handler, ns, binds)
         | 
| 303 321 | 
             
                  # document = node.document
         | 
| 304 322 | 
             
                  # return NodeSet.new(document) unless document
         | 
| @@ -326,6 +344,34 @@ module Nokolexbor | |
| 326 344 | 
             
                  ctx.evaluate(path, handler)
         | 
| 327 345 | 
             
                end
         | 
| 328 346 |  | 
| 347 | 
            +
                def css_rules_to_xpath(rules, ns)
         | 
| 348 | 
            +
                  rules.map { |rule| xpath_query_from_css_rule(rule, ns) }
         | 
| 349 | 
            +
                end
         | 
| 350 | 
            +
             | 
| 351 | 
            +
                def ensure_nokogiri
         | 
| 352 | 
            +
                  unless defined?(Nokogiri) && defined?(Nokogiri::CSS)
         | 
| 353 | 
            +
                    require 'nokogiri'
         | 
| 354 | 
            +
                  end
         | 
| 355 | 
            +
                rescue LoadError
         | 
| 356 | 
            +
                  fail('nokogiri_css and nokogiri_at_css require Nokogiri to be installed')
         | 
| 357 | 
            +
                end
         | 
| 358 | 
            +
             | 
| 359 | 
            +
                def xpath_query_from_css_rule(rule, ns)
         | 
| 360 | 
            +
                  ensure_nokogiri
         | 
| 361 | 
            +
                  if defined? Nokogiri::CSS::XPathVisitor::BuiltinsConfig
         | 
| 362 | 
            +
                    visitor = Nokogiri::CSS::XPathVisitor.new(
         | 
| 363 | 
            +
                      builtins: Nokogiri::CSS::XPathVisitor::BuiltinsConfig::OPTIMAL,
         | 
| 364 | 
            +
                      doctype: :html4,
         | 
| 365 | 
            +
                    )
         | 
| 366 | 
            +
                  else
         | 
| 367 | 
            +
                    visitor = Nokogiri::CSS::XPathVisitorOptimallyUseBuiltins.new
         | 
| 368 | 
            +
                  end
         | 
| 369 | 
            +
                  self.class::IMPLIED_XPATH_CONTEXTS.map do |implied_xpath_context|
         | 
| 370 | 
            +
                    Nokogiri::CSS.xpath_for(rule.to_s, { prefix: implied_xpath_context, ns: ns,
         | 
| 371 | 
            +
                                               visitor: visitor, })
         | 
| 372 | 
            +
                  end.join(" | ")
         | 
| 373 | 
            +
                end
         | 
| 374 | 
            +
             | 
| 329 375 | 
             
                def extract_params(params)
         | 
| 330 376 | 
             
                  handler = params.find do |param|
         | 
| 331 377 | 
             
                    ![Hash, String, Symbol].include?(param.class)
         | 
| @@ -344,5 +390,7 @@ module Nokolexbor | |
| 344 390 |  | 
| 345 391 | 
             
                  [params, handler, ns, binds]
         | 
| 346 392 | 
             
                end
         | 
| 393 | 
            +
             | 
| 394 | 
            +
                IMPLIED_XPATH_CONTEXTS = [".//"].freeze
         | 
| 347 395 | 
             
              end
         | 
| 348 | 
            -
            end
         | 
| 396 | 
            +
            end
         | 
    
        data/lib/nokolexbor/node_set.rb
    CHANGED
    
    | @@ -126,6 +126,23 @@ module Nokolexbor | |
| 126 126 | 
             
                    end
         | 
| 127 127 | 
             
                  end
         | 
| 128 128 | 
             
                end
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                def nokogiri_css(*args)
         | 
| 131 | 
            +
                  rules, handler, ns, _ = extract_params(args)
         | 
| 132 | 
            +
                  paths = css_rules_to_xpath(rules, ns)
         | 
| 133 | 
            +
             | 
| 134 | 
            +
                  NodeSet.new(@document) do |set|
         | 
| 135 | 
            +
                    each do |node|
         | 
| 136 | 
            +
                      node.send(:xpath_internal, node, paths, handler, ns, nil).each do |inner_node|
         | 
| 137 | 
            +
                        set << inner_node
         | 
| 138 | 
            +
                      end
         | 
| 139 | 
            +
                    end
         | 
| 140 | 
            +
                  end
         | 
| 141 | 
            +
                end
         | 
| 142 | 
            +
             | 
| 143 | 
            +
                private
         | 
| 144 | 
            +
             | 
| 145 | 
            +
                IMPLIED_XPATH_CONTEXTS = [".//", "self::"].freeze # :nodoc:
         | 
| 129 146 |  | 
| 130 147 | 
             
              end
         | 
| 131 148 | 
             
            end
         | 
    
        data/lib/nokolexbor/version.rb
    CHANGED
    
    
    
        data/lib/nokolexbor.rb
    CHANGED
    
    | @@ -25,6 +25,7 @@ require 'nokolexbor/version' | |
| 25 25 | 
             
            require 'nokolexbor/node'
         | 
| 26 26 | 
             
            require 'nokolexbor/document'
         | 
| 27 27 | 
             
            require 'nokolexbor/node_set'
         | 
| 28 | 
            +
            require 'nokolexbor/document_fragment'
         | 
| 28 29 | 
             
            require 'nokolexbor/attribute'
         | 
| 29 30 | 
             
            require 'nokolexbor/xpath'
         | 
| 30 31 | 
             
            require 'nokolexbor/xpath_context'
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: nokolexbor
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.3. | 
| 4 | 
            +
              version: 0.3.3
         | 
| 5 5 | 
             
            platform: x86_64-darwin
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Yicheng Zhou
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2023-01-09 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rake-compiler
         | 
| @@ -52,6 +52,7 @@ files: | |
| 52 52 | 
             
            - lib/nokolexbor/3.1/nokolexbor.bundle
         | 
| 53 53 | 
             
            - lib/nokolexbor/attribute.rb
         | 
| 54 54 | 
             
            - lib/nokolexbor/document.rb
         | 
| 55 | 
            +
            - lib/nokolexbor/document_fragment.rb
         | 
| 55 56 | 
             
            - lib/nokolexbor/node.rb
         | 
| 56 57 | 
             
            - lib/nokolexbor/node_set.rb
         | 
| 57 58 | 
             
            - lib/nokolexbor/version.rb
         |