Skip to content

Commit e0182fe

Browse files
authored
Work around problems on JRuby and TruffleRuby (#15)
* Explicitly call `super(name)` in ForgeDSL#method_missing TruffleRuby throws an error due to `**nil` being passed along. * Fix issues in `UnBasicObject` for JRuby - Add `#respond_to_missing?` to fix `#respond_to?` - Define `#kind_of?` instead of aliasing to fix test * Change test for `StructMold#lax?` for JRuby original_name of attributes is wrong on JRuby. * Add `irb` to Gemfile dependencies
1 parent 40a543e commit e0182fe

File tree

8 files changed

+75
-9
lines changed

8 files changed

+75
-9
lines changed

Gemfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ group :development do
4747
gem "benchmark-ips", require: false
4848
gem "stackprof", require: false
4949

50+
# For console
51+
gem "irb", require: false
52+
5053
# Useful for manual testing
5154
gem "dry-struct", require: false
5255
end

Gemfile.lock

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ GEM
2929
concurrent-ruby (1.3.5)
3030
connection_pool (2.5.3)
3131
csv (3.3.5)
32+
date (3.5.1)
33+
date (3.5.1-java)
3234
diff-lcs (1.6.2)
3335
docile (1.4.1)
3436
drb (2.2.3)
@@ -54,6 +56,8 @@ GEM
5456
dry-inflector (~> 1.0)
5557
dry-logic (~> 1.4)
5658
zeitwerk (~> 2.6)
59+
erb (6.0.1)
60+
erb (6.0.1-java)
5761
ffi (1.17.2-aarch64-linux-gnu)
5862
ffi (1.17.2-aarch64-linux-musl)
5963
ffi (1.17.2-arm-linux-gnu)
@@ -67,6 +71,14 @@ GEM
6771
i18n (1.14.7)
6872
concurrent-ruby (~> 1.0)
6973
ice_nine (0.11.2)
74+
io-console (0.8.2)
75+
io-console (0.8.2-java)
76+
irb (1.17.0)
77+
pp (>= 0.6.0)
78+
prism (>= 1.3.0)
79+
rdoc (>= 4.0.0)
80+
reline (>= 0.4.2)
81+
jar-dependencies (0.5.5)
7082
json (2.13.2)
7183
json (2.13.2-java)
7284
language_server-protocol (3.17.0.5)
@@ -81,7 +93,16 @@ GEM
8193
parser (3.3.9.0)
8294
ast (~> 2.4.1)
8395
racc
96+
pp (0.6.3)
97+
prettyprint
98+
prettyprint (0.2.0)
8499
prism (1.4.0)
100+
psych (5.3.1)
101+
date
102+
stringio
103+
psych (5.3.1-java)
104+
date
105+
jar-dependencies (>= 0.1.7)
85106
racc (1.8.1)
86107
racc (1.8.1-java)
87108
rainbow (3.1.1)
@@ -91,8 +112,14 @@ GEM
91112
ffi (~> 1.0)
92113
rbs (3.9.4)
93114
logger
115+
rdoc (7.2.0)
116+
erb
117+
psych (>= 4.0.0)
118+
tsort
94119
redcarpet (3.6.1)
95120
regexp_parser (2.10.0)
121+
reline (0.6.3)
122+
io-console (~> 0.5)
96123
rspec (3.13.1)
97124
rspec-core (~> 3.13.0)
98125
rspec-expectations (~> 3.13.0)
@@ -170,6 +197,7 @@ GEM
170197
strscan (>= 1.0.0)
171198
terminal-table (>= 2, < 5)
172199
uri (>= 0.12.0)
200+
stringio (3.2.0)
173201
strscan (3.1.5)
174202
strscan (3.1.5-java)
175203
terminal-table (4.0.0)
@@ -200,6 +228,7 @@ DEPENDENCIES
200228
benchmark-ips
201229
bump
202230
dry-struct
231+
irb
203232
object_forge!
204233
rake
205234
rbs
@@ -230,6 +259,8 @@ CHECKSUMS
230259
concurrent-ruby (1.3.5) sha256=813b3e37aca6df2a21a3b9f1d497f8cbab24a2b94cab325bffe65ee0f6cbebc6
231260
connection_pool (2.5.3) sha256=cfd74a82b9b094d1ce30c4f1a346da23ee19dc8a062a16a85f58eab1ced4305b
232261
csv (3.3.5) sha256=6e5134ac3383ef728b7f02725d9872934f523cb40b961479f69cf3afa6c8e73f
262+
date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
263+
date (3.5.1-java) sha256=12e09477dc932afe45bf768cd362bf73026804e0db1e6c314186d6cd0bee3344
233264
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
234265
docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e
235266
drb (2.2.3) sha256=0b00d6fdb50995fe4a45dea13663493c841112e4068656854646f418fda13373
@@ -238,6 +269,8 @@ CHECKSUMS
238269
dry-logic (1.6.0) sha256=da6fedbc0f90fc41f9b0cc7e6f05f5d529d1efaef6c8dcc8e0733f685745cea2
239270
dry-struct (1.8.0) sha256=74c38b559924fb6462ac43ec780c4533a082d7b1d238a8d7857b773b3b8e2966
240271
dry-types (1.8.3) sha256=b5d97a45e0ed273131c0c3d5bc9f5633c2d1242e092ee47401ce7d5eab65c1bc
272+
erb (6.0.1) sha256=28ecdd99c5472aebd5674d6061e3c6b0a45c049578b071e5a52c2a7f13c197e5
273+
erb (6.0.1-java) sha256=5c6b8d885fb0220d4a8ad158f70430d805845939dd44827e5130ef7fdbaed8ba
241274
ffi (1.17.2-aarch64-linux-gnu) sha256=c910bd3cae70b76690418cce4572b7f6c208d271f323d692a067d59116211a1a
242275
ffi (1.17.2-aarch64-linux-musl) sha256=69e6556b091d45df83e6c3b19d3c54177c206910965155a6ec98de5e893c7b7c
243276
ffi (1.17.2-arm-linux-gnu) sha256=d4a438f2b40224ae42ec72f293b3ebe0ba2159f7d1bd47f8417e6af2f68dbaa5
@@ -250,6 +283,10 @@ CHECKSUMS
250283
fileutils (1.7.3) sha256=57271e854b694a87755d76f836f5c57b2c9538ebbaf4b2154bb66addf15eb5da
251284
i18n (1.14.7) sha256=ceba573f8138ff2c0915427f1fc5bdf4aa3ab8ae88c8ce255eb3ecf0a11a5d0f
252285
ice_nine (0.11.2) sha256=5d506a7d2723d5592dc121b9928e4931742730131f22a1a37649df1c1e2e63db
286+
io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
287+
io-console (0.8.2-java) sha256=837efefe96084c13ae91114917986ae6c6d1cf063b27b8419cc564a722a38af8
288+
irb (1.17.0) sha256=168c4ddb93d8a361a045c41d92b2952c7a118fa73f23fe14e55609eb7a863aae
289+
jar-dependencies (0.5.5) sha256=2972b9fcba4b014e6446a84b5c09674a3e8648b95b71768e729f0e8e40568059
253290
json (2.13.2) sha256=02e1f118d434c6b230a64ffa5c8dee07e3ec96244335c392eaed39e1199dbb68
254291
json (2.13.2-java) sha256=2e1292c45598a3642216820a821cba89c623f99387b8cb90adb345878f4e5c7d
255292
language_server-protocol (3.17.0.5) sha256=fd1e39a51a28bf3eec959379985a72e296e9f9acfce46f6a79d31ca8760803cc
@@ -261,16 +298,22 @@ CHECKSUMS
261298
object_forge (0.2.0)
262299
parallel (1.27.0) sha256=4ac151e1806b755fb4e2dc2332cbf0e54f2e24ba821ff2d3dcf86bf6dc4ae130
263300
parser (3.3.9.0) sha256=94d6929354b1a6e3e1f89d79d4d302cc8f5aa814431a6c9c7e0623335d7687f2
301+
pp (0.6.3) sha256=2951d514450b93ccfeb1df7d021cae0da16e0a7f95ee1e2273719669d0ab9df6
302+
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
264303
prism (1.4.0) sha256=dc0e3e00e93160213dc2a65519d9002a4a1e7b962db57d444cf1a71565bb703e
304+
psych (5.3.1) sha256=eb7a57cef10c9d70173ff74e739d843ac3b2c019a003de48447b2963d81b1974
305+
psych (5.3.1-java) sha256=20a4a81ad01479ef060f604ed75ba42fe673169e67d923b1bae5aa4e13cc5820
265306
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
266307
racc (1.8.1-java) sha256=54f2e6d1e1b91c154013277d986f52a90e5ececbe91465d29172e49342732b98
267308
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
268309
rake (13.3.0) sha256=96f5092d786ff412c62fde76f793cc0541bd84d2eb579caa529aa8a059934493
269310
rb-fsevent (0.11.2) sha256=43900b972e7301d6570f64b850a5aa67833ee7d87b458ee92805d56b7318aefe
270311
rb-inotify (0.11.1) sha256=a0a700441239b0ff18eb65e3866236cd78613d6b9f78fea1f9ac47a85e47be6e
271312
rbs (3.9.4) sha256=8e42c8f133fc2d94b65f62f34479546de1247b79892b57584f625b61e518a5d7
313+
rdoc (7.2.0) sha256=8650f76cd4009c3b54955eb5d7e3a075c60a57276766ebf36f9085e8c9f23192
272314
redcarpet (3.6.1) sha256=d444910e6aa55480c6bcdc0cdb057626e8a32c054c29e793fa642ba2f155f445
273315
regexp_parser (2.10.0) sha256=cb6f0ddde88772cd64bff1dbbf68df66d376043fe2e66a9ef77fcb1b0c548c61
316+
reline (0.6.3) sha256=1198b04973565b36ec0f11542ab3f5cfeeec34823f4e54cebde90968092b1835
274317
rspec (3.13.1) sha256=b9f9a58fa915b8d94a1d6b3195fe6dd28c4c34836a6097015142c4a9ace72140
275318
rspec-core (3.13.5) sha256=ab3f682897c6131c67f9a17cfee5022a597f283aebe654d329a565f9937a4fa3
276319
rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836
@@ -292,6 +335,7 @@ CHECKSUMS
292335
simplecov_lcov_formatter (0.9.0) sha256=4c1839bb31dcf7a8f7a6474c94ed228aa03b994e9dd5e1965e58b4121b049bed
293336
stackprof (0.2.27) sha256=aff6d28656c852e74cf632cc2046f849033dc1dedffe7cb8c030d61b5745e80c
294337
steep (1.10.0) sha256=1b295b55f9aaff1b8d3ee42453ee55bc2a1078fda0268f288edb2dc014f4d7d1
338+
stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1
295339
strscan (3.1.5) sha256=f8413b90ea9395a69609a4414a8c88551bcda64337e234272c24fcd4c83e5947
296340
strscan (3.1.5-java) sha256=84805eaad025f64854376608a6dbd49d4a22740ec3f21ba880434a6641621f1e
297341
terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2

bin/console

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33

44
require "bundler/setup"
55

6-
require "ostruct"
7-
86
# Load this gem
97
gem_name = File.basename(Dir["*.rb", base: "#{__dir__}/../lib"].first)
108
require gem_name

lib/object_forge/forge_dsl.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ def inspect
278278
#
279279
# @raise [DSLError] if a reserved +name+ is used
280280
def method_missing(name, **nil, &)
281-
return super if frozen?
281+
return super(name) if frozen?
282282
return attribute(name, &) if respond_to_missing?(name, false)
283283

284284
raise DSLError, "#{name.inspect} is a reserved name (in #{name.inspect})"

lib/object_forge/un_basic_object.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,14 @@ class UnBasicObject < ::BasicObject
3434
# @!method to_s
3535
# @see Object#to_s
3636
# @return [String]
37-
%i[class eql? freeze frozen? hash inspect is_a? respond_to? to_s].each do |m|
37+
%i[class eql? freeze frozen? hash inspect is_a? kind_of? respond_to? to_s].each do |m|
3838
define_method(m, ::Object.instance_method(m))
3939
end
40-
alias kind_of? is_a?
4140
# @!endgroup
4241

43-
%i[block_given? raise].each { |m| private define_method(m, ::Object.instance_method(m)) }
42+
%i[block_given? raise respond_to_missing?].each do |m|
43+
private define_method(m, ::Object.instance_method(m))
44+
end
4445

4546
# @!macro pp_support
4647
# Support for +pp+ (and IRB).

sig/object_forge.rbs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,9 @@ class ObjectForge::UnBasicObject < BasicObject
178178
def inspect: -> String
179179

180180
def is_a?: (Module klass) -> bool
181+
def kind_of?: (Module klass) -> bool
181182

182-
def respond_to?: (Symbol name, ?bool include_private) -> bool
183+
def respond_to?: (Symbol name, ?bool include_all) -> bool
183184

184185
def to_s: -> String
185186

@@ -192,4 +193,6 @@ class ObjectForge::UnBasicObject < BasicObject
192193
def block_given?: -> bool
193194

194195
def raise: (_Exception exception, ?String message, ?Array[String] backtrace, ?cause: _Exception) -> void
196+
197+
def respond_to_missing?: (Symbol name, bool include_all) -> bool
195198
end

spec/object_forge/molds/struct_mold_spec.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,12 @@
2828
end
2929
end
3030

31-
include_examples "has an alias", :lax?, :lax
31+
describe "#lax?" do
32+
it "returns the value of #lax" do
33+
expect(described_class.new(lax: false).lax?).to be false
34+
expect(described_class.new(lax: true).lax?).to be true
35+
end
36+
end
3237

3338
describe "#call" do
3439
context "when lax is false" do

spec/object_forge/un_basic_object_spec.rb

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,19 @@ def change
8181
end
8282
end
8383

84-
include_examples "has an alias", :kind_of?, :is_a?
84+
# rubocop:disable Style/ClassCheck
85+
describe "#kind_of?" do
86+
it "returns true if the given class is the instance's ancestor" do
87+
expect(instance.kind_of?(BasicObject)).to be true
88+
expect(instance.kind_of?(described_class)).to be true
89+
expect(instance.kind_of?(classy)).to be true
90+
end
91+
92+
it "returns false if the instance is not an instance of the given class" do
93+
expect(instance.kind_of?(Object)).to be false
94+
end
95+
end
96+
# rubocop:enable Style/ClassCheck
8597

8698
describe "#respond_to?" do
8799
it "returns true if a corresponding method exists" do

0 commit comments

Comments
 (0)