Sha256: c88306b97d5e26b15a9c3aee22aca2aa8805253588f98a11c8df61d5b5a7cf99

Contents?: true

Size: 1.6 KB

Versions: 3

Compression:

Stored size: 1.6 KB

Contents

# frozen_string_literal: true

module Coactive
  module Contexts
    module Inspector
      class << self
        class_attribute :max_num, :max_length, :basic_classes
        self.max_num = 3
        self.max_length = 100
        self.basic_classes = [Module, Symbol, String, Numeric, TrueClass, FalseClass, NilClass, Regexp]

        def call(data)
          if data.is_a?(Array)
            inspect_array(data)
          elsif data.is_a?(Hash)
            inspect_hash(data)
          elsif basic_classes.any? { |klass| data.is_a?(klass) }
            inspect_basic(data)
          else
            inspect_object(data)
          end
        end

        private

        def inspect_array(data)
          str = data.take(max_num).map { |v| call(v) }.join(', ')
          str += "..." if data.size > max_num
          "[#{str}]"
        end

        def inspect_hash(data)
          str = data.take(max_num).map { |k, v| "#{k}: #{call(v)}" }.join(', ')
          str += "..." if data.size > max_num
          "{#{str}}"
        end

        def inspect_basic(data)
          inspected = data.inspect
          if inspected.length > max_length
            inspected[0..max_length] + '...'
          else
            inspected
          end
        end

        def inspect_object(data)
          if data.respond_to?(:id)
            "#<#{data.class}/#{data.id}>"
          elsif data.respond_to?(:attributes) && (attributes = data.attributes).is_a?(Hash)
            "#<#{data.class} #{inspect_hash(attributes)}>"
          else
            "#<#{data.class}:#{data.object_id}>"
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
coactive-0.6.0 lib/coactive/contexts/inspector.rb
coactive-0.5.2 lib/coactive/contexts/inspector.rb
coactive-0.5.1 lib/coactive/contexts/inspector.rb