Sha256: c2fba022f2ebb17aba04c860e7e9d29575e038e6b191a38a895bb6fb6ed4532a

Contents?: true

Size: 877 Bytes

Versions: 3

Compression:

Stored size: 877 Bytes

Contents

# frozen_string_literal: true

# There's also nothing stopping you from doing this in
# any ruby class
# class User
#   # ...
#   include Inspector
#   inspector :id, :email, :company_id
#   #...
# end

# puts User.new.inspect
# => #<User:0x10c7a2f80 id: 1, email: "tyler@example.com", company_id: 1>
module Inspector
  def inspect
    string = "#<#{self.class.name}:#{object_id} "
    fields = self.class.inspector_fields.map do |field|
      "#{field}: #{send(field)}"
    end
    "#{string}#{fields.join(', ')}>"
  end

  def self.inspected
    @inspected ||= []
  end

  def self.included(source)
    # $stdout.puts "Overriding inspect on #{source}"
    inspected << source
    source.class_eval do
      def self.inspector(*fields)
        @inspector_fields = *fields
      end

      def self.inspector_fields
        @inspector_fields ||= []
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
bario-0.1.2 lib/bario/inspector.rb
bario-0.1.1 lib/bario/inspector.rb
bario-0.1.0 lib/bario/inspector.rb