Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package rubygem-mustermann for openSUSE:Factory checked in at 2022-08-09 15:26:42 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rubygem-mustermann (Old) and /work/SRC/openSUSE:Factory/.rubygem-mustermann.new.1521 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-mustermann" Tue Aug 9 15:26:42 2022 rev:6 rq:993499 version:3.0.0 Changes: -------- --- /work/SRC/openSUSE:Factory/rubygem-mustermann/rubygem-mustermann.changes 2020-03-24 22:34:45.977160091 +0100 +++ /work/SRC/openSUSE:Factory/.rubygem-mustermann.new.1521/rubygem-mustermann.changes 2022-08-09 15:26:57.905387355 +0200 @@ -1,0 +2,6 @@ +Thu Aug 4 13:19:34 UTC 2022 - Stephan Kulow <[email protected]> + +updated to version 3.0.0 + no changelog found + +------------------------------------------------------------------- Old: ---- mustermann-1.1.1.gem New: ---- mustermann-3.0.0.gem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rubygem-mustermann.spec ++++++ --- /var/tmp/diff_new_pack.PisFx1/_old 2022-08-09 15:26:58.445388898 +0200 +++ /var/tmp/diff_new_pack.PisFx1/_new 2022-08-09 15:26:58.449388910 +0200 @@ -1,7 +1,7 @@ # # spec file for package rubygem-mustermann # -# Copyright (c) 2020 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -24,12 +24,12 @@ # Name: rubygem-mustermann -Version: 1.1.1 +Version: 3.0.0 Release: 0 %define mod_name mustermann %define mod_full_name %{mod_name}-%{version} BuildRoot: %{_tmppath}/%{name}-%{version}-build -BuildRequires: %{ruby >= 2.2.0} +BuildRequires: %{ruby >= 2.6.0} BuildRequires: %{rubygem gem2rpm} BuildRequires: ruby-macros >= 5 URL: https://github.com/sinatra/mustermann ++++++ mustermann-1.1.1.gem -> mustermann-3.0.0.gem ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/README.md new/README.md --- old/README.md 2020-01-03 16:27:30.000000000 +0100 +++ new/README.md 2022-07-25 00:01:46.000000000 +0200 @@ -377,30 +377,7 @@ <a name="-sinatra-integration"></a> ## Sinatra Integration -All patterns implement `match`, which means they can be dropped into Sinatra and other Rack routers: - -``` ruby -require 'sinatra' -require 'mustermann' - -get Mustermann.new('/:foo') do - params[:foo] -end -``` - -In fact, since using this with Sinatra is the main use case, it comes with a build-in extension for **Sinatra 1.x**. - -``` ruby -require 'sinatra' -require 'mustermann' - -register Mustermann - -# this will use Mustermann rather than the built-in pattern matching -get '/:slug(.ext)?' do - params[:slug] -end -``` +Mustermann is used in Sinatra by default since version 2.0, for previous versions an [extension](https://github.com/sinatra/mustermann-sinatra-extension) is available. ### Configuration Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/mustermann/ast/expander.rb new/lib/mustermann/ast/expander.rb --- old/lib/mustermann/ast/expander.rb 2020-01-03 16:27:30.000000000 +0100 +++ new/lib/mustermann/ast/expander.rb 2022-07-25 00:01:46.000000000 +0200 @@ -12,11 +12,11 @@ class Expander < Translator raises ExpandError - translate Array do |*args| + translate(Array, &-> (*args) do inject(t.pattern) do |pattern, element| t.add_to(pattern, t(element, *args)) end - end + end.ruby2_keywords) translate :capture do |**options| t.for_capture(node, **options) @@ -124,6 +124,8 @@ # @see Mustermann::AST::Translator#expand # @!visibility private ruby2_keywords def escape(string, *args) + return super unless string.respond_to?(:=~) + # URI::Parser is pretty slow, let's not send every string to it, even if it's unnecessary string =~ /\A\w*\Z/ ? string : super end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/mustermann/ast/node.rb new/lib/mustermann/ast/node.rb --- old/lib/mustermann/ast/node.rb 2020-01-03 16:27:30.000000000 +0100 +++ new/lib/mustermann/ast/node.rb 2022-07-25 00:01:46.000000000 +0200 @@ -35,8 +35,8 @@ # Helper for creating a new instance and calling #parse on it. # @return [Mustermann::AST::Node] # @!visibility private - def self.parse(*args, &block) - new(*args).tap { |n| n.parse(&block) } + def self.parse(payload = nil, **options, &block) + new(payload, **options).tap { |n| n.parse(&block) } end # @!visibility private @@ -108,7 +108,7 @@ # @see Mustermann::AST::Node#parse # @!visibility private def parse - self.payload ||= "" + self.payload ||= String.new super end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/mustermann/ast/translator.rb new/lib/mustermann/ast/translator.rb --- old/lib/mustermann/ast/translator.rb 2020-01-03 16:27:30.000000000 +0100 +++ new/lib/mustermann/ast/translator.rb 2022-07-25 00:01:46.000000000 +0200 @@ -120,7 +120,7 @@ # @!visibility private def escape(char, parser: URI::DEFAULT_PARSER, escape: parser.regexp[:UNSAFE], also_escape: nil) escape = Regexp.union(also_escape, escape) if also_escape - char =~ escape ? parser.escape(char, Regexp.union(*escape)) : char + char.to_s =~ escape ? parser.escape(char, Regexp.union(*escape)) : char end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/mustermann/extension.rb new/lib/mustermann/extension.rb --- old/lib/mustermann/extension.rb 2020-01-03 16:27:30.000000000 +0100 +++ new/lib/mustermann/extension.rb 2022-07-25 00:01:46.000000000 +0200 @@ -1,50 +1,3 @@ # frozen_string_literal: true -require 'sinatra/version' -fail "no need to load the Mustermann extension for #{::Sinatra::VERSION}" if ::Sinatra::VERSION >= '2.0.0' -require 'mustermann' - -module Mustermann - # Sinatra 1.x extension switching default pattern parsing over to Mustermann. - # - # @example With classic Sinatra application - # require 'sinatra' - # require 'mustermann' - # - # register Mustermann - # get('/:id', capture: /\d+/) { ... } - # - # @example With modular Sinatra application - # require 'sinatra/base' - # require 'mustermann' - # - # class MyApp < Sinatra::Base - # register Mustermann - # get('/:id', capture: /\d+/) { ... } - # end - # - # @see file:README.md#Sinatra_Integration "Sinatra Integration" in the README - module Extension - def compile!(verb, path, block, except: nil, capture: nil, pattern: { }, **options) - if path.respond_to? :to_str - pattern[:except] = except if except - pattern[:capture] = capture if capture - - if settings.respond_to? :pattern and settings.pattern? - pattern.merge! settings.pattern do |key, local, global| - next local unless local.is_a? Hash - next global.merge(local) if global.is_a? Hash - Hash.new(global).merge! local - end - end - - path = Mustermann.new(path, **pattern) - condition { params.merge! path.params(captures: Array(params[:captures]), offset: -1) } - end - - super(verb, path, block, options) - end - - private :compile! - end -end +fail "Mustermann extension for Sinatra has been extracted into its own gem. More information at https://github.com/sinatra/mustermann-sinatra-extension" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/mustermann/version.rb new/lib/mustermann/version.rb --- old/lib/mustermann/version.rb 2020-01-03 16:27:30.000000000 +0100 +++ new/lib/mustermann/version.rb 2022-07-25 00:01:46.000000000 +0200 @@ -1,4 +1,4 @@ # frozen_string_literal: true module Mustermann - VERSION ||= '1.1.1' + VERSION ||= '3.0.0' end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/mustermann.rb new/lib/mustermann.rb --- old/lib/mustermann.rb 2020-01-03 16:27:30.000000000 +0100 +++ new/lib/mustermann.rb 2022-07-25 00:01:46.000000000 +0200 @@ -75,8 +75,8 @@ end end - @mutex ||= Mutex.new - @types ||= {} + @mutex = Mutex.new + @types = {} # Maps a type to its factory. # @@ -120,7 +120,6 @@ def self.extend_object(object) return super unless defined? ::Sinatra::Base and object.is_a? Class and object < ::Sinatra::Base require 'mustermann/extension' - object.register Extension end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata --- old/metadata 2020-01-03 16:27:29.000000000 +0100 +++ new/metadata 2022-07-25 00:01:46.000000000 +0200 @@ -1,15 +1,15 @@ --- !ruby/object:Gem::Specification name: mustermann version: !ruby/object:Gem::Version - version: 1.1.1 + version: 3.0.0 platform: ruby authors: - Konstantin Haase - Zachary Scott -autorequire: +autorequire: bindir: bin cert_chain: [] -date: 2020-01-03 00:00:00.000000000 Z +date: 2022-07-24 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency name: ruby2_keywords @@ -76,7 +76,6 @@ - spec/concat_spec.rb - spec/equality_map_spec.rb - spec/expander_spec.rb -- spec/extension_spec.rb - spec/identity_spec.rb - spec/mapper_spec.rb - spec/mustermann_spec.rb @@ -90,7 +89,7 @@ licenses: - MIT metadata: {} -post_install_message: +post_install_message: rdoc_options: [] require_paths: - lib @@ -98,16 +97,15 @@ requirements: - - ">=" - !ruby/object:Gem::Version - version: 2.2.0 + version: 2.6.0 required_rubygems_version: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' requirements: [] -rubyforge_project: -rubygems_version: 2.7.3 -signing_key: +rubygems_version: 3.0.3.1 +signing_key: specification_version: 4 summary: Your personal string matching expert. test_files: @@ -116,7 +114,6 @@ - spec/concat_spec.rb - spec/equality_map_spec.rb - spec/expander_spec.rb -- spec/extension_spec.rb - spec/identity_spec.rb - spec/mapper_spec.rb - spec/mustermann_spec.rb diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mustermann.gemspec new/mustermann.gemspec --- old/mustermann.gemspec 2020-01-03 16:27:30.000000000 +0100 +++ new/mustermann.gemspec 2022-07-25 00:01:46.000000000 +0200 @@ -10,10 +10,9 @@ s.summary = %q{Your personal string matching expert.} s.description = %q{A library implementing patterns that behave like regular expressions.} s.license = 'MIT' - s.required_ruby_version = '>= 2.2.0' + s.required_ruby_version = '>= 2.6.0' s.files = `git ls-files`.split("\n") s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n") - s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) } s.add_runtime_dependency('ruby2_keywords', '~> 0.0.1') end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/extension_spec.rb new/spec/extension_spec.rb --- old/spec/extension_spec.rb 2020-01-03 16:27:30.000000000 +0100 +++ new/spec/extension_spec.rb 1970-01-01 01:00:00.000000000 +0100 @@ -1,297 +0,0 @@ -# frozen_string_literal: true -require 'support' -require 'mustermann/extension' -require 'sinatra/base' -require 'rack/test' - -describe Mustermann::Extension do - include Rack::Test::Methods - - subject :app do - Sinatra.new do - set :environment, :test - register Mustermann - end - end - - it 'sets up the extension' do - app.should be_a(Mustermann::Extension) - end - - context 'uses Sinatra-style patterns by default' do - before { app.get('/:slug(.:extension)?') { params[:slug] } } - example { get('/foo') .body.should be == 'foo' } - example { get('/foo.') .body.should be == 'foo.' } - example { get('/foo.bar') .body.should be == 'foo' } - example { get('/a%20b') .body.should be == 'a b' } - end - - describe :except do - before { app.get('/auth/*', except: '/auth/login') { 'ok' } } - example { get('/auth/dunno').should be_ok } - example { get('/auth/login').should_not be_ok } - end - - describe :capture do - context 'global' do - before do - app.set(:pattern, capture: { ext: %w[png jpg gif] }) - app.get('/:slug(.:ext)?') { params[:slug] } - end - - example { get('/foo.bar').body.should be == 'foo.bar' } - example { get('/foo.png').body.should be == 'foo' } - end - - context 'route local' do - before do - app.set(:pattern, nil) - app.get('/:id', capture: /\d+/) { 'ok' } - end - - example { get('/42').should be_ok } - example { get('/foo').should_not be_ok } - end - - context 'global and route local' do - context 'global is a hash' do - before do - app.set(:pattern, capture: { id: /\d+/ }) - app.get('/:id(.:ext)?', capture: { ext: 'png' }) { ?a } - app.get('/:id', capture: { id: 'foo' }) { ?b } - app.get('/:id', capture: :alpha) { ?c } - end - - example { get('/20') .body.should be == ?a } - example { get('/20.png') .body.should be == ?a } - example { get('/foo') .body.should be == ?b } - example { get('/bar') .body.should be == ?c } - end - - context 'global is not a hash' do - before do - app.set(:pattern, capture: /\d+/) - app.get('/:slug(.:ext)?', capture: { ext: 'png' }) { params[:slug] } - app.get('/:slug', capture: :alpha) { 'ok' } - end - - example { get('/20.png').should be_ok } - example { get('/foo.png').should_not be_ok } - example { get('/foo').should be_ok } - - example { get('/20.png') .body.should be == '20' } - example { get('/42') .body.should be == '42' } - example { get('/foo') .body.should be == 'ok' } - end - end - end - - describe :pattern do - describe :except do - before { app.get('/auth/*', pattern: { except: '/auth/login' }) { 'ok' } } - example { get('/auth/dunno').should be_ok } - example { get('/auth/login').should_not be_ok } - end - - describe :capture do - context 'route local' do - before do - app.set(:pattern, nil) - app.get('/:id', pattern: { capture: /\d+/ }) { 'ok' } - end - - example { get('/42').should be_ok } - example { get('/foo').should_not be_ok } - end - - context 'global and route local' do - context 'global is a hash' do - before do - app.set(:pattern, capture: { id: /\d+/ }) - app.get('/:id(.:ext)?', pattern: { capture: { ext: 'png' }}) { ?a } - app.get('/:id', pattern: { capture: { id: 'foo' }}) { ?b } - app.get('/:id', pattern: { capture: :alpha }) { ?c } - end - - example { get('/20') .body.should be == ?a } - example { get('/20.png') .body.should be == ?a } - example { get('/foo') .body.should be == ?b } - example { get('/bar') .body.should be == ?c } - end - - context 'global is not a hash' do - before do - app.set(:pattern, capture: /\d+/) - app.get('/:slug(.:ext)?', pattern: { capture: { ext: 'png' }}) { params[:slug] } - app.get('/:slug', pattern: { capture: :alpha }) { 'ok' } - end - - example { get('/20.png').should be_ok } - example { get('/foo.png').should_not be_ok } - example { get('/foo').should be_ok } - - example { get('/20.png') .body.should be == '20' } - example { get('/42') .body.should be == '42' } - example { get('/foo') .body.should be == 'ok' } - end - end - end - - describe :greedy do - context 'default' do - before { app.get('/:name.:ext') { params[:name] }} - example { get('/foo.bar') .body.should be == 'foo' } - example { get('/foo.bar.baz') .body.should be == 'foo.bar' } - end - - context 'enabled' do - before { app.get('/:name.:ext', pattern: { greedy: true }) { params[:name] }} - example { get('/foo.bar') .body.should be == 'foo' } - example { get('/foo.bar.baz') .body.should be == 'foo.bar' } - end - - context 'disabled' do - before { app.get('/:name.:ext', pattern: { greedy: false }) { params[:name] }} - example { get('/foo.bar') .body.should be == 'foo' } - example { get('/foo.bar.baz') .body.should be == 'foo' } - end - - context 'global' do - before do - app.set(:pattern, greedy: false) - app.get('/:name.:ext') { params[:name] } - end - - example { get('/foo.bar') .body.should be == 'foo' } - example { get('/foo.bar.baz') .body.should be == 'foo' } - end - end - - describe :space_matches_plus do - context 'default' do - before { app.get('/foo bar') { 'ok' }} - example { get('/foo%20bar') .should be_ok } - example { get('/foo+bar') .should be_ok } - end - - context 'enabled' do - before { app.get('/foo bar', pattern: { space_matches_plus: true }) { 'ok' }} - example { get('/foo%20bar') .should be_ok } - example { get('/foo+bar') .should be_ok } - end - - context 'disabled' do - before { app.get('/foo bar', pattern: { space_matches_plus: false }) { 'ok' }} - example { get('/foo%20bar') .should be_ok } - example { get('/foo+bar') .should_not be_ok } - end - - context 'global' do - before do - app.set(:pattern, space_matches_plus: false) - app.get('/foo bar') { 'ok' } - end - - example { get('/foo%20bar') .should be_ok } - example { get('/foo+bar') .should_not be_ok } - end - end - - describe :uri_decode do - context 'default' do - before { app.get('/&') { 'ok' }} - example { get('/&') .should be_ok } - example { get('/%26') .should be_ok } - end - - context 'enabled' do - before { app.get('/&', pattern: { uri_decode: true }) { 'ok' }} - example { get('/&') .should be_ok } - example { get('/%26') .should be_ok } - end - - context 'disabled' do - before { app.get('/&', pattern: { uri_decode: false }) { 'ok' }} - example { get('/&') .should be_ok } - example { get('/%26') .should_not be_ok } - end - - context 'global' do - before do - app.set(:pattern, uri_decode: false) - app.get('/&') { 'ok' } - end - - example { get('/&') .should be_ok } - example { get('/%26') .should_not be_ok } - end - end - end - - describe :type do - describe :identity do - before do - app.set(:pattern, type: :identity) - app.get('/:foo') { 'ok' } - end - - example { get('/:foo').should be_ok } - example { get('/foo').should_not be_ok } - end - - describe :rails do - before do - app.set(:pattern, type: :rails) - app.get('/:slug(.:extension)') { params[:slug] } - end - - example { get('/foo') .body.should be == 'foo' } - example { get('/foo.') .body.should be == 'foo.' } - example { get('/foo.bar') .body.should be == 'foo' } - example { get('/a%20b') .body.should be == 'a b' } - end - - describe :shell do - before do - app.set(:pattern, type: :shell) - app.get('/{foo,bar}') { 'ok' } - end - - example { get('/foo').should be_ok } - example { get('/bar').should be_ok } - end - - describe :simple do - before do - app.set(:pattern, type: :simple) - app.get('/(a)') { 'ok' } - end - - example { get('/(a)').should be_ok } - example { get('/a').should_not be_ok } - end - - describe :simple do - before do - app.set(:pattern, type: :template) - app.get('/foo{/segments*}{.ext}') { "%p %p" % [params[:segments], params[:ext]] } - end - - example { get('/foo/a.png').should be_ok } - example { get('/foo/a').should_not be_ok } - - example { get('/foo/a.png').body.should be == '["a"] "png"' } - example { get('/foo/a/b.png').body.should be == '["a", "b"] "png"' } - end - end - - context 'works with filters' do - before do - app.before('/auth/*', except: '/auth/login') { halt 'auth required' } - app.get('/auth/login') { 'please log in' } - end - - example { get('/auth/dunno').body.should be == 'auth required' } - example { get('/auth/login').body.should be == 'please log in' } - end -end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/mustermann_spec.rb new/spec/mustermann_spec.rb --- old/spec/mustermann_spec.rb 2020-01-03 16:27:30.000000000 +0100 +++ new/spec/mustermann_spec.rb 2022-07-25 00:01:46.000000000 +0200 @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'support' require 'mustermann' -require 'mustermann/extension' require 'sinatra/base' describe Mustermann do @@ -70,11 +69,9 @@ describe :extend_object do context 'special behavior for Sinatra only' do example { Object .new.extend(Mustermann).should be_a(Mustermann) } - example { Object .new.extend(Mustermann).should_not be_a(Mustermann::Extension) } example { Class .new.extend(Mustermann).should be_a(Mustermann) } - example { Class .new.extend(Mustermann).should_not be_a(Mustermann::Extension) } - example { Sinatra .new.extend(Mustermann).should_not be_a(Mustermann) } - example { Sinatra .new.extend(Mustermann).should be_a(Mustermann::Extension) } + + example { expect { Sinatra.new.extend(Mustermann) }.to raise_error(RuntimeError, "Mustermann extension for Sinatra has been extracted into its own gem. More information at https://github.com/sinatra/mustermann-sinatra-extension") } end end
