diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6cb531d..9eaddce 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,18 +15,18 @@ jobs: runs-on: ubuntu-latest env: CI: true + ALLOW_FAILURES: ${{ endsWith(matrix.ruby, 'head') || matrix.ruby == 'jruby' }} BUNDLE_GEMFILE: "${{ matrix.gemfile }}" strategy: fail-fast: false matrix: ruby: - - 2.4 - - 2.5 - 2.6 - 2.7 - 3.0 - - ruby-head # Until net-http-persistent updated - #- jruby # No Nokogumbo on JRuby + - 3.1 + - ruby-head + - jruby gemfile: - Gemfile - Gemfile-pure @@ -40,5 +40,9 @@ jobs: - name: Install dependencies run: bundle install --jobs 4 --retry 3 - name: Run tests - run: bundle exec rspec spec - + run: ruby --version; bundle exec rspec spec || $ALLOW_FAILURES + - name: Coveralls GitHub Action + uses: coverallsapp/github-action@v1.1.2 + if: ${{ matrix.ruby == '3.0' && matrix.gemfile == 'Gemfile' }} + with: + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index a9004fb..0000000 --- a/.travis.yml +++ /dev/null @@ -1,21 +0,0 @@ -language: ruby -script: "bundle exec rspec spec" -env: - - CI=true -gemfile: - - Gemfile - - Gemfile-pure -rvm: - - 2.4 - - 2.5 - - 2.6 - - 2.7 - - ruby-head - - jruby -cache: bundler -sudo: false -matrix: - allow_failures: - - rvm: jruby - - rvm: ruby-head -dist: trusty diff --git a/Gemfile b/Gemfile index 8de2085..d90521f 100644 --- a/Gemfile +++ b/Gemfile @@ -5,9 +5,8 @@ gemspec gem "rdf", github: "ruby-rdf/rdf", branch: "develop" gem "rdf-spec", github: "ruby-rdf/rdf-spec", branch: "develop" gem "rdf-xsd", github: "ruby-rdf/rdf-xsd", branch: "develop" -gem "nokogiri", '~> 1.10', platforms: [:mri, :jruby] -gem "nokogumbo", '~> 2.0', platforms: :mri -gem 'equivalent-xml', '~> 0.5' +gem "nokogiri", '~> 1.12', platforms: [:mri, :jruby] +gem 'equivalent-xml', '~> 0.6' group :development, :test do gem 'ebnf', github: "dryruby/ebnf", branch: "develop" @@ -25,8 +24,8 @@ group :development, :test do end group :test do - gem 'simplecov', '~> 0.16', platforms: :mri - gem 'coveralls', '~> 0.8', platforms: :mri + gem 'simplecov', '~> 0.21', platforms: :mri + gem 'simplecov-lcov', '~> 0.8', platforms: :mri end group :debug do diff --git a/README.md b/README.md index 0b8c813..6d918ef 100755 --- a/README.md +++ b/README.md @@ -16,15 +16,15 @@ RDF::RDFa parses [RDFa][RDFa 1.1 Core] into statements or triples. * Fully compliant RDFa 1.1 parser. * Template-based Writer to generate XHTML+RDFa. * Writer uses user-replaceable [Haml][Haml] -based templates to generate RDFa. -* If available, uses [Nokogiri][] for parsing HTML/SVG, falls back to REXML otherwise. For HTML5, include the [Nokogumbo][] gem for a pure-HTML5 parser with better error detection. +* If available, uses [Nokogiri][] for parsing HTML/SVG, falls back to REXML otherwise. Install with `gem install rdf-rdfa` ### Pure Ruby -In order to run as pure ruby (not requiring any C modules), this gem does not directly depend on [Nokogiri][] or [Nokogumbo][] -and falls back to using REXML. [Nokogumbo][] uses the [Gumbo pure-C HTML5 parser](https://github.com/google/gumbo-parser#readme). +In order to run as pure ruby (not requiring any C modules), this gem does not directly depend on [Nokogiri][] +and falls back to using REXML. As REXML is not really an HTML parsing library, the results will only be useful if the HTML is well-formed. -For best performance, install the [Nokogiri][] and [Nokogumbo][] gems as well. +For best performance, install the [Nokogiri][] gem as well. ### Important changes from previous versions RDFa is an evolving standard, undergoing some substantial recent changes partly due to perceived competition @@ -191,7 +191,7 @@ generates the following turtle: dc:description "A yellow rectangle with sharp corners." . ### Support for embedded N-Triples or Turtle -If the document includes a `<script>` element having an `@type` attribute whose value matches that of a loaded RDF reader (text/ntriples and text/turtle are loaded if they are availble), the data will be extracted and added to the default graph. For example: +If the document includes a `<script>` element having an `@type` attribute whose value matches that of a loaded RDF reader (text/ntriples and text/turtle are loaded if they are available), the data will be extracted and added to the default graph. For example: @@ -397,12 +397,11 @@ The template hash defines four Haml templates: } ## Dependencies -* [Ruby](https://ruby-lang.org/) (>= 2.4) -* [RDF.rb](https://rubygems.org/gems/rdf) (~> 3.1) -* [Haml](https://rubygems.org/gems/haml) (~> 5.1) -* [HTMLEntities](https://rubygems.org/gems/htmlentities) (>= 4.3) -* Soft dependency on [Nokogiri](https://rubygems.org/gems/nokogiri) (>= 1.10) -* Soft dependency on [Nokogumbo](https://github.com/rubys/nokogumbo) (>= 2.0) +* [Ruby](https://ruby-lang.org/) (>= 2.6) +* [RDF.rb](https://rubygems.org/gems/rdf) (~> 3.2) +* [Haml](https://rubygems.org/gems/haml) (~> 5.2) +* [HTMLEntities](https://rubygems.org/gems/htmlentities) (~> 4.3) +* Soft dependency on [Nokogiri](https://rubygems.org/gems/nokogiri) (~> 1.12) ## Documentation Full documentation available on [Rubydoc.info][RDFa doc] @@ -478,4 +477,3 @@ see or the accompanying [UNLICENSE](UNLICENSE) file. [Haml]: https://haml-lang.com/ [Turtle]: https://www.w3.org/TR/2011/WD-turtle-20110809/ [Nokogiri]: https://www.nokogiri.org -[Nokogumbo]: https://github.com/rubys/nokogumbo/#readme \ No newline at end of file diff --git a/VERSION b/VERSION index ff365e0..944880f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.1.3 +3.2.0 diff --git a/lib/rdf/rdfa/reader.rb b/lib/rdf/rdfa/reader.rb index febe8b0..5020e3f 100644 --- a/lib/rdf/rdfa/reader.rb +++ b/lib/rdf/rdfa/reader.rb @@ -329,19 +329,7 @@ def initialize(input = $stdin, **options, &block) detect_host_language_version(input, **options) - parse_lib = if @library == :nokogiri && @host_language == :html5 - begin - require 'nokogumbo' unless defined?(::Nokogumbo) - :nokobumbo - rescue LoadError - :nokogiri - end - else - @library - end - - parse_lib = @library == :nokogiri && defined?(::Nokogumbo) ? :nokogumbo : @library - add_info(@doc, "version = #{@version}, host_language = #{@host_language}, library = #{parse_lib}, rdfagraph = #{@options[:rdfagraph].inspect}, expand = #{@options[:vocab_expansion]}") + add_info(@doc, "version = #{@version}, host_language = #{@host_language}, library = #{@library}, rdfagraph = #{@options[:rdfagraph].inspect}, expand = #{@options[:vocab_expansion]}") begin initialize_xml(input, **options) diff --git a/lib/rdf/rdfa/reader/nokogiri.rb b/lib/rdf/rdfa/reader/nokogiri.rb index 353a8a8..97d31d7 100644 --- a/lib/rdf/rdfa/reader/nokogiri.rb +++ b/lib/rdf/rdfa/reader/nokogiri.rb @@ -176,10 +176,9 @@ def initialize_xml(input, **options) ::Nokogiri::HTML.parse(input, base_uri.to_s, options[:encoding]) when :html5 begin - require 'nokogumbo' unless defined?(::Nokogumbo) input = input.read if input.respond_to?(:read) ::Nokogiri::HTML5(input.force_encoding(options[:encoding]), max_parse_errors: 1000) - rescue LoadError + rescue LoadError, NoMethodError ::Nokogiri::HTML.parse(input, base_uri.to_s, options[:encoding]) end else @@ -283,8 +282,6 @@ def root ## # Document errors def doc_errors - # FIXME: Nokogiri version 1.5 thinks many HTML5 elements are invalid, so just ignore all Tag errors. - # Nokogumbo might make this simpler if @host_language == :html5 @doc.errors.reject do |e| e.to_s =~ %r{(The doctype must be the first token in the document)|(Expected a doctype token)|(Unexpected '\?' where start tag name is expected)} diff --git a/rdf-rdfa.gemspec b/rdf-rdfa.gemspec index 88e7e91..3eadc19 100755 --- a/rdf-rdfa.gemspec +++ b/rdf-rdfa.gemspec @@ -18,25 +18,25 @@ Gem::Specification.new do |gem| gem.files = %w(AUTHORS README.md UNLICENSE VERSION) + Dir.glob('lib/**/*.rb') gem.require_paths = %w(lib) - gem.required_ruby_version = '>= 2.4' + gem.required_ruby_version = '>= 2.6' gem.requirements = [] - gem.add_runtime_dependency 'rdf', '~> 3.1', '>= 3.1.13' - gem.add_runtime_dependency 'rdf-vocab', '~> 3.1', '>= 3.1.11' + gem.add_runtime_dependency 'rdf', '~> 3.2' + gem.add_runtime_dependency 'rdf-vocab', '~> 3.2' gem.add_runtime_dependency 'haml', '~> 5.2' - gem.add_runtime_dependency 'rdf-xsd', '~> 3.1' - gem.add_runtime_dependency 'rdf-aggregate-repo', '~> 3.1' + gem.add_runtime_dependency 'rdf-xsd', '~> 3.2' + gem.add_runtime_dependency 'rdf-aggregate-repo', '~> 3.2' gem.add_runtime_dependency 'htmlentities', '~> 4.3' - gem.add_development_dependency 'json-ld', '~> 3.1' + gem.add_development_dependency 'json-ld', '~> 3.2' gem.add_development_dependency 'rspec', '~> 3.10' gem.add_development_dependency 'rspec-its', '~> 1.3' - gem.add_development_dependency 'rdf-spec', '~> 3.1' - gem.add_development_dependency 'rdf-turtle', '~> 3.1' - gem.add_development_dependency 'rdf-isomorphic', '~> 3.1' - gem.add_development_dependency 'rdf-tabular', '~> 3.1' - gem.add_development_dependency 'rdf-rdfxml', '~> 3.1' - gem.add_development_dependency 'sparql', '~> 3.1' + gem.add_development_dependency 'rdf-spec', '~> 3.2' + gem.add_development_dependency 'rdf-turtle', '~> 3.2' + gem.add_development_dependency 'rdf-isomorphic', '~> 3.2' + gem.add_development_dependency 'rdf-tabular', '~> 3.2' + gem.add_development_dependency 'rdf-rdfxml', '~> 3.2' + gem.add_development_dependency 'sparql', '~> 3.2' gem.add_development_dependency 'yard' , '~> 0.9' gem.post_install_message = nil diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 04a5922..030d93a 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -17,10 +17,16 @@ end begin require 'simplecov' - require 'coveralls' + require 'simplecov-lcov' + SimpleCov::Formatter::LcovFormatter.config do |config| + #Coveralls is coverage by default/lcov. Send info results + config.report_with_single_file = true + config.single_report_path = 'coverage/lcov.info' + end + SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([ SimpleCov::Formatter::HTMLFormatter, - Coveralls::SimpleCov::Formatter + SimpleCov::Formatter::LcovFormatter ]) SimpleCov.start do add_filter "/spec/"