data_objects/value_objects_no_parens.rb
tests/_examples/data_objects/value_objects_no_parens.rb in the metorex repository.
# A Data class holds a fixed set of members and cannot be changed once made.
Measure = Data.define :amount, :unit
p Measure.members
p Measure.new(42, "km").amount
p Measure.new(amount: 42, unit: "km").unit
p Measure[3, "mi"].to_h
p Measure.new(1, "m").frozen?
p Measure.new(1, "m").inspect
first = Measure.new 42, "km"
second = Measure.new 42, "km"
p first == second
p first.eql? second
p first.hash == second.hash
p first == Measure.new(42, "mi")
p first.with.equal? first
p first.with(unit: "m").to_h
p first.deconstruct
p first.deconstruct_keys [:amount]
p first.deconstruct_keys nil
p first.to_h { |name, value| [name.to_s, value] }
Named = Data.define(:title, :year) do
def label
"#{title} (#{year})"
end
end
p Named.new("Rain", 1999).label
begin
Measure.new amount: 1
rescue ArgumentError => error
p error.message
end
begin
Measure.new amount: 1, unit: "m", system: "metric"
rescue ArgumentError => error
p error.message
end
Output:
[:amount, :unit]
42
"km"
{amount: 3, unit: "mi"}
true
"#<data Measure amount=1, unit=\"m\">"
true
true
true
false
true
{amount: 42, unit: "m"}
[42, "km"]
{amount: 42}
{amount: 42, unit: "km"}
{"amount" => 42, "unit" => "km"}
"Rain (1999)"
"missing keyword: :unit"
"unknown keyword: :system"