Sha256: 391c54bdfde72b74f0bc97fa4cd0823853a2502bca40a1fe8074d4e08628520e

Contents?: true

Size: 1.27 KB

Versions: 4

Compression:

Stored size: 1.27 KB

Contents

module Mocktail
  class StringifiesCall
    def stringify(call, anonymous_blocks: false, always_parens: false)
      "#{call.method}#{args_to_s(call, parens: always_parens)}#{blockify(call.block, anonymous: anonymous_blocks)}"
    end

    private

    def args_to_s(call, parens: true)
      args_lists = [
        argify(call.args),
        kwargify(call.kwargs),
        lambdafy(call.block)
      ].compact

      if !args_lists.empty?
        "(#{args_lists.join(", ")})"
      elsif parens
        "()"
      end
    end

    def argify(args)
      return unless args && !args.empty?
      args.map(&:inspect).join(", ")
    end

    def kwargify(kwargs)
      return unless kwargs && !kwargs.empty?
      kwargs.map { |key, val| "#{key}: #{val.inspect}" }.join(", ")
    end

    def lambdafy(block)
      return unless block&.lambda?
      "&lambda[#{source_locationify(block)}]"
    end

    def blockify(block, anonymous:)
      return unless block && !block.lambda?

      if anonymous
        " {…}"
      else
        " { Proc at #{source_locationify(block)} }"
      end
    end

    def source_locationify(block)
      "#{strip_pwd(block.source_location[0])}:#{block.source_location[1]}"
    end

    def strip_pwd(path)
      path.gsub(Dir.pwd + File::SEPARATOR, "")
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
mocktail-0.0.6 lib/mocktail/share/stringifies_call.rb
mocktail-0.0.5 lib/mocktail/share/stringifies_call.rb
mocktail-0.0.4 lib/mocktail/share/stringifies_call.rb
mocktail-0.0.3 lib/mocktail/share/stringifies_call.rb