Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
BurdetteLamar opened this issue Dec 13, 2017 · 0 comments

Comments

@BurdetteLamar
Copy link

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:in method_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:in open'
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:in blo
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:in blo
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:in blo
ck in <top (required)>'
--- end trace ---

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant