Found a cleaner way to patch inspect

I tried to move on, I really did, but I already had these things in my head and they suddenly clicked together, so I thought it worth updating now.
This commit is contained in:
David Cook
2025-05-28 11:39:42 +10:00
parent 0f3626f12d
commit f9764b697d
2 changed files with 27 additions and 15 deletions

View File

@@ -1,13 +1,13 @@
# frozen_string_literal: true
module DfcConnectorInspect
def inspect
# Show all other instance variables, which are a summary of the semanticPropertiesMap
"#<#{self.class.name} #{instance_values.except('semanticPropertiesMap')}>"
# Override PP method, which is used in pretty_inspect for rails console
def pretty_print_instance_variables
instance_variables.reject{ |var| var == :@semanticPropertiesMap }
end
end
# Include custom inspect on all connector classes
# Include on all connector classes
DataFoodConsortium::Connector.constants.each do |klass|
DataFoodConsortium::Connector.const_get(klass).class_eval do
include DfcConnectorInspect

View File

@@ -2,24 +2,36 @@
require_relative "../spec_helper"
RSpec.describe "#inspect" do
it "provides a clean-enough output for Address" do
RSpec.describe "#pretty_inspect" do
it "provides a clean output for Address" do
subject = DataFoodConsortium::Connector::Address.new("some/id")
expect(subject.inspect).to eq <<~HEREDOC.squish
#<DataFoodConsortium::Connector::Address
{"semanticId"=>"some/id", "semanticType"=>"dfc-b:Address", "street"=>nil, "postalCode"=>nil,
"city"=>nil, "country"=>nil, "latitude"=>nil, "longitude"=>nil, "region"=>nil}>
expect(subject.pretty_inspect).to match <<~HEREDOC
#<DataFoodConsortium::Connector::Address:.*
@semanticId="some/id",
@semanticType="dfc-b:Address",
@street=nil,
@postalCode=nil,
@city=nil,
@country=nil,
@latitude=nil,
@longitude=nil,
@region=nil>
HEREDOC
end
it "provides a clean-enough output for OrderLine" do
it "provides a clean output for OrderLine" do
subject = DataFoodConsortium::Connector::OrderLine.new("some/id")
expect(subject.inspect).to eq <<~HEREDOC.squish
#<DataFoodConsortium::Connector::OrderLine
{"semanticId"=>"some/id", "semanticType"=>"dfc-b:OrderLine", "description"=>nil,
"quantity"=>nil, "price"=>nil, "offer"=>nil, "order"=>nil}>
expect(subject.pretty_inspect).to match <<~HEREDOC
#<DataFoodConsortium::Connector::OrderLine:.*
@semanticId="some/id",
@semanticType="dfc-b:OrderLine",
@description=nil,
@quantity=nil,
@price=nil,
@offer=nil,
@order=nil>
HEREDOC
end
end