specdiff 0.2.0 → 0.3.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,50 +0,0 @@
1
- PATH
2
- remote: ../..
3
- specs:
4
- specdiff (0.2.0)
5
- diff-lcs (~> 1.5)
6
- hashdiff (~> 1.0)
7
-
8
- GEM
9
- remote: https://rubygems.org/
10
- specs:
11
- addressable (2.8.5)
12
- public_suffix (>= 2.0.2, < 6.0)
13
- crack (0.4.5)
14
- rexml
15
- diff-lcs (1.5.0)
16
- domain_name (0.6.20231109)
17
- ffi (1.16.3)
18
- ffi-compiler (1.0.1)
19
- ffi (>= 1.0.0)
20
- rake
21
- hashdiff (1.0.1)
22
- http (5.1.1)
23
- addressable (~> 2.8)
24
- http-cookie (~> 1.0)
25
- http-form_data (~> 2.2)
26
- llhttp-ffi (~> 0.4.0)
27
- http-cookie (1.0.5)
28
- domain_name (~> 0.5)
29
- http-form_data (2.3.0)
30
- llhttp-ffi (0.4.0)
31
- ffi-compiler (~> 1.0)
32
- rake (~> 13.0)
33
- public_suffix (5.0.4)
34
- rake (13.1.0)
35
- rexml (3.2.6)
36
- webmock (3.19.1)
37
- addressable (>= 2.8.0)
38
- crack (>= 0.3.2)
39
- hashdiff (>= 0.4.0, < 2.0.0)
40
-
41
- PLATFORMS
42
- x86_64-linux
43
-
44
- DEPENDENCIES
45
- http
46
- specdiff!
47
- webmock
48
-
49
- BUNDLED WITH
50
- 2.3.5
@@ -1,37 +0,0 @@
1
- require "webmock"
2
- require "specdiff"
3
- require "specdiff/webmock"
4
-
5
- Specdiff.load!(:json)
6
-
7
- include WebMock::API
8
-
9
- WebMock.enable!
10
- WebMock.show_body_diff! # on by default
11
-
12
- stub_request(:post, "https://www.example.com")
13
- .with(
14
- body: JSON.generate({
15
- my_hash: "is great",
16
- the_hash: "is amazing",
17
- })
18
- )
19
- .to_return(status: 400, body: "hello")
20
-
21
- begin
22
- HTTP.post(
23
- "https://www.example.com",
24
- body: JSON.generate({
25
- i_had_to_go: "and post a different hash",
26
- my_hash: "is different",
27
- }),
28
- )
29
- rescue WebMock::NetConnectNotAllowedError => e
30
- puts "success! webmock stopped the request"
31
- puts "here is the error text:\n\n"
32
-
33
- puts e.message
34
- exit 0
35
- end
36
-
37
- puts "nothing was raised??"
@@ -1,39 +0,0 @@
1
- require "webmock"
2
- require "specdiff"
3
- require "specdiff/webmock"
4
-
5
- include WebMock::API
6
-
7
- WebMock.enable!
8
- WebMock.show_body_diff! # on by default
9
-
10
- stub_request(:post, "https://www.example.com")
11
- .with(
12
- body: <<~TEXT1,
13
- this is the expected body
14
- that you should send
15
- nothing less
16
- nothing more
17
- TEXT1
18
- )
19
- .to_return(status: 400, body: "hello")
20
-
21
- begin
22
- HTTP.post(
23
- "https://www.example.com",
24
- body: <<~TEXT2,
25
- this is the unexpected body
26
- that i should not have sent
27
- nothing less
28
- nothing more
29
- TEXT2
30
- )
31
- rescue WebMock::NetConnectNotAllowedError => e
32
- puts "success! webmock stopped the request"
33
- puts "here is the error text:\n\n"
34
-
35
- puts e.message
36
- exit 0
37
- end
38
-
39
- puts "nothing was raised??"
@@ -1,86 +0,0 @@
1
- require "hashdiff"
2
-
3
- class Specdiff::Differ::Hashdiff
4
- extend ::Specdiff::Colorize
5
-
6
- def self.diff(a, b)
7
- # array_path: true returns the path as an array, which differentiates
8
- # between symbol keys and string keys in hashes, while the string
9
- # representation does not.
10
- # hmm it really seems like use_lcs: true gives much less human-readable
11
- # (human-comprehensible) output when arrays are involved.
12
- ::Hashdiff.diff(
13
- a.value, b.value,
14
- array_path: true,
15
- use_lcs: false,
16
- )
17
- end
18
-
19
- def self.empty?(diff)
20
- diff.raw.empty?
21
- end
22
-
23
- def self.stringify(diff)
24
- result = +""
25
-
26
- diff.raw.each do |change|
27
- type = change[0] # the char '+', '-' or '~'
28
- path = change[1] # for example key1.key2[2] (as ["key1", :key2, 2])
29
- path2 = _stringify_path(path)
30
-
31
- if type == "+"
32
- value = change[2]
33
-
34
- result << "added #{path2} with value #{value.inspect}"
35
- elsif type == "-"
36
- value = change[2]
37
-
38
- result << "removed #{path2} with value #{value.inspect}"
39
- elsif type == "~"
40
- from = change[2]
41
- to = change[3]
42
-
43
- result << "changed #{path2} from #{from.inspect} to #{to.inspect}"
44
- else
45
- result << change.inspect
46
- end
47
-
48
- result << "\n"
49
- end
50
-
51
- colorize_by_line(result) do |line|
52
- if line.start_with?("removed")
53
- red(line)
54
- elsif line.start_with?("added")
55
- green(line)
56
- elsif line.start_with?("changed")
57
- yellow(line)
58
- else
59
- reset_color(line)
60
- end
61
- end
62
- end
63
-
64
- PATH_SEPARATOR = ".".freeze
65
-
66
- def self._stringify_path(path)
67
- result = +""
68
-
69
- path.each do |component|
70
- if component.is_a?(Numeric)
71
- result.chomp!(PATH_SEPARATOR)
72
- result << "[#{component}]"
73
- elsif component.is_a?(Symbol)
74
- # by not inspecting symbols they look prettier than strings, but you
75
- # can still tell the difference in the printed output
76
- result << component.to_s
77
- else
78
- result << component.inspect
79
- end
80
-
81
- result << PATH_SEPARATOR
82
- end
83
-
84
- result.chomp(PATH_SEPARATOR)
85
- end
86
- end
@@ -1,41 +0,0 @@
1
- require "hashdiff"
2
- require "json"
3
-
4
- module WebMock
5
- class RequestBodyDiff
6
- def initialize(request_signature, request_stub)
7
- @request_signature = request_signature
8
- @request_stub = request_stub
9
- end
10
-
11
- PrettyPrintableThingy = Struct.new(:specdiff) do
12
- # webmock does not print the diff if it responds true to this.
13
- def empty?
14
- specdiff.empty?
15
- end
16
-
17
- # webmock prints the diff by passing us to PP.pp, which in turn uses this
18
- # method.
19
- def pretty_print(pp)
20
- pp.text("\r") # remove a space that isn't supposed to be there
21
- pp.text(specdiff.to_s)
22
- end
23
- end
24
-
25
- def body_diff
26
- specdiff = Specdiff.diff(request_stub_body, request_signature.body)
27
- PrettyPrintableThingy.new(specdiff)
28
- end
29
-
30
- attr_reader :request_signature, :request_stub
31
- private :request_signature, :request_stub
32
-
33
- private
34
-
35
- def request_stub_body
36
- request_stub.request_pattern &&
37
- request_stub.request_pattern.body_pattern &&
38
- request_stub.request_pattern.body_pattern.pattern
39
- end
40
- end
41
- end