Skip to content

Commit d9ad36e

Browse files
moste00andrykonchin
authored andcommitted
Add StructClass#keyword_init?
1 parent 49eaf5b commit d9ad36e

File tree

3 files changed

+29
-5
lines changed

3 files changed

+29
-5
lines changed

spec/ruby/core/struct/keyword_init_spec.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,24 @@
1717
struct = Struct.new(:arg)
1818
struct.keyword_init?.should be_nil
1919
end
20+
21+
it "returns nil for a struct that does specify keyword_init to be nil" do
22+
struct = Struct.new(:arg,keyword_init: nil)
23+
struct.keyword_init?.should be_nil
24+
end
25+
26+
it "returns true or false for truthy values in general, not just true" do
27+
struct = Struct.new(:arg,keyword_init: 1)
28+
struct.keyword_init?.should be_true
29+
30+
struct = Struct.new(:arg,keyword_init: "")
31+
struct.keyword_init?.should be_true
32+
33+
struct = Struct.new(:arg,keyword_init: [])
34+
struct.keyword_init?.should be_true
35+
36+
struct = Struct.new(:arg,keyword_init: {})
37+
struct.keyword_init?.should be_true
38+
end
2039
end
2140
end

spec/tags/core/struct/keyword_init_tags.txt

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/main/ruby/truffleruby/core/struct.rb

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class << self
3333
alias_method :subclass_new, :new
3434
end
3535

36-
def self.new(klass_name, *attrs, keyword_init: false, &block)
36+
def self.new(klass_name, *attrs, keyword_init: nil, &block)
3737
if klass_name
3838
if Primitive.object_kind_of?(klass_name, Symbol) # Truffle: added to avoid exception and match MRI
3939
attrs.unshift klass_name
@@ -92,7 +92,15 @@ def self.inspect
9292

9393
const_set :STRUCT_ATTRS, attrs
9494
const_set :KEYWORD_INIT, keyword_init
95-
end
95+
96+
def self.keyword_init?
97+
kw_init = self.const_get(:KEYWORD_INIT)
98+
return nil if Primitive.nil?(kw_init)
99+
100+
Primitive.as_boolean(kw_init)
101+
end
102+
103+
end
96104

97105
const_set klass_name, klass if klass_name
98106

0 commit comments

Comments
 (0)