Skip to content

Commit 46975fc

Browse files
committed
Support for different rubies
1 parent 054aff9 commit 46975fc

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

lib/contracts/engine.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class << self
1414
# .apply(klass) - enables contracts engine on klass
1515
# .applied?(klass) - returns true if klass has contracts engine
1616
# .fetch_from(klass) - returns contracts engine for klass
17-
delegate [:apply, :applied?, :fetch_from] => :base_engine
17+
def_delegators :base_engine, :apply, :applied?, :fetch_from
1818

1919
private
2020

lib/contracts/engine/base.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ def eigenclass
121121
end
122122

123123
def eigenclass_engine
124-
Engine.fetch_from(eigenclass)
124+
Eigenclass.lift(eigenclass, klass)
125125
end
126126

127127
def decorators

lib/contracts/engine/eigenclass.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,22 @@ class Eigenclass < Base
66
# Class that owns this eigenclass
77
attr_accessor :owner_class
88

9+
# Automatically enables eigenclass engine if it is not
10+
# Returns its engine
11+
# NOTE: Required by jruby in 1.9 mode. Otherwise inherited
12+
# eigenclasses don't have their engines
13+
#
14+
# @param [Class] eigenclass - class in question
15+
# @param [Class] owner - owner of eigenclass
16+
# @return [Engine::Eigenclass]
17+
def self.lift(eigenclass, owner)
18+
return Engine.fetch_from(eigenclass) if Engine.applied?(eigenclass)
19+
20+
Target.new(eigenclass).apply(Eigenclass)
21+
Engine.fetch_from(owner).set_eigenclass_owner
22+
Engine.fetch_from(eigenclass)
23+
end
24+
925
# No-op for eigenclasses
1026
def set_eigenclass_owner
1127
end

0 commit comments

Comments
 (0)