Skip to content

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

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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