egonSchiele / contracts.ruby

Contracts for Ruby.
http://egonschiele.github.com/contracts.ruby
BSD 2-Clause "Simplified" License
1.44k stars 82 forks source link

Method validate_decorators! claims multiple (55!) contracts for method psych_yaml_as #280

Open BurdetteLamar opened 6 years ago

BurdetteLamar commented 6 years ago

Hacking in a fix for Issue #279 (Method 'validate_decorators!' raises NameError) causes (in my app) that same method to raise RuntimeError with a message (see below) claiming that there are multiple contracts on method 'psych_yaml_as', which is in /lib/ruby/2.2.0/psych/core_ext.rb.

I don't know what to make of this. I'm not optimistic about crafting a simple example that shows the error, but hope that the trace (see below) will be a clue for some guru.

--- begin message -- c:/Ruby22/lib/ruby/gems/2.2.0/gems/contracts-0.16.0/lib/contracts/method_handler .rb:159:in `validate_decorators!': (RuntimeError) Oops, it looks like method 'psych_yaml_as' has multiple contracts:

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Symbol

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Symbol

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Symbol

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Symbol

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Symbol

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Symbol

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Symbol

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Symbol

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Symbol

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Symbol

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Symbol

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Symbol

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Symbol

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Symbol

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Symbol

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Symbol

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Symbol

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Symbol

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

<Contracts::Builtin::Or:0x1e45dc8 @vals=[Symbol, Array]>

Did you accidentally put more than one contract on a single function, like so?

Contract String => String Contract Num => String def foo x end

If you did NOT, then you have probably discovered a bug in this library. Please file it along with the relevant code at: https://github.com/egonSchiele/contracts.ruby/issues

--- end message---

--- begin trace --- from c:/Ruby22/lib/ruby/gems/2.2.0/gems/contracts-0.16.0/lib/contracts/m ethod_handler.rb:31:in handle' from c:/Ruby22/lib/ruby/gems/2.2.0/gems/contracts-0.16.0/lib/contracts/d ecorators.rb:13:inmethod_added' from c:/Ruby22/lib/ruby/2.2.0/psych/core_ext.rb:21:in <class:Module>' from c:/Ruby22/lib/ruby/2.2.0/psych/core_ext.rb:20:in<top (required)>'

    from c:/Ruby22/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in

require' from c:/Ruby22/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in require' from c:/Ruby22/lib/ruby/2.2.0/psych.rb:11:in <top (required)>' from c:/Ruby22/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in require' from c:/Ruby22/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in require' from c:/Ruby22/lib/ruby/2.2.0/yaml.rb:5:in<top (required)>' from c:/Ruby22/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in require' from c:/Ruby22/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in require' from c:/Ruby22/lib/ruby/gems/2.2.0/gems/watir-6.10.0/lib/watir/cookies.r b:1:in <top (required)>' from c:/Ruby22/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in require' from c:/Ruby22/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in require' from c:/Ruby22/lib/ruby/gems/2.2.0/gems/watir-6.10.0/lib/watir.rb:14:in <top (required)>' from c:/Ruby22/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:128:in require' from c:/Ruby22/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:128:in rescue in require' from c:/Ruby22/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:39:in require' from c:/Users/Burdette/Documents/GitHub/RubyTest/examples/github/ui/ui_c lient.rb:1:in<top (required)>' from c:/Users/Burdette/Documents/GitHub/RubyTest/examples/github/base_cl asses/base_class_for_test.rb:5:in require_relative' from c:/Users/Burdette/Documents/GitHub/RubyTest/examples/github/base_cl asses/base_class_for_test.rb:5:in<top (required)>' from c:/Users/Burdette/Documents/GitHub/RubyTest/examples/github/tester_ tour/tests/meet_test.rb:1:in require_relative' from c:/Users/Burdette/Documents/GitHub/RubyTest/examples/github/tester_ tour/tests/meet_test.rb:1:in

' rake aborted! Errno::ENOENT: No such file or directory @ rb_sysopen - C:/Users/Burdette/AppDat a/Roaming/RubyTest/logs/github_api/2017.12.13-Wed-14.47.46/test_meet.xml c:/Users/Burdette/Documents/GitHub/RubyTest/lib/log/log.rb:385:in initialize' c:/Users/Burdette/Documents/GitHub/RubyTest/lib/log/log.rb:385:inopen' c:/Users/Burdette/Documents/GitHub/RubyTest/lib/log/log.rb:385:in get_counts_fr om_file' c:/Users/Burdette/Documents/GitHub/RubyTest/examples/github/Rakefile:190:inblo ck (3 levels) in <top (required)>' c:/Users/Burdette/Documents/GitHub/RubyTest/examples/github/Rakefile:174:in eac h' c:/Users/Burdette/Documents/GitHub/RubyTest/examples/github/Rakefile:174:inblo ck (2 levels) in <top (required)>' c:/Users/Burdette/Documents/GitHub/RubyTest/examples/github/Rakefile:171:in eac h_pair' c:/Users/Burdette/Documents/GitHub/RubyTest/examples/github/Rakefile:171:inblo ck in <top (required)>' --- end trace ---