Skip to content

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

@BurdetteLamar

Description

@BurdetteLamar

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 ---

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions