Runtime assertions for Ruby literal.fun
ruby
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

Property descriptions (#353)

Closes #348

---------

Co-authored-by: Ali Hamdi Ali Fadel <aliosm1997@gmail.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>

authored by

Joel Drapper
Ali Hamdi Ali Fadel
Claude Opus 4.5
and committed by
GitHub
a29263c2 070c7cac

+20 -12
+2 -2
lib/literal/data.rb
··· 10 10 end 11 11 end 12 12 13 - def prop(name, type, kind = :keyword, reader: :public, predicate: false, default: nil) 14 - super(name, type, kind, reader:, writer: false, predicate:, default:) 13 + def prop(name, type, kind = :keyword, reader: :public, predicate: false, default: nil, description: nil) 14 + super(name, type, kind, reader:, writer: false, predicate:, default:, description:) 15 15 end 16 16 17 17 def literal_properties
+2 -2
lib/literal/enum.rb
··· 11 11 def values = @values.keys 12 12 def names = @names 13 13 14 - def prop(name, type, kind = :keyword, reader: :public, predicate: false, default: nil) 15 - super(name, type, kind, reader:, writer: false, predicate:, default:) 14 + def prop(name, type, kind = :keyword, reader: :public, predicate: false, default: nil, description: nil) 15 + super(name, type, kind, reader:, writer: false, predicate:, default:, description:) 16 16 end 17 17 18 18 def inherited(subclass)
+7 -2
lib/literal/properties.rb
··· 14 14 end 15 15 16 16 def prop?(name, type, kind = :keyword, reader: false, writer: false, predicate: false, &coercion) 17 - prop(name, _Union(type, Literal::Undefined), kind, reader:, writer:, predicate:, default: Literal::Undefined, &coercion) 17 + prop(name, _Union(type, Literal::Undefined), kind, reader:, writer:, predicate:, default: Literal::Undefined, description: nil, &coercion) 18 18 end 19 19 20 - def prop(name, type, kind = :keyword, reader: false, writer: false, predicate: false, default: nil, &coercion) 20 + def prop(name, type, kind = :keyword, reader: false, writer: false, predicate: false, default: nil, description: nil, &coercion) 21 21 if default && !(Proc === default || default.frozen?) 22 22 raise Literal::ArgumentError.new("The default must be a frozen object or a Proc.") 23 23 end ··· 44 44 raise Literal::ArgumentError.new("The kind must be one of #{Literal::Property::KIND_OPTIONS.map(&:inspect).join(', ')}.") 45 45 end 46 46 47 + unless description.nil? || String === description 48 + raise Literal::ArgumentError.new("The description must be a String or nil.") 49 + end 50 + 47 51 property = __literal_property_class__.new( 48 52 name:, 49 53 type:, ··· 52 56 writer:, 53 57 predicate:, 54 58 default:, 59 + description:, 55 60 coercion:, 56 61 ) 57 62
+7 -2
lib/literal/property.rb
··· 9 9 10 10 include Comparable 11 11 12 - def initialize(name:, type:, kind:, reader:, writer:, predicate:, default:, coercion:) 12 + def initialize(name:, type:, kind:, reader:, writer:, predicate:, default:, description:, coercion:) 13 13 @name = name 14 14 @type = type 15 15 @kind = kind ··· 17 17 @writer = writer 18 18 @predicate = predicate 19 19 @default = default 20 + @description = description 20 21 @coercion = coercion 21 22 end 22 23 23 - attr_reader :name, :type, :kind, :reader, :writer, :predicate, :default, :coercion 24 + attr_reader :name, :type, :kind, :reader, :writer, :predicate, :default, :description, :coercion 24 25 25 26 def optional? 26 27 default? || @type === nil ··· 53 54 def default? 54 55 return true if splat? || double_splat? 55 56 nil != @default 57 + end 58 + 59 + def description? 60 + !!@description 56 61 end 57 62 58 63 def param
+1 -1
lib/literal/struct.rb
··· 2 2 3 3 class Literal::Struct < Literal::DataStructure 4 4 class << self 5 - def prop(name, type, kind = :keyword, reader: :public, writer: :public, default: nil) 5 + def prop(name, type, kind = :keyword, reader: :public, writer: :public, default: nil, description: nil) 6 6 super 7 7 end 8 8 end
+1 -3
test/enum.test.rb
··· 191 191 192 192 test "index definitions raise Literal::TypeError when index key type is wrong" do 193 193 klass = Class.new(Literal::Enum(Integer)) do 194 - index :bad, String do |it| 195 - it.value 196 - end 194 + index :bad, String, &:value 197 195 198 196 A = new(1) 199 197 end