http_stub 0.15.3 → 0.15.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1ce903432525a6be7ca09e19d0ab38d4e9a4fdd8
4
- data.tar.gz: 5851fd5ffc47448f50e02491b3bb9e32d1097b21
3
+ metadata.gz: fd0deffefb3609ce28def378afa514c15bf7a0f0
4
+ data.tar.gz: 2f6ea87666f76d3a454e6b7d422268a76c4169d5
5
5
  SHA512:
6
- metadata.gz: 267d2f39bd292b6d6e34147bfcef6568adfe6878f27314c2ada04932a26bbd36bbbbd2ab13ed962fb6ef56516f6787b41ac4089f44008b2e9dd03474abbd45ba
7
- data.tar.gz: f624649d74f4498a143f03c3475b3b3efea428c4ab0b9bf5f0d6d130e539a4e6880a45228b60f42a9d346881efa303b8f7023611caa2e366248c12ced600415d
6
+ metadata.gz: 24e93f05fe3cebf14a56239a96bf10cf31d79a94db3dcdbf4699c9eeabdf65e808ebc3361cc7e28cafafd5499da8c1f6e6173e77a6f35b64243b5e08d1503533
7
+ data.tar.gz: 51e0d3f4b7ceab10f084875e3eed84f8ec83a0035f685e4d29f43366ec649a97e23236fa2df10d5b24f7ad0bb0b9558b36c25311362f59d8bd934cd8f96a3d00
data/lib/http_stub.rb CHANGED
@@ -11,7 +11,9 @@ require 'active_support/core_ext/module/aliasing'
11
11
  require 'active_support/core_ext/module/delegation'
12
12
  require 'active_support/core_ext/hash/slice'
13
13
  require 'active_support/core_ext/hash/deep_merge'
14
+ require 'active_support/core_ext/hash/indifferent_access'
14
15
 
16
+ require_relative 'http_stub/hash_with_indifferent_and_insensitive_access'
15
17
  require_relative 'http_stub/extensions/core/hash'
16
18
  require_relative 'http_stub/extensions/rack/handler'
17
19
  require_relative 'http_stub/server/headers'
@@ -5,32 +5,30 @@ module HttpStub
5
5
  class StubResponse
6
6
 
7
7
  def initialize(id, args)
8
- @id = id
9
- @args = args
8
+ @id = id
9
+ @status = args[:status] || ""
10
+ @headers = (args[:headers] || {}).with_indifferent_and_insensitive_access
11
+ @body = args[:body]
12
+ @delay_in_seconds = args[:delay_in_seconds] || ""
10
13
  end
11
14
 
12
15
  def payload
13
- {
14
- status: @args[:status] || "",
15
- headers: @args[:headers] || {},
16
- body: @args[:body],
17
- delay_in_seconds: @args[:delay_in_seconds] || ""
18
- }
16
+ { status: @status, headers: @headers, body: @body, delay_in_seconds: @delay_in_seconds }
19
17
  end
20
18
 
21
19
  def file
22
- if contains_file?
23
- args = { id: @id, type: @args[:headers]["content-type"] }.merge(@args[:body][:file])
24
- HttpStub::Configurer::Request::StubResponseFile.new(args)
25
- else
26
- nil
27
- end
20
+ contains_file? ? create_response_file : nil
28
21
  end
29
22
 
30
23
  private
31
24
 
32
25
  def contains_file?
33
- @args[:body].is_a?(Hash) && @args[:body].key?(:file)
26
+ @body.is_a?(Hash) && @body.key?(:file)
27
+ end
28
+
29
+ def create_response_file
30
+ args = { id: @id, type: @headers["content-type"] }.merge(@body[:file])
31
+ HttpStub::Configurer::Request::StubResponseFile.new(args)
34
32
  end
35
33
 
36
34
  end
@@ -17,6 +17,10 @@ module HttpStub
17
17
  end
18
18
  end
19
19
 
20
+ def with_indifferent_and_insensitive_access
21
+ HttpStub::HashWithIndifferentAndInsensitiveAccess.new(self)
22
+ end
23
+
20
24
  end
21
25
 
22
26
  end
@@ -0,0 +1,18 @@
1
+ module HttpStub
2
+
3
+ class HashWithIndifferentAndInsensitiveAccess < HashWithIndifferentAccess
4
+
5
+ def [](key)
6
+ self.key?(key) ? super : insensitive_find(key)
7
+ end
8
+
9
+ private
10
+
11
+ def insensitive_find(key)
12
+ entry = self.find { |entry_key, _entry_value| entry_key.to_s.downcase == key.to_s.downcase }
13
+ entry ? entry[1] : nil
14
+ end
15
+
16
+ end
17
+
18
+ end
@@ -1,3 +1,3 @@
1
1
  module HttpStub
2
- VERSION = "0.15.3".freeze
2
+ VERSION = "0.15.4".freeze
3
3
  end
@@ -6,7 +6,7 @@ describe HttpStub::Configurer::Request::StubResponse do
6
6
  let(:stub_response) { HttpStub::Configurer::Request::StubResponse.new(stub_fixture.id, fixture.symbolized) }
7
7
 
8
8
  describe "#payload" do
9
-
9
+
10
10
  subject { stub_response.payload }
11
11
 
12
12
  context "when a status response argument is provided" do
@@ -75,12 +75,13 @@ describe HttpStub::Configurer::Request::StubResponse do
75
75
 
76
76
  context "when the body contains a file hash" do
77
77
 
78
- let(:content_type) { "some-content-type" }
79
- let(:file_path) { "some/file/path" }
80
- let(:file_name) { "some_file.name" }
78
+ let(:content_type_key) { "content-type" }
79
+ let(:content_type_value) { "some-content-type" }
80
+ let(:file_path) { "some/file/path" }
81
+ let(:file_name) { "some_file.name" }
81
82
 
82
83
  before(:example) do
83
- fixture.headers = { "content-type" => content_type }
84
+ fixture.headers = { content_type_key => content_type_value }
84
85
  fixture.body = { file: { path: file_path, name: file_name } }
85
86
  end
86
87
 
@@ -102,10 +103,44 @@ describe HttpStub::Configurer::Request::StubResponse do
102
103
  subject
103
104
  end
104
105
 
105
- it "creates a response file whose type is the content-type response header" do
106
- expect_response_file_to_be_created_with(type: content_type)
106
+ context "when the content type header key is provided" do
107
+
108
+ context "in lower case" do
109
+
110
+ let(:content_type_key) { "content-type" }
111
+
112
+ it "creates a response file whose type is the content-type response header" do
113
+ expect_response_file_to_be_created_with(type: content_type_value)
114
+
115
+ subject
116
+ end
117
+
118
+ end
119
+
120
+ context "in upper case" do
121
+
122
+ let(:content_type_key) { "Content-Type" }
123
+
124
+ it "creates a response file whose type is the content-type response header" do
125
+ expect_response_file_to_be_created_with(type: content_type_value)
126
+
127
+ subject
128
+ end
129
+
130
+ end
131
+
132
+ end
133
+
134
+ context "when the content type header is not provided" do
135
+
136
+ let(:content_type_value) { nil }
137
+
138
+ it "creates a response file whose type is nil, which allows the server to default the value" do
139
+ expect_response_file_to_be_created_with(type: nil)
140
+
141
+ subject
142
+ end
107
143
 
108
- subject
109
144
  end
110
145
 
111
146
  it "returns the created response file" do
@@ -665,20 +665,42 @@ describe HttpStub::Configurer, "when the server is running" do
665
665
 
666
666
  end
667
667
 
668
- context "and the configurer stubs a response with a file body" do
668
+ context "and the configurer stubs responses with a file body" do
669
669
 
670
670
  let(:configurer) { HttpStub::Examples::ConfigurerWithFileResponse.new }
671
671
 
672
672
  context "and a request that matches is made" do
673
673
 
674
- let(:response) { HTTParty.get("#{server_uri}/stub_response_with_file") }
674
+ context "that matches a stub with a custom content-type" do
675
+
676
+ let(:response) { HTTParty.get("#{server_uri}/stub_response_with_file") }
677
+
678
+ it "responds with the configured status code" do
679
+ expect(response.code).to eql(200)
680
+ end
681
+
682
+ it "responds with the configured content type" do
683
+ expect(response.content_type).to eql("application/pdf")
684
+ end
685
+
686
+ it "responds with the configured file" do
687
+ expect_response_to_contain_file(HttpStub::Examples::ConfigurerWithFileResponse::FILE_PATH)
688
+ end
675
689
 
676
- it "responds with the configured status code" do
677
- expect(response.code).to eql(200)
678
690
  end
679
691
 
680
- it "responds with the file" do
681
- expect_response_to_contain_file(HttpStub::Examples::ConfigurerWithFileResponse::FILE_PATH)
692
+ context "that matches a stub with no content-type" do
693
+
694
+ let(:response) { HTTParty.get("#{server_uri}/stub_response_with_file_and_no_content_type") }
695
+
696
+ it "responds with a default content type of 'application/octet-stream'" do
697
+ expect(response.content_type).to eql("application/octet-stream")
698
+ end
699
+
700
+ it "responds with the configured response" do
701
+ expect_response_to_contain_file(HttpStub::Examples::ConfigurerWithFileResponse::FILE_PATH)
702
+ end
703
+
682
704
  end
683
705
 
684
706
  end
@@ -154,4 +154,29 @@ describe HttpStub::Extensions::Core::Hash do
154
154
 
155
155
  end
156
156
 
157
+ describe "#with_indifferent_and_insensitive_access" do
158
+
159
+ let(:hash) { { key: "value" } }
160
+ let(:indifferent_and_insensitive_hash) { instance_double(HttpStub::HashWithIndifferentAndInsensitiveAccess) }
161
+
162
+ subject { hash.with_indifferent_and_insensitive_access }
163
+
164
+ before(:example) do
165
+ allow(HttpStub::HashWithIndifferentAndInsensitiveAccess).to(
166
+ receive(:new).and_return(indifferent_and_insensitive_hash)
167
+ )
168
+ end
169
+
170
+ it "creates a hash with indifferent and insensitive access containing the current hash" do
171
+ expect(HttpStub::HashWithIndifferentAndInsensitiveAccess).to receive(:new).with(hash)
172
+
173
+ subject
174
+ end
175
+
176
+ it "returns the created hash" do
177
+ expect(subject).to eql(indifferent_and_insensitive_hash)
178
+ end
179
+
180
+ end
181
+
157
182
  end
@@ -0,0 +1,179 @@
1
+ describe HttpStub::HashWithIndifferentAndInsensitiveAccess do
2
+
3
+ let(:enhanced_hash) { HttpStub::HashWithIndifferentAndInsensitiveAccess.new(original_hash) }
4
+
5
+ describe "#[]" do
6
+
7
+ subject { enhanced_hash[key] }
8
+
9
+ context "when the original hash contains symbol keys" do
10
+
11
+ let(:original_hash) { { key: "value", another_key: "another value" } }
12
+
13
+ context "and the provided key is a symbol" do
14
+
15
+ context "that exactly matches an original hash key" do
16
+
17
+ let(:key) { :key }
18
+
19
+ it "returns the original value" do
20
+ expect(subject).to eql("value")
21
+ end
22
+
23
+ context "and another key is also a case insensitive match" do
24
+
25
+ let(:original_hash) { { Key: "Case insensitive value", key: "value" } }
26
+
27
+ it "prefers the exact match" do
28
+ expect(subject).to eql("value")
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+
35
+ context "that is a case insensitive match for an original hash key" do
36
+
37
+ let(:key) { :Key }
38
+
39
+ it "returns the original value" do
40
+ expect(subject).to eql("value")
41
+ end
42
+
43
+ end
44
+
45
+ context "that does not match an entry in the original hash" do
46
+
47
+ let(:key) { :does_not_match }
48
+
49
+ it "returns nil" do
50
+ expect(subject).to be(nil)
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+
57
+ context "and the provided key is a string" do
58
+
59
+ context "whose symbol respresentation exactly matches an original hash key" do
60
+
61
+ let(:key) { "key" }
62
+
63
+ it "returns the original value" do
64
+ expect(subject).to eql("value")
65
+ end
66
+
67
+ end
68
+
69
+ context "whose symbol representation is a case insensitive match for an original hash key" do
70
+
71
+ let(:key) { "Key" }
72
+
73
+ it "returns the original value" do
74
+ expect(subject).to eql("value")
75
+ end
76
+
77
+ end
78
+
79
+ context "that does not match an entry in the original hash" do
80
+
81
+ let(:key) { "does not match" }
82
+
83
+ it "returns nil" do
84
+ expect(subject).to be(nil)
85
+ end
86
+
87
+ end
88
+
89
+ end
90
+
91
+ end
92
+
93
+ context "when the original hash string keys" do
94
+
95
+ let(:original_hash) { { "key" => "value", "another_key" => "another value" } }
96
+
97
+ context "and the provided key is a string" do
98
+
99
+ context "that exactly matches an original hash key" do
100
+
101
+ let(:key) { "key" }
102
+
103
+ it "returns the original value" do
104
+ expect(subject).to eql("value")
105
+ end
106
+
107
+ context "and another key is also a case insensitive match" do
108
+
109
+ let(:original_hash) { { "Key" => "Case insensitive value", "key" => "value" } }
110
+
111
+ it "prefers the exact match" do
112
+ expect(subject).to eql("value")
113
+ end
114
+
115
+ end
116
+
117
+ end
118
+
119
+ context "that is a case insensitive match for an original hash key" do
120
+
121
+ let(:key) { "Key" }
122
+
123
+ it "returns the original value" do
124
+ expect(subject).to eql("value")
125
+ end
126
+
127
+ end
128
+
129
+ context "that does not match an entry in the original hash" do
130
+
131
+ let(:key) { "does not match" }
132
+
133
+ it "returns nil" do
134
+ expect(subject).to be(nil)
135
+ end
136
+
137
+ end
138
+
139
+ end
140
+
141
+ context "and the provided key is a symbol" do
142
+
143
+ context "whose string respresentation exactly matches an original hash key" do
144
+
145
+ let(:key) { :key }
146
+
147
+ it "returns the original value" do
148
+ expect(subject).to eql("value")
149
+ end
150
+
151
+ end
152
+
153
+ context "whose string representation is a case insensitive match for an original hash key" do
154
+
155
+ let(:key) { :Key }
156
+
157
+ it "returns the original value" do
158
+ expect(subject).to eql("value")
159
+ end
160
+
161
+ end
162
+
163
+ context "that does not match an entry in the original hash" do
164
+
165
+ let(:key) { :does_not_match }
166
+
167
+ it "returns nil" do
168
+ expect(subject).to be(nil)
169
+ end
170
+
171
+ end
172
+
173
+ end
174
+
175
+ end
176
+
177
+ end
178
+
179
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http_stub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.3
4
+ version: 0.15.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Ueckerman
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-05-20 00:00:00.000000000 Z
12
+ date: 2015-05-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -278,6 +278,7 @@ files:
278
278
  - "./lib/http_stub/configurer/server/request_processor.rb"
279
279
  - "./lib/http_stub/extensions/core/hash.rb"
280
280
  - "./lib/http_stub/extensions/rack/handler.rb"
281
+ - "./lib/http_stub/hash_with_indifferent_and_insensitive_access.rb"
281
282
  - "./lib/http_stub/rake/server_daemon_tasks.rb"
282
283
  - "./lib/http_stub/rake/server_tasks.rb"
283
284
  - "./lib/http_stub/rake/task_generators.rb"
@@ -336,6 +337,7 @@ files:
336
337
  - "./spec/lib/http_stub/configurer_spec.rb"
337
338
  - "./spec/lib/http_stub/extensions/core/hash_spec.rb"
338
339
  - "./spec/lib/http_stub/extensions/rack/handler_spec.rb"
340
+ - "./spec/lib/http_stub/hash_with_indifferent_and_insensitive_access_spec.rb"
339
341
  - "./spec/lib/http_stub/rake/server_daemon_tasks_smoke_spec.rb"
340
342
  - "./spec/lib/http_stub/rake/server_tasks_smoke_spec.rb"
341
343
  - "./spec/lib/http_stub/rake/server_tasks_spec.rb"
@@ -421,6 +423,7 @@ test_files:
421
423
  - "./spec/lib/http_stub/configurer_spec.rb"
422
424
  - "./spec/lib/http_stub/extensions/core/hash_spec.rb"
423
425
  - "./spec/lib/http_stub/extensions/rack/handler_spec.rb"
426
+ - "./spec/lib/http_stub/hash_with_indifferent_and_insensitive_access_spec.rb"
424
427
  - "./spec/lib/http_stub/rake/server_daemon_tasks_smoke_spec.rb"
425
428
  - "./spec/lib/http_stub/rake/server_tasks_smoke_spec.rb"
426
429
  - "./spec/lib/http_stub/rake/server_tasks_spec.rb"