akamai_rspec 1.1.0 → 1.2.0

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: 07fe4b6c45db380b71ff544f77ae226a4cc74809
4
- data.tar.gz: b1f5f15809c6003669937c1466db669c6b9a4c27
3
+ metadata.gz: 6a7d0d25f07249dc9449d8745ef64bdff88179da
4
+ data.tar.gz: 6c792c083bc7ba702842035d68e202f81219f07a
5
5
  SHA512:
6
- metadata.gz: a1c3e9b1f6bfa2ad4aa0c1b72f0775c1dae149e20dac1ac07b306b2763b2b240285b1e1af7eb470a9f740e2d7be16bf5de8617f2170f44d34b00131d511dabf2
7
- data.tar.gz: 8116ec3976984834df9d42218aa284960cd2aed54b1379f6b47dfba0524acb28b348fbb3dc2a17298073e69caa6fd9d54395347c57212bf3c86123db7f32ee66
6
+ metadata.gz: f7b7382b0992947fa6f30dbedc42487b1441c9182f571a236db3653288b21ba8b6640b7b316a6a04db185090a747c23847eac94686cbc154998d9a4e388d57b8
7
+ data.tar.gz: cb95c3ca5e7ea8610201ccce9307a01d74336fc0db3c90ae8b2ea76b9256876f6ce5b0ee317d6d9561b37274c4d9bf55f34729df44abf931e724559d7e6264e3
@@ -4,17 +4,26 @@ require 'akamai_rspec/request'
4
4
 
5
5
  module AkamaiRSpec
6
6
  module Matchers
7
- define :be_cacheable do |request_count: 4, headers: {}, allow_refresh: false|
7
+ define :be_cacheable do |request_count: :until_same_server, headers: {}, allow_refresh: false|
8
8
  match do |url|
9
9
  @responses = []
10
10
  fail("URL must be a string") unless url.is_a? String
11
11
 
12
- @responses = (1..request_count).map {
13
- AkamaiRSpec::Request.get url, headers
14
- }
12
+ if request_count == :until_same_server
13
+ while response = AkamaiRSpec::Request.get(url, headers) do
14
+ if cache_servers.include?(cache_server response.headers[:x_cache])
15
+ @responses.push response
16
+ break
17
+ end
18
+ @responses.push response
19
+ end
20
+ else
21
+ @responses = (1..request_count).map {
22
+ AkamaiRSpec::Request.get url, headers
23
+ }
24
+ end
15
25
 
16
26
  @responses.any? do |response|
17
- fail("Error fetching #{url}: #{response}") if response.code != 200
18
27
  if refresh_hit? response
19
28
  allow_refresh
20
29
  else
@@ -46,6 +55,14 @@ module AkamaiRSpec
46
55
  def cache_headers
47
56
  @responses.map {|response| response.headers[:x_cache] }
48
57
  end
58
+
59
+ def cache_servers
60
+ cache_headers.map &method(:cache_server)
61
+ end
62
+
63
+ def cache_server(header)
64
+ header.split(" ")[2]
65
+ end
49
66
  end
50
67
 
51
68
  alias_method :be_cachable, :be_cacheable
@@ -13,7 +13,7 @@ module AkamaiRSpec
13
13
  fail("AKA_PM_FWD_URL not found in the x-akamai-session-info header '#{session_info}'")
14
14
  end
15
15
  outcome_url = outcome_attribute.split('value=')[1]
16
- response.code == 200 && outcome_url == "#{channel}"
16
+ response.code == 200 && outcome_url == channel
17
17
  end
18
18
  end
19
19
  end
@@ -119,14 +119,17 @@ module AkamaiRSpec
119
119
  end
120
120
 
121
121
  def expires(origin_response, akamai_response)
122
- return origin_expires(origin_response), Time.httpdate(akamai_response.headers[:expires])
122
+ return origin_expires(origin_response), httpdate(akamai_response.headers[:expires])
123
123
  end
124
124
 
125
125
  def origin_expires(origin_response)
126
126
  expires = origin_response.headers[:expires]
127
- expires == '0' ? Time.httpdate(origin_response.headers[:date]) : Time.httpdate(expires)
127
+ expires == '0' ? httpdate(origin_response.headers[:date]) : httpdate(expires)
128
128
  end
129
129
 
130
+ def httpdate(header)
131
+ Time.httpdate(header) rescue nil
132
+ end
130
133
  end
131
134
  end
132
135
  end
@@ -5,20 +5,10 @@ module AkamaiRSpec
5
5
  class Request
6
6
  extend Forwardable
7
7
 
8
- @@akamai_stg_domain = nil
9
- @@akamai_prod_domain = nil
10
-
11
- def self.stg_domain=(domain)
12
- @@akamai_stg_domain = domain
13
- end
14
-
15
- def self.prod_domain=(domain)
16
- @@akamai_prod_domain = domain
17
- end
18
-
19
- def self.network=(env)
20
- @@env = env
8
+ class << self
9
+ attr_accessor :stg_domain, :prod_domain, :network
21
10
  end
11
+ self.network = 'prod'
22
12
 
23
13
  def self.get(url, headers={})
24
14
  new.get(url, headers.merge(debug_headers))
@@ -57,30 +47,22 @@ module AkamaiRSpec
57
47
  end
58
48
 
59
49
  def initialize
60
- @@env ||= 'prod'
61
-
62
- @domain = case @@env.downcase
63
- when 'staging'
64
- if @@akamai_stg_domain.nil?
65
- raise ArgumentError.new(
66
- "You must set the staging domain: AkamaiRSpec::Request.stg_domain = 'www.example.com.edgesuite.net'"
67
- )
68
- end
69
-
70
- @@akamai_stg_domain
71
- else
72
- if @@akamai_prod_domain.nil?
73
- raise ArgumentError.new(
74
- "You must set the prod domain: AkamaiRSpec::Request.prod_domain = 'www.example.com.edgesuite.net'"
75
- )
76
- end
77
-
78
- @@akamai_prod_domain
79
- end
80
-
81
- @rest_client = RestClient::Request.new(method: :get,
82
- url: 'fakeurl.com',
83
- verify_ssl: false)
50
+ @domain = case self.class.network.downcase
51
+ when 'staging'
52
+ self.class.stg_domain or raise ArgumentError.new(
53
+ "You must set the staging domain: AkamaiRSpec::Request.stg_domain = 'www.example.com.edgesuite.net'"
54
+ )
55
+ else
56
+ self.class.prod_domain or raise ArgumentError.new(
57
+ "You must set the prod domain: AkamaiRSpec::Request.prod_domain = 'www.example.com.edgesuite.net'"
58
+ )
59
+ end
60
+
61
+ @rest_client = RestClient::Request.new(
62
+ method: :get,
63
+ url: 'fakeurl.com',
64
+ verify_ssl: false
65
+ )
84
66
  end
85
67
 
86
68
  delegate [:parse_url_with_auth, :stringify_headers] => :@rest_client
@@ -115,8 +97,7 @@ module AkamaiRSpec
115
97
 
116
98
  def build_request(uri, headers)
117
99
  req = Net::HTTP::Get.new(uri)
118
- headers.each { |key, value| req.send(:[]=, key, value) }
119
-
100
+ headers.each { |key, value| req[key] = value }
120
101
  req
121
102
  end
122
103
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: akamai_rspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bianca Gibson
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-11-03 00:00:00.000000000 Z
12
+ date: 2016-11-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client